ponder 0.9.2 → 0.9.4-debug.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/ponder.js +2470 -3762
- package/dist/bin/ponder.js.map +1 -1
- package/dist/chunk-6AOFLZJ4.js +1692 -0
- package/dist/chunk-6AOFLZJ4.js.map +1 -0
- package/dist/chunk-DZFRP3KH.js +70 -0
- package/dist/chunk-DZFRP3KH.js.map +1 -0
- package/dist/{chunk-IFTUFVCL.js → chunk-MJKRYIBO.js} +3 -73
- package/dist/chunk-MJKRYIBO.js.map +1 -0
- package/dist/db-in86nyw7.d.ts +625 -0
- package/dist/experimental_unsafe_stores.d.ts +375 -0
- package/dist/experimental_unsafe_stores.js +11 -0
- package/dist/experimental_unsafe_stores.js.map +1 -0
- package/dist/index.d.ts +17 -429
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/package.json +5 -1
- package/src/bin/commands/codegen.ts +8 -10
- package/src/bin/commands/dev.ts +30 -42
- package/src/bin/commands/list.ts +9 -14
- package/src/bin/commands/serve.ts +26 -39
- package/src/bin/commands/start.ts +29 -42
- package/src/bin/utils/{shutdown.ts → exit.ts} +23 -37
- package/src/bin/utils/run.ts +275 -175
- package/src/bin/utils/runServer.ts +1 -5
- package/src/build/configAndIndexingFunctions.ts +547 -512
- package/src/build/index.ts +5 -8
- package/src/build/pre.ts +3 -0
- package/src/config/index.ts +9 -6
- package/src/database/index.ts +72 -72
- package/src/drizzle/kit/index.ts +3 -3
- package/src/experimental_unsafe_stores.ts +4 -0
- package/src/indexing/index.ts +0 -4
- package/src/indexing/service.ts +31 -93
- package/src/indexing-store/historical.ts +2 -4
- package/src/internal/common.ts +2 -0
- package/src/internal/errors.ts +9 -9
- package/src/internal/logger.ts +1 -1
- package/src/internal/metrics.ts +75 -103
- package/src/internal/shutdown.ts +25 -0
- package/src/internal/telemetry.ts +16 -18
- package/src/internal/types.ts +9 -1
- package/src/server/index.ts +3 -5
- package/src/sync/events.ts +4 -4
- package/src/sync/filter.ts +1 -0
- package/src/sync/index.ts +1046 -805
- package/src/sync-historical/index.ts +0 -37
- package/src/sync-realtime/index.ts +48 -48
- package/src/sync-store/encoding.ts +5 -5
- package/src/sync-store/index.ts +5 -23
- package/src/ui/index.ts +2 -11
- package/src/utils/checkpoint.ts +17 -3
- package/src/utils/chunk.ts +7 -0
- package/src/utils/generators.ts +66 -0
- package/src/utils/mutex.ts +34 -0
- package/src/utils/partition.ts +41 -0
- package/src/utils/requestQueue.ts +19 -10
- package/src/utils/zipper.ts +80 -0
- package/dist/chunk-IFTUFVCL.js.map +0 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type Queue, createQueue } from "@ponder/common";
|
|
2
|
+
|
|
3
|
+
export type Mutex<T, P> = ((params: T) => Promise<P>) & Queue<P, T>;
|
|
4
|
+
|
|
5
|
+
export const mutex = <T, P>(fn: (params: T) => Promise<P>): Mutex<T, P> => {
|
|
6
|
+
const queue = createQueue({
|
|
7
|
+
initialStart: true,
|
|
8
|
+
browser: false,
|
|
9
|
+
concurrency: 1,
|
|
10
|
+
worker(params: T) {
|
|
11
|
+
return fn(params);
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
return Object.assign(queue.add, queue);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export const createMutex = () => {
|
|
19
|
+
const queue = createQueue({
|
|
20
|
+
initialStart: true,
|
|
21
|
+
browser: false,
|
|
22
|
+
concurrency: 1,
|
|
23
|
+
worker({ fn, params }: { fn: (params: any) => Promise<any>; params: any }) {
|
|
24
|
+
return fn(params);
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const mutex =
|
|
29
|
+
<T, P>(fn: (params: T) => Promise<P>) =>
|
|
30
|
+
(params: T) =>
|
|
31
|
+
queue.add({ fn, params }) as Promise<P>;
|
|
32
|
+
|
|
33
|
+
return Object.assign(mutex, queue);
|
|
34
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Divides an array into two arrays, where the first array
|
|
3
|
+
* contains all elements that satisfy the predicate, and the
|
|
4
|
+
* second array contains all elements that do not satisfy the
|
|
5
|
+
* predicate.
|
|
6
|
+
*
|
|
7
|
+
* Note: It is assumed that the array is sorted.
|
|
8
|
+
*
|
|
9
|
+
* @param array - The array to partition.
|
|
10
|
+
* @param predicate - The predicate to partition the array by.
|
|
11
|
+
*
|
|
12
|
+
* @returns A tuple containing the left and right arrays.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* const [left, right] = partition([1, 2, 3, 4, 5], (n) => n <= 2);
|
|
17
|
+
* // left = [1, 2]
|
|
18
|
+
* // right = [3, 4, 5]
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export const partition = <T>(
|
|
22
|
+
array: T[],
|
|
23
|
+
predicate: (item: T) => boolean,
|
|
24
|
+
): [T[], T[]] => {
|
|
25
|
+
let low = 0;
|
|
26
|
+
let high = array.length;
|
|
27
|
+
|
|
28
|
+
while (low < high) {
|
|
29
|
+
const mid = Math.floor((low + high) / 2);
|
|
30
|
+
if (predicate(array[mid]!)) {
|
|
31
|
+
low = mid + 1;
|
|
32
|
+
} else {
|
|
33
|
+
high = mid;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const left = array.slice(0, low);
|
|
38
|
+
const right = array.slice(low);
|
|
39
|
+
|
|
40
|
+
return [left, right];
|
|
41
|
+
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Common } from "@/internal/common.js";
|
|
2
|
+
import { ShutdownError } from "@/internal/errors.js";
|
|
2
3
|
import type { Network } from "@/internal/types.js";
|
|
3
4
|
import { type Queue, createQueue } from "@ponder/common";
|
|
4
5
|
import {
|
|
@@ -44,35 +45,44 @@ const BASE_DURATION = 125;
|
|
|
44
45
|
* Creates a queue built to manage rpc requests.
|
|
45
46
|
*/
|
|
46
47
|
export const createRequestQueue = ({
|
|
47
|
-
network,
|
|
48
48
|
common,
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
common: Common;
|
|
52
|
-
}): RequestQueue => {
|
|
49
|
+
network,
|
|
50
|
+
}: { common: Common; network: Network }): RequestQueue => {
|
|
53
51
|
// @ts-ignore
|
|
54
52
|
const fetchRequest = async (request: EIP1193Parameters<PublicRpcSchema>) => {
|
|
55
53
|
for (let i = 0; i <= RETRY_COUNT; i++) {
|
|
56
54
|
try {
|
|
57
55
|
const stopClock = startClock();
|
|
56
|
+
if (common.shutdown.isKilled) {
|
|
57
|
+
throw new ShutdownError();
|
|
58
|
+
}
|
|
58
59
|
common.logger.trace({
|
|
59
60
|
service: "rpc",
|
|
60
61
|
msg: `Sent ${request.method} request (params=${JSON.stringify(request.params)})`,
|
|
61
62
|
});
|
|
63
|
+
|
|
62
64
|
const response = await network.transport.request(request);
|
|
63
|
-
common.logger.trace({
|
|
64
|
-
service: "rpc",
|
|
65
|
-
msg: `Received ${request.method} response (duration=${stopClock()}, params=${JSON.stringify(request.params)})`,
|
|
66
|
-
});
|
|
67
65
|
common.metrics.ponder_rpc_request_duration.observe(
|
|
68
66
|
{ method: request.method, network: network.name },
|
|
69
67
|
stopClock(),
|
|
70
68
|
);
|
|
69
|
+
if (common.shutdown.isKilled) {
|
|
70
|
+
throw new ShutdownError();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
common.logger.trace({
|
|
74
|
+
service: "rpc",
|
|
75
|
+
msg: `Received ${request.method} response (duration=${stopClock()}, params=${JSON.stringify(request.params)})`,
|
|
76
|
+
});
|
|
71
77
|
|
|
72
78
|
return response;
|
|
73
79
|
} catch (_error) {
|
|
74
80
|
const error = _error as Error;
|
|
75
81
|
|
|
82
|
+
if (common.shutdown.isKilled) {
|
|
83
|
+
throw new ShutdownError();
|
|
84
|
+
}
|
|
85
|
+
|
|
76
86
|
if (
|
|
77
87
|
request.method === "eth_getLogs" &&
|
|
78
88
|
isHex(request.params[0].fromBlock) &&
|
|
@@ -139,7 +149,6 @@ export const createRequestQueue = ({
|
|
|
139
149
|
});
|
|
140
150
|
|
|
141
151
|
return {
|
|
142
|
-
...requestQueue,
|
|
143
152
|
request: <TParameters extends EIP1193Parameters<PublicRpcSchema>>(
|
|
144
153
|
params: TParameters,
|
|
145
154
|
) => {
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merges two sorted arrays into a single sorted array.
|
|
3
|
+
*
|
|
4
|
+
* @param array1 - The first array to merge.
|
|
5
|
+
* @param array2 - The second array to merge.
|
|
6
|
+
* @param compare - The comparison function to use.
|
|
7
|
+
*
|
|
8
|
+
* @returns The merged array.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const result = zipper([1, 3, 5], [2, 4, 6]);
|
|
13
|
+
* // result = [1, 2, 3, 4, 5, 6]
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export const zipper = <T>(
|
|
17
|
+
array1: T[],
|
|
18
|
+
array2: T[],
|
|
19
|
+
compare?: (a: T, b: T) => number,
|
|
20
|
+
): T[] => {
|
|
21
|
+
const result: T[] = [];
|
|
22
|
+
let i = 0;
|
|
23
|
+
let j = 0;
|
|
24
|
+
|
|
25
|
+
while (i < array1.length && j < array2.length) {
|
|
26
|
+
if (
|
|
27
|
+
compare ? compare(array1[i]!, array2[j]!) < 0 : array1[i]! < array2[j]!
|
|
28
|
+
) {
|
|
29
|
+
result.push(array1[i]!);
|
|
30
|
+
i++;
|
|
31
|
+
} else {
|
|
32
|
+
result.push(array2[j]!);
|
|
33
|
+
j++;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (i < array1.length) {
|
|
38
|
+
result.push(...array1.slice(i));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (j < array2.length) {
|
|
42
|
+
result.push(...array2.slice(j));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return result;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Merges many sorted arrays into a single sorted array.
|
|
50
|
+
*
|
|
51
|
+
* @param arrays - The arrays to merge.
|
|
52
|
+
* @param compare - The comparison function to use.
|
|
53
|
+
*
|
|
54
|
+
* @returns The merged array.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* const result = zipperMany([
|
|
59
|
+
* [1, 3, 5],
|
|
60
|
+
* [2, 4, 6],
|
|
61
|
+
* [7, 8, 9],
|
|
62
|
+
* ]);
|
|
63
|
+
* // result = [1, 2, 3, 4, 5, 6, 7, 8, 9]
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export const zipperMany = <T>(
|
|
67
|
+
arrays: T[][],
|
|
68
|
+
compare?: (a: T, b: T) => number,
|
|
69
|
+
): T[] => {
|
|
70
|
+
if (arrays.length === 0) return [];
|
|
71
|
+
if (arrays.length === 1) return arrays[0]!;
|
|
72
|
+
|
|
73
|
+
let result: T[] = arrays[0]!;
|
|
74
|
+
|
|
75
|
+
for (let i = 1; i < arrays.length; i++) {
|
|
76
|
+
result = zipper(result, arrays[i]!, compare);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return result;
|
|
80
|
+
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../common/src/promiseWithResolvers.ts","../../common/src/queue.ts","../../common/src/dedupe.ts","../src/indexing-store/metadata.ts","../src/utils/never.ts","../src/utils/serialize.ts"],"sourcesContent":["export type PromiseWithResolvers<TPromise> = {\n resolve: (arg: TPromise) => void;\n reject: (error: Error) => void;\n promise: Promise<TPromise>;\n};\n\n/**\n * @description Application level polyfill.\n */\nexport const promiseWithResolvers = <\n TPromise,\n>(): PromiseWithResolvers<TPromise> => {\n let resolve: (arg: TPromise) => void;\n let reject: (error: Error) => void;\n const promise = new Promise<TPromise>((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n return { resolve: resolve!, reject: reject!, promise };\n};\n","import {\n type PromiseWithResolvers,\n promiseWithResolvers,\n} from \"./promiseWithResolvers.js\";\n\nexport type InnerQueue<returnType, taskType> = {\n task: taskType;\n resolve: (arg: returnType) => void;\n reject: (error: Error) => void;\n}[];\n\nexport type Queue<returnType, taskType> = {\n size: () => number;\n pending: () => Promise<number>;\n add: (task: taskType) => Promise<returnType>;\n clear: () => void;\n isStarted: () => boolean;\n start: () => Promise<void>;\n pause: () => void;\n onIdle: () => Promise<void>;\n onEmpty: () => Promise<void>;\n setParameters: (\n parameters: Pick<\n CreateQueueParameters<unknown, unknown>,\n \"frequency\" | \"concurrency\"\n >,\n ) => void;\n};\n\nexport type CreateQueueParameters<returnType, taskType> = {\n worker: (task: taskType) => Promise<returnType>;\n initialStart?: boolean;\n browser?: boolean;\n} & (\n | {\n concurrency: number;\n frequency: number;\n }\n | { concurrency: number; frequency?: undefined }\n | { concurrency?: undefined; frequency: number }\n);\n\nconst validateParameters = ({\n concurrency,\n frequency,\n}: Pick<\n CreateQueueParameters<unknown, unknown>,\n \"frequency\" | \"concurrency\"\n>) => {\n if (concurrency === undefined && frequency === undefined) {\n throw new Error(\n \"Invalid queue configuration, must specify either 'concurrency' or 'frequency'.\",\n );\n }\n\n if (concurrency !== undefined && concurrency <= 0) {\n throw new Error(\n `Invalid value for queue 'concurrency' option. Got ${concurrency}, expected a number greater than zero.`,\n );\n }\n\n if (frequency !== undefined && frequency <= 0) {\n throw new Error(\n `Invalid value for queue 'frequency' option. Got ${frequency}, expected a number greater than zero.`,\n );\n }\n};\n\nexport const createQueue = <returnType, taskType = void>({\n worker,\n initialStart = false,\n browser = true,\n ..._parameters\n}: CreateQueueParameters<returnType, taskType>): Queue<\n returnType,\n taskType\n> => {\n validateParameters(_parameters);\n\n const parameters: Pick<\n CreateQueueParameters<unknown, unknown>,\n \"frequency\" | \"concurrency\"\n > = _parameters;\n let queue = new Array<InnerQueue<returnType, taskType>[number]>();\n let pending = 0;\n let timestamp = 0;\n let requests = 0;\n let isStarted = initialStart;\n\n let timer: NodeJS.Timeout | undefined;\n\n let emptyPromiseWithResolvers:\n | (PromiseWithResolvers<void> & { completed: boolean })\n | undefined = undefined;\n let idlePromiseWithResolvers:\n | (PromiseWithResolvers<void> & { completed: boolean })\n | undefined = undefined;\n\n const next = () => {\n if (!isStarted) return;\n\n const _timestamp = Date.now();\n\n if (Math.floor(_timestamp / 1_000) !== timestamp) {\n requests = 0;\n timestamp = Math.floor(_timestamp / 1_000);\n }\n\n if (timer) return;\n\n while (\n (parameters.frequency !== undefined\n ? requests < parameters.frequency\n : true) &&\n (parameters.concurrency !== undefined\n ? pending < parameters.concurrency\n : true) &&\n queue.length > 0\n ) {\n const { task, resolve, reject } = queue.shift()!;\n\n requests++;\n pending++;\n\n worker(task)\n .then(resolve)\n .catch(reject)\n .finally(() => {\n pending--;\n\n if (\n idlePromiseWithResolvers !== undefined &&\n queue.length === 0 &&\n pending === 0\n ) {\n idlePromiseWithResolvers.resolve();\n idlePromiseWithResolvers.completed = true;\n }\n\n browser ? next() : process.nextTick(next);\n });\n\n if (emptyPromiseWithResolvers !== undefined && queue.length === 0) {\n emptyPromiseWithResolvers.resolve();\n emptyPromiseWithResolvers.completed = true;\n }\n }\n\n if (\n parameters.frequency !== undefined &&\n requests >= parameters.frequency\n ) {\n timer = setTimeout(\n () => {\n timer = undefined;\n next();\n },\n 1_000 - (_timestamp % 1_000),\n );\n return;\n }\n };\n\n return {\n size: () => queue.length,\n pending: () => {\n if (browser) {\n return new Promise<number>((resolve) =>\n setTimeout(() => resolve(pending)),\n );\n } else {\n return new Promise<number>((resolve) =>\n setImmediate(() => resolve(pending)),\n );\n }\n },\n add: (task: taskType) => {\n const { promise, resolve, reject } = promiseWithResolvers<returnType>();\n queue.push({ task, resolve, reject });\n\n next();\n\n return promise.catch((error) => {\n Error.captureStackTrace(error);\n throw error;\n });\n },\n clear: () => {\n queue = new Array<InnerQueue<returnType, taskType>[number]>();\n clearTimeout(timer);\n timer = undefined;\n },\n isStarted: () => isStarted,\n start: () => {\n if (browser) {\n return new Promise<number>((resolve) =>\n setTimeout(() => resolve(pending)),\n ).then(() => {\n isStarted = true;\n next();\n });\n } else {\n return new Promise<number>((resolve) =>\n process.nextTick(() => resolve(pending)),\n ).then(() => {\n isStarted = true;\n next();\n });\n }\n },\n pause: () => {\n isStarted = false;\n },\n onIdle: () => {\n if (\n idlePromiseWithResolvers === undefined ||\n idlePromiseWithResolvers.completed\n ) {\n if (queue.length === 0 && pending === 0) return Promise.resolve();\n\n idlePromiseWithResolvers = {\n ...promiseWithResolvers<void>(),\n completed: false,\n };\n }\n return idlePromiseWithResolvers.promise;\n },\n onEmpty: () => {\n if (\n emptyPromiseWithResolvers === undefined ||\n emptyPromiseWithResolvers.completed\n ) {\n if (queue.length === 0) return Promise.resolve();\n\n emptyPromiseWithResolvers = {\n ...promiseWithResolvers<void>(),\n completed: false,\n };\n }\n return emptyPromiseWithResolvers.promise;\n },\n setParameters: (_parameters) => {\n validateParameters(_parameters);\n\n if (\"frequency\" in _parameters) {\n parameters.frequency = _parameters.frequency;\n }\n if (\"concurrency\" in _parameters) {\n parameters.concurrency = _parameters.concurrency;\n }\n },\n } as Queue<returnType, taskType>;\n};\n","/**\n * Remove duplicate values from an array.\n *\n * @param getId callback used to calculate a unique value for an element of the array.\n *\n * @example\n * dedupe([1,1,2,3]) // [1,2,3]\n *\n * dedupe(\n * [\n * { a: 1, b: 2 },\n * { a: 1, b: 2 },\n * { a: 2, b: 2 },\n * ],\n * (e) => `${e.a}_${e.b}`,\n * ) // [{a: 1, b: 2}, {a: 2, b: 2}]\n *\n */\nexport function dedupe<item, id>(\n arr: item[] | readonly item[],\n getId?: (x: item) => id,\n): item[] {\n const seen = new Set<id | item>();\n\n return arr.filter((x) => {\n if (seen.has(getId ? getId(x) : x)) return false;\n\n seen.add(x);\n return true;\n });\n}\n\ndedupe(\n [\n { a: 1, b: 2 },\n { a: 1, b: 2 },\n { a: 2, b: 2 },\n ],\n (e) => `${e.a}_${e.b}`,\n);\n","import type { Database } from \"@/database/index.js\";\nimport type { Status } from \"@/internal/types.js\";\nimport { sql } from \"kysely\";\n\nexport type MetadataStore = {\n setStatus: (status: Status) => Promise<void>;\n getStatus: () => Promise<Status | null>;\n};\n\nexport const getMetadataStore = ({\n database,\n}: {\n database: Database;\n}): MetadataStore => ({\n getStatus: async () => {\n return database.wrap({ method: \"_ponder_status.get()\" }, async () => {\n const result = await database.qb.user\n .selectFrom(\"_ponder_status\")\n .selectAll()\n .execute();\n\n if (result.length === 0) {\n return null;\n }\n\n const status: Status = {};\n\n for (const row of result) {\n status[row.network_name] = {\n block:\n row.block_number && row.block_timestamp\n ? {\n number: Number(row.block_number),\n timestamp: Number(row.block_timestamp),\n }\n : null,\n ready: row.ready,\n };\n }\n\n return status;\n });\n },\n setStatus: (status: Status) => {\n return database.wrap({ method: \"_ponder_status.set()\" }, async () => {\n await database.qb.user\n .insertInto(\"_ponder_status\")\n .values(\n Object.entries(status).map(([networkName, value]) => ({\n network_name: networkName,\n block_number: value.block?.number,\n block_timestamp: value.block?.timestamp,\n ready: value.ready,\n })),\n )\n .onConflict((oc) =>\n oc.column(\"network_name\").doUpdateSet({\n block_number: sql`excluded.block_number`,\n block_timestamp: sql`excluded.block_timestamp`,\n ready: sql`excluded.ready`,\n }),\n )\n .execute();\n });\n },\n});\n","export const never = (_x: never) => {\n throw \"unreachable\";\n};\n","/**\n * Serialize function that handles BigInt.\n *\n * Forked from https://github.com/wevm/wagmi\n *\n * @param value to stringify\n * @returns the stringified output\n */\nexport function serialize(value: any) {\n return JSON.stringify(value, (_, v) =>\n typeof v === \"bigint\" ? { __type: \"bigint\", value: v.toString() } : v,\n );\n}\n\n/**\n * Deserialize function that handles BigInt.\n *\n * Forked from https://github.com/wevm/wagmi\n *\n * @param value to parse\n * @returns the output object\n */\nexport function deserialize<type>(value: string): type {\n return JSON.parse(value, (_, value_) =>\n value_?.__type === \"bigint\" ? BigInt(value_.value) : value_,\n );\n}\n"],"mappings":"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","names":["_parameters"]}
|