@hugomrdias/foxer 0.0.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/README.md +56 -0
- package/dist/src/api/index.d.ts +2 -0
- package/dist/src/api/index.d.ts.map +1 -0
- package/dist/src/api/index.js +2 -0
- package/dist/src/api/index.js.map +1 -0
- package/dist/src/api/runner.d.ts +12 -0
- package/dist/src/api/runner.d.ts.map +1 -0
- package/dist/src/api/runner.js +29 -0
- package/dist/src/api/runner.js.map +1 -0
- package/dist/src/api/server.d.ts +18 -0
- package/dist/src/api/server.d.ts.map +1 -0
- package/dist/src/api/server.js +21 -0
- package/dist/src/api/server.js.map +1 -0
- package/dist/src/api/sql-middleware.d.ts +7 -0
- package/dist/src/api/sql-middleware.d.ts.map +1 -0
- package/dist/src/api/sql-middleware.js +95 -0
- package/dist/src/api/sql-middleware.js.map +1 -0
- package/dist/src/api/sql.d.ts +14 -0
- package/dist/src/api/sql.d.ts.map +1 -0
- package/dist/src/api/sql.js +108 -0
- package/dist/src/api/sql.js.map +1 -0
- package/dist/src/api/sse.d.ts +3 -0
- package/dist/src/api/sse.d.ts.map +1 -0
- package/dist/src/api/sse.js +11 -0
- package/dist/src/api/sse.js.map +1 -0
- package/dist/src/bin/dev.d.ts +3 -0
- package/dist/src/bin/dev.d.ts.map +1 -0
- package/dist/src/bin/dev.js +76 -0
- package/dist/src/bin/dev.js.map +1 -0
- package/dist/src/bin/flags.d.ts +32 -0
- package/dist/src/bin/flags.d.ts.map +1 -0
- package/dist/src/bin/flags.js +55 -0
- package/dist/src/bin/flags.js.map +1 -0
- package/dist/src/bin/index.d.ts +3 -0
- package/dist/src/bin/index.d.ts.map +1 -0
- package/dist/src/bin/index.js +22 -0
- package/dist/src/bin/index.js.map +1 -0
- package/dist/src/bin/utils.d.ts +4 -0
- package/dist/src/bin/utils.d.ts.map +1 -0
- package/dist/src/bin/utils.js +52 -0
- package/dist/src/bin/utils.js.map +1 -0
- package/dist/src/client/index.d.ts +18 -0
- package/dist/src/client/index.d.ts.map +1 -0
- package/dist/src/client/index.js +150 -0
- package/dist/src/client/index.js.map +1 -0
- package/dist/src/config/config.d.ts +157 -0
- package/dist/src/config/config.d.ts.map +1 -0
- package/dist/src/config/config.js +65 -0
- package/dist/src/config/config.js.map +1 -0
- package/dist/src/config/env.d.ts +25 -0
- package/dist/src/config/env.d.ts.map +1 -0
- package/dist/src/config/env.js +21 -0
- package/dist/src/config/env.js.map +1 -0
- package/dist/src/contants.d.ts +4 -0
- package/dist/src/contants.d.ts.map +1 -0
- package/dist/src/contants.js +4 -0
- package/dist/src/contants.js.map +1 -0
- package/dist/src/db/actions/blocks.d.ts +44 -0
- package/dist/src/db/actions/blocks.d.ts.map +1 -0
- package/dist/src/db/actions/blocks.js +152 -0
- package/dist/src/db/actions/blocks.js.map +1 -0
- package/dist/src/db/actions/index.d.ts +2 -0
- package/dist/src/db/actions/index.d.ts.map +1 -0
- package/dist/src/db/actions/index.js +2 -0
- package/dist/src/db/actions/index.js.map +1 -0
- package/dist/src/db/actions/transactions.d.ts +11 -0
- package/dist/src/db/actions/transactions.d.ts.map +1 -0
- package/dist/src/db/actions/transactions.js +22 -0
- package/dist/src/db/actions/transactions.js.map +1 -0
- package/dist/src/db/client.d.ts +329 -0
- package/dist/src/db/client.d.ts.map +1 -0
- package/dist/src/db/client.js +108 -0
- package/dist/src/db/client.js.map +1 -0
- package/dist/src/db/column-types.d.ts +132 -0
- package/dist/src/db/column-types.d.ts.map +1 -0
- package/dist/src/db/column-types.js +86 -0
- package/dist/src/db/column-types.js.map +1 -0
- package/dist/src/db/encode.d.ts +10 -0
- package/dist/src/db/encode.d.ts.map +1 -0
- package/dist/src/db/encode.js +79 -0
- package/dist/src/db/encode.js.map +1 -0
- package/dist/src/db/migrate.d.ts +31 -0
- package/dist/src/db/migrate.d.ts.map +1 -0
- package/dist/src/db/migrate.js +147 -0
- package/dist/src/db/migrate.js.map +1 -0
- package/dist/src/db/schema/blocks.d.ts +369 -0
- package/dist/src/db/schema/blocks.d.ts.map +1 -0
- package/dist/src/db/schema/blocks.js +24 -0
- package/dist/src/db/schema/blocks.js.map +1 -0
- package/dist/src/db/schema/index.d.ts +1415 -0
- package/dist/src/db/schema/index.d.ts.map +1 -0
- package/dist/src/db/schema/index.js +18 -0
- package/dist/src/db/schema/index.js.map +1 -0
- package/dist/src/db/schema/transactions.d.ts +336 -0
- package/dist/src/db/schema/transactions.d.ts.map +1 -0
- package/dist/src/db/schema/transactions.js +33 -0
- package/dist/src/db/schema/transactions.js.map +1 -0
- package/dist/src/db/transaction.d.ts +7 -0
- package/dist/src/db/transaction.d.ts.map +1 -0
- package/dist/src/db/transaction.js +8 -0
- package/dist/src/db/transaction.js.map +1 -0
- package/dist/src/hooks/default-hooks.d.ts +2 -0
- package/dist/src/hooks/default-hooks.d.ts.map +1 -0
- package/dist/src/hooks/default-hooks.js +107 -0
- package/dist/src/hooks/default-hooks.js.map +1 -0
- package/dist/src/hooks/registry.d.ts +51 -0
- package/dist/src/hooks/registry.d.ts.map +1 -0
- package/dist/src/hooks/registry.js +32 -0
- package/dist/src/hooks/registry.js.map +1 -0
- package/dist/src/index.d.ts +10 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/indexer/backfill.d.ts +15 -0
- package/dist/src/indexer/backfill.d.ts.map +1 -0
- package/dist/src/indexer/backfill.js +95 -0
- package/dist/src/indexer/backfill.js.map +1 -0
- package/dist/src/indexer/live.d.ts +20 -0
- package/dist/src/indexer/live.d.ts.map +1 -0
- package/dist/src/indexer/live.js +51 -0
- package/dist/src/indexer/live.js.map +1 -0
- package/dist/src/indexer/process-block.d.ts +29 -0
- package/dist/src/indexer/process-block.d.ts.map +1 -0
- package/dist/src/indexer/process-block.js +91 -0
- package/dist/src/indexer/process-block.js.map +1 -0
- package/dist/src/indexer/queue-block.d.ts +18 -0
- package/dist/src/indexer/queue-block.d.ts.map +1 -0
- package/dist/src/indexer/queue-block.js +38 -0
- package/dist/src/indexer/queue-block.js.map +1 -0
- package/dist/src/indexer/reorg.d.ts +24 -0
- package/dist/src/indexer/reorg.d.ts.map +1 -0
- package/dist/src/indexer/reorg.js +83 -0
- package/dist/src/indexer/reorg.js.map +1 -0
- package/dist/src/indexer/runner.d.ts +14 -0
- package/dist/src/indexer/runner.d.ts.map +1 -0
- package/dist/src/indexer/runner.js +22 -0
- package/dist/src/indexer/runner.js.map +1 -0
- package/dist/src/rpc/client.d.ts +11 -0
- package/dist/src/rpc/client.d.ts.map +1 -0
- package/dist/src/rpc/client.js +18 -0
- package/dist/src/rpc/client.js.map +1 -0
- package/dist/src/rpc/get-block.d.ts +16 -0
- package/dist/src/rpc/get-block.d.ts.map +1 -0
- package/dist/src/rpc/get-block.js +77 -0
- package/dist/src/rpc/get-block.js.map +1 -0
- package/dist/src/rpc/get-logs.d.ts +11 -0
- package/dist/src/rpc/get-logs.d.ts.map +1 -0
- package/dist/src/rpc/get-logs.js +23 -0
- package/dist/src/rpc/get-logs.js.map +1 -0
- package/dist/src/schema.d.ts +3 -0
- package/dist/src/schema.d.ts.map +1 -0
- package/dist/src/schema.js +9 -0
- package/dist/src/schema.js.map +1 -0
- package/dist/src/types.d.ts +22 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +1 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/bloom.d.ts +6 -0
- package/dist/src/utils/bloom.d.ts.map +1 -0
- package/dist/src/utils/bloom.js +30 -0
- package/dist/src/utils/bloom.js.map +1 -0
- package/dist/src/utils/build-conflict-columns.d.ts +4 -0
- package/dist/src/utils/build-conflict-columns.d.ts.map +1 -0
- package/dist/src/utils/build-conflict-columns.js +14 -0
- package/dist/src/utils/build-conflict-columns.js.map +1 -0
- package/dist/src/utils/common.d.ts +2 -0
- package/dist/src/utils/common.d.ts.map +1 -0
- package/dist/src/utils/common.js +4 -0
- package/dist/src/utils/common.js.map +1 -0
- package/dist/src/utils/cursor.d.ts +5 -0
- package/dist/src/utils/cursor.d.ts.map +1 -0
- package/dist/src/utils/cursor.js +8 -0
- package/dist/src/utils/cursor.js.map +1 -0
- package/dist/src/utils/format.d.ts +2 -0
- package/dist/src/utils/format.d.ts.map +1 -0
- package/dist/src/utils/format.js +16 -0
- package/dist/src/utils/format.js.map +1 -0
- package/dist/src/utils/hash.d.ts +9 -0
- package/dist/src/utils/hash.d.ts.map +1 -0
- package/dist/src/utils/hash.js +15 -0
- package/dist/src/utils/hash.js.map +1 -0
- package/dist/src/utils/json.d.ts +5 -0
- package/dist/src/utils/json.d.ts.map +1 -0
- package/dist/src/utils/json.js +11 -0
- package/dist/src/utils/json.js.map +1 -0
- package/dist/src/utils/logger.d.ts +11 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +111 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/shutdown.d.ts +9 -0
- package/dist/src/utils/shutdown.d.ts.map +1 -0
- package/dist/src/utils/shutdown.js +24 -0
- package/dist/src/utils/shutdown.js.map +1 -0
- package/dist/src/utils/timer.d.ts +6 -0
- package/dist/src/utils/timer.d.ts.map +1 -0
- package/dist/src/utils/timer.js +9 -0
- package/dist/src/utils/timer.js.map +1 -0
- package/dist/src/utils/types.d.ts +39 -0
- package/dist/src/utils/types.d.ts.map +1 -0
- package/dist/src/utils/types.js +1 -0
- package/dist/src/utils/types.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/hello/apps/foc-api/README.md +69 -0
- package/hello/apps/foc-api/biome.json +8 -0
- package/hello/apps/foc-api/index.html +13 -0
- package/hello/apps/foc-api/package.json +39 -0
- package/hello/apps/foc-api/public/vite.svg +1 -0
- package/hello/apps/foc-api/src/app.css +45 -0
- package/hello/apps/foc-api/src/app.tsx +43 -0
- package/hello/apps/foc-api/src/assets/Cloudflare_Logo.svg +51 -0
- package/hello/apps/foc-api/src/assets/react.svg +1 -0
- package/hello/apps/foc-api/src/client.ts +41 -0
- package/hello/apps/foc-api/src/components/account.tsx +100 -0
- package/hello/apps/foc-api/src/components/wallet-options.tsx +43 -0
- package/hello/apps/foc-api/src/index.css +68 -0
- package/hello/apps/foc-api/src/main.tsx +38 -0
- package/hello/apps/foc-api/src/vite-env.d.ts +1 -0
- package/hello/apps/foc-api/tsconfig.app.json +44 -0
- package/hello/apps/foc-api/tsconfig.json +17 -0
- package/hello/apps/foc-api/tsconfig.node.json +25 -0
- package/hello/apps/foc-api/tsconfig.worker.json +8 -0
- package/hello/apps/foc-api/vite.config.ts +8 -0
- package/hello/apps/foc-api/worker/capabilities.ts +25 -0
- package/hello/apps/foc-api/worker/index.ts +64 -0
- package/hello/apps/foc-api/worker/router.ts +35 -0
- package/hello/apps/foc-api/worker-configuration.d.ts +7357 -0
- package/hello/apps/foc-api/wrangler.jsonc +50 -0
- package/hello/apps/foc-app/README.md +69 -0
- package/hello/apps/foc-app/biome.json +8 -0
- package/hello/apps/foc-app/index.html +13 -0
- package/hello/apps/foc-app/package.json +39 -0
- package/hello/apps/foc-app/public/vite.svg +1 -0
- package/hello/apps/foc-app/src/app.css +45 -0
- package/hello/apps/foc-app/src/app.tsx +43 -0
- package/hello/apps/foc-app/src/assets/Cloudflare_Logo.svg +51 -0
- package/hello/apps/foc-app/src/assets/react.svg +1 -0
- package/hello/apps/foc-app/src/client.ts +41 -0
- package/hello/apps/foc-app/src/components/account.tsx +100 -0
- package/hello/apps/foc-app/src/components/wallet-options.tsx +43 -0
- package/hello/apps/foc-app/src/index.css +68 -0
- package/hello/apps/foc-app/src/main.tsx +38 -0
- package/hello/apps/foc-app/src/vite-env.d.ts +1 -0
- package/hello/apps/foc-app/tsconfig.app.json +44 -0
- package/hello/apps/foc-app/tsconfig.json +17 -0
- package/hello/apps/foc-app/tsconfig.node.json +25 -0
- package/hello/apps/foc-app/tsconfig.worker.json +8 -0
- package/hello/apps/foc-app/vite.config.ts +8 -0
- package/hello/apps/foc-app/worker/capabilities.ts +25 -0
- package/hello/apps/foc-app/worker/index.ts +64 -0
- package/hello/apps/foc-app/worker/router.ts +35 -0
- package/hello/apps/foc-app/worker-configuration.d.ts +7357 -0
- package/hello/apps/foc-app/wrangler.jsonc +50 -0
- package/hello/biome.json +50 -0
- package/hello/package.json +22 -0
- package/hello/pnpm-workspace.yaml +3 -0
- package/hello/tsconfig.json +37 -0
- package/package.json +78 -0
- package/src/api/index.ts +1 -0
- package/src/api/runner.ts +43 -0
- package/src/api/server.ts +38 -0
- package/src/api/sql-middleware.ts +131 -0
- package/src/api/sql.ts +149 -0
- package/src/api/sse.ts +12 -0
- package/src/bin/create.ts +199 -0
- package/src/bin/dev.ts +91 -0
- package/src/bin/flags.ts +65 -0
- package/src/bin/index.ts +28 -0
- package/src/bin/utils.ts +55 -0
- package/src/config/config.ts +221 -0
- package/src/config/env.ts +28 -0
- package/src/contants.ts +3 -0
- package/src/db/actions/blocks.ts +209 -0
- package/src/db/actions/index.ts +1 -0
- package/src/db/actions/transactions.ts +32 -0
- package/src/db/client.ts +186 -0
- package/src/db/column-types.ts +105 -0
- package/src/db/encode.ts +99 -0
- package/src/db/migrate.ts +222 -0
- package/src/db/schema/blocks.ts +24 -0
- package/src/db/schema/index.ts +21 -0
- package/src/db/schema/transactions.ts +39 -0
- package/src/db/transaction.ts +20 -0
- package/src/hooks/registry.ts +107 -0
- package/src/index.ts +9 -0
- package/src/indexer/backfill.ts +133 -0
- package/src/indexer/live.ts +76 -0
- package/src/indexer/process-block.ts +142 -0
- package/src/indexer/queue-block.ts +74 -0
- package/src/indexer/reorg.ts +120 -0
- package/src/indexer/runner.ts +35 -0
- package/src/rpc/client.ts +27 -0
- package/src/rpc/get-block.ts +100 -0
- package/src/rpc/get-logs.ts +38 -0
- package/src/schema.ts +10 -0
- package/src/types.ts +32 -0
- package/src/utils/bloom.ts +41 -0
- package/src/utils/build-conflict-columns.ts +26 -0
- package/src/utils/common.ts +3 -0
- package/src/utils/cursor.ts +7 -0
- package/src/utils/format.ts +18 -0
- package/src/utils/hash.ts +17 -0
- package/src/utils/json.ts +11 -0
- package/src/utils/logger.ts +149 -0
- package/src/utils/shutdown.ts +36 -0
- package/src/utils/timer.ts +8 -0
- package/src/utils/types.ts +87 -0
- package/template/biome.json +50 -0
- package/template/package.json +22 -0
- package/template/pnpm-workspace.yaml +3 -0
- package/template/tsconfig.json +37 -0
- package/tsconfig.json +8 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { PublicClient } from 'viem';
|
|
2
|
+
import type { Database } from '../db/client.ts';
|
|
3
|
+
import type { EncodedBlockWithTransactions } from '../types.ts';
|
|
4
|
+
/**
|
|
5
|
+
* Fetches a block while normalizing null-round behavior into an explicit result.
|
|
6
|
+
*/
|
|
7
|
+
export declare function safeGetBlock(options: {
|
|
8
|
+
client: PublicClient;
|
|
9
|
+
blockNumber: bigint;
|
|
10
|
+
db: Database;
|
|
11
|
+
}): Promise<EncodedBlockWithTransactions>;
|
|
12
|
+
/**
|
|
13
|
+
* Detects Filecoin null-round RPC errors so callers can skip non-existent rounds.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isNullRoundRpcError(error: unknown): boolean;
|
|
16
|
+
//# sourceMappingURL=get-block.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-block.d.ts","sourceRoot":"","sources":["../../../src/rpc/get-block.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,YAAY,EAAE,MAAM,MAAM,CAAA;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAK/C,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAA;AAE/D;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,MAAM,EAAE,YAAY,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,EAAE,EAAE,QAAQ,CAAA;CACb,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAmDxC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA4B3D"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { encodeBlockWithTransactions, encodeNullRoundBlock, } from "../db/encode.js";
|
|
2
|
+
/**
|
|
3
|
+
* Fetches a block while normalizing null-round behavior into an explicit result.
|
|
4
|
+
*/
|
|
5
|
+
export async function safeGetBlock(options) {
|
|
6
|
+
const { client, blockNumber, db } = options;
|
|
7
|
+
try {
|
|
8
|
+
const block = await client.getBlock({
|
|
9
|
+
blockNumber,
|
|
10
|
+
includeTransactions: true,
|
|
11
|
+
});
|
|
12
|
+
return encodeBlockWithTransactions(block);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
if (isNullRoundRpcError(error)) {
|
|
16
|
+
let previousBlock;
|
|
17
|
+
previousBlock = (await db.$prepared.getBlockById.execute({
|
|
18
|
+
blockNumber: blockNumber - 1n,
|
|
19
|
+
}))[0];
|
|
20
|
+
let previousBlockNumber = blockNumber - 1n;
|
|
21
|
+
// go to the chain and loop back until a full block is found
|
|
22
|
+
if (!previousBlock) {
|
|
23
|
+
while (!previousBlock) {
|
|
24
|
+
try {
|
|
25
|
+
const block = await client.getBlock({
|
|
26
|
+
blockNumber: previousBlockNumber,
|
|
27
|
+
});
|
|
28
|
+
previousBlock = {
|
|
29
|
+
number: block.number,
|
|
30
|
+
hash: block.hash,
|
|
31
|
+
parentHash: block.parentHash,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
// catched another null round, keep going
|
|
36
|
+
if (isNullRoundRpcError(error)) {
|
|
37
|
+
previousBlockNumber -= 1n;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return encodeNullRoundBlock({
|
|
45
|
+
number: blockNumber,
|
|
46
|
+
hash: previousBlock.hash,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Detects Filecoin null-round RPC errors so callers can skip non-existent rounds.
|
|
54
|
+
*/
|
|
55
|
+
export function isNullRoundRpcError(error) {
|
|
56
|
+
if (!(error instanceof Error))
|
|
57
|
+
return false;
|
|
58
|
+
const message = error.message.toLowerCase();
|
|
59
|
+
if (message.includes('null round')) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
const details = error.details;
|
|
63
|
+
if (typeof details === 'string' &&
|
|
64
|
+
details.toLowerCase().includes('null round')) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
const cause = error.cause;
|
|
68
|
+
if (cause && typeof cause === 'object') {
|
|
69
|
+
const causeMessage = cause.message;
|
|
70
|
+
if (typeof causeMessage === 'string' &&
|
|
71
|
+
causeMessage.toLowerCase().includes('null round')) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=get-block.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-block.js","sourceRoot":"","sources":["../../../src/rpc/get-block.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAGxB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAIlC;IACC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,OAAO,CAAA;IAC3C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YAClC,WAAW;YACX,mBAAmB,EAAE,IAAI;SAC1B,CAAC,CAAA;QAEF,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAA;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,aAES,CAAA;YAEb,aAAa,GAAG,CACd,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC;gBACtC,WAAW,EAAE,WAAW,GAAG,EAAE;aAC9B,CAAC,CACH,CAAC,CAAC,CAAC,CAAA;YAEJ,IAAI,mBAAmB,GAAG,WAAW,GAAG,EAAE,CAAA;YAC1C,4DAA4D;YAC5D,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,CAAC,aAAa,EAAE,CAAC;oBACtB,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;4BAClC,WAAW,EAAE,mBAAmB;yBACjC,CAAC,CAAA;wBACF,aAAa,GAAG;4BACd,MAAM,EAAE,KAAK,CAAC,MAAM;4BACpB,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,UAAU,EAAE,KAAK,CAAC,UAAU;yBAC7B,CAAA;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,yCAAyC;wBACzC,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC/B,mBAAmB,IAAI,EAAE,CAAA;4BACzB,SAAQ;wBACV,CAAC;wBACD,MAAM,KAAK,CAAA;oBACb,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,oBAAoB,CAAC;gBAC1B,MAAM,EAAE,WAAW;gBACnB,IAAI,EAAE,aAAa,CAAC,IAAI;aACzB,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAE3C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;IAC3C,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,OAAO,GAAI,KAA+B,CAAC,OAAO,CAAA;IACxD,IACE,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC5C,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,KAAK,GAAI,KAA6B,CAAC,KAAK,CAAA;IAClD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,YAAY,GAAI,KAA+B,CAAC,OAAO,CAAA;QAC7D,IACE,OAAO,YAAY,KAAK,QAAQ;YAChC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,EACjD,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AbiEvent, Address, Log, PublicClient } from 'viem';
|
|
2
|
+
import type { Logger } from '../utils/logger.ts';
|
|
3
|
+
export declare function getLogsInRange(args: {
|
|
4
|
+
logger: Logger;
|
|
5
|
+
client: PublicClient;
|
|
6
|
+
addresses: Address[];
|
|
7
|
+
events: readonly AbiEvent[];
|
|
8
|
+
fromBlock: bigint;
|
|
9
|
+
toBlock: bigint;
|
|
10
|
+
}): Promise<Map<bigint, Log<bigint, number, false, AbiEvent>[]>>;
|
|
11
|
+
//# sourceMappingURL=get-logs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-logs.d.ts","sourceRoot":"","sources":["../../../src/rpc/get-logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAGhD,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,OAAO,EAAE,CAAA;IACpB,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAA;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CA0B/D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { startClock } from "../utils/timer.js";
|
|
2
|
+
export async function getLogsInRange(args) {
|
|
3
|
+
const { logger, client, addresses, events, fromBlock, toBlock } = args;
|
|
4
|
+
const endClock = startClock();
|
|
5
|
+
const logsByBlock = new Map();
|
|
6
|
+
const logs = await client.getLogs({
|
|
7
|
+
address: addresses,
|
|
8
|
+
events: events,
|
|
9
|
+
fromBlock: fromBlock,
|
|
10
|
+
toBlock: toBlock,
|
|
11
|
+
});
|
|
12
|
+
for (const log of logs) {
|
|
13
|
+
const byBlock = logsByBlock.get(log.blockNumber) ?? [];
|
|
14
|
+
byBlock.push(log);
|
|
15
|
+
logsByBlock.set(log.blockNumber, byBlock);
|
|
16
|
+
}
|
|
17
|
+
logger.info({
|
|
18
|
+
logs: logsByBlock.size,
|
|
19
|
+
duration: endClock(),
|
|
20
|
+
}, 'get logs');
|
|
21
|
+
return logsByBlock;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=get-logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-logs.js","sourceRoot":"","sources":["../../../src/rpc/get-logs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAOpC;IACC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAEtE,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAA;IAE7B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkD,CAAA;IAC7E,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;QAChC,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAA;IAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;QACtD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjB,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAC3C,CAAC;IACD,MAAM,CAAC,IAAI,CACT;QACE,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,QAAQ,EAAE,QAAQ,EAAE;KACrB,EACD,UAAU,CACX,CAAA;IACD,OAAO,WAAW,CAAA;AACpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW,UAGvB,CAAA;AACD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { dirname, resolve } from 'node:path';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
4
|
+
export const schemaFiles = [
|
|
5
|
+
resolve(__dirname, './db/schema/blocks.js'),
|
|
6
|
+
resolve(__dirname, './db/schema/transactions.js'),
|
|
7
|
+
];
|
|
8
|
+
export { schema } from "./db/schema/index.js";
|
|
9
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAEzD,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,OAAO,CAAC,SAAS,EAAE,uBAAuB,CAAC;IAC3C,OAAO,CAAC,SAAS,EAAE,6BAA6B,CAAC;CAClD,CAAA;AACD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Simplify } from 'type-fest';
|
|
2
|
+
import type { Block, Transaction } from 'viem';
|
|
3
|
+
import type { Schema } from './db/schema/index';
|
|
4
|
+
/**
|
|
5
|
+
* Generic result with error
|
|
6
|
+
*/
|
|
7
|
+
export type MaybeResult<ResultType = unknown, ErrorType = Error> = {
|
|
8
|
+
error: ErrorType;
|
|
9
|
+
result?: undefined;
|
|
10
|
+
} | {
|
|
11
|
+
result: ResultType;
|
|
12
|
+
error?: undefined;
|
|
13
|
+
};
|
|
14
|
+
export type UnknownObject = NonNullable<unknown>;
|
|
15
|
+
export type ChainTransaction = Transaction<bigint, number, false>;
|
|
16
|
+
export type ChainBlock = Block<bigint, true, 'latest' | 'safe' | 'finalized', ChainTransaction>;
|
|
17
|
+
export type EncodedBlock = Schema['blocks']['$inferInsert'];
|
|
18
|
+
export type EncodedTransaction = Schema['transactions']['$inferInsert'];
|
|
19
|
+
export type EncodedBlockWithTransactions = Simplify<EncodedBlock & {
|
|
20
|
+
transactions: EncodedTransaction[];
|
|
21
|
+
}>;
|
|
22
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,MAAM,CAAA;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,UAAU,GAAG,OAAO,EAAE,SAAS,GAAG,KAAK,IAC3D;IACE,KAAK,EAAE,SAAS,CAAA;IAChB,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB,GACD;IACE,MAAM,EAAE,UAAU,CAAA;IAClB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAEL,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;AAEhD,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;AACjE,MAAM,MAAM,UAAU,GAAG,KAAK,CAC5B,MAAM,EACN,IAAI,EACJ,QAAQ,GAAG,MAAM,GAAG,WAAW,EAC/B,gBAAgB,CACjB,CAAA;AACD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,CAAA;AAC3D,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,CAAA;AACvE,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CACjD,YAAY,GAAG;IACb,YAAY,EAAE,kBAAkB,EAAE,CAAA;CACnC,CACF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** biome-ignore-all lint/style/noNonNullAssertion: no need to check for null */
|
|
2
|
+
import { type Hex } from 'viem';
|
|
3
|
+
export declare const zeroLogsBloom = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
|
|
4
|
+
export declare const isInBloom: (bloomHex: Hex, value: Hex) => boolean;
|
|
5
|
+
export declare function isBlockInteresting(bloomHex: Hex, addresses: Hex[], topics: Hex[]): boolean;
|
|
6
|
+
//# sourceMappingURL=bloom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bloom.d.ts","sourceRoot":"","sources":["../../../src/utils/bloom.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,OAAO,EAAE,KAAK,GAAG,EAAyB,MAAM,MAAM,CAAA;AAEtD,eAAO,MAAM,aAAa,ugBAC4e,CAAA;AAItgB,eAAO,MAAM,SAAS,GAAI,UAAU,GAAG,EAAE,OAAO,GAAG,KAAG,OAkBrD,CAAA;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,GAAG,EACb,SAAS,EAAE,GAAG,EAAE,EAChB,MAAM,EAAE,GAAG,EAAE,GACZ,OAAO,CAQT"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** biome-ignore-all lint/style/noNonNullAssertion: no need to check for null */
|
|
2
|
+
import { hexToBytes, keccak256 } from 'viem';
|
|
3
|
+
export const zeroLogsBloom = '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
|
|
4
|
+
// const BLOOM_SIZE_BYTES = 256;
|
|
5
|
+
export const isInBloom = (bloomHex, value) => {
|
|
6
|
+
const bloom = hexToBytes(bloomHex);
|
|
7
|
+
const hash = hexToBytes(keccak256(value));
|
|
8
|
+
// Ethereum uses 3 pairs of bytes from the hash to determine 3 bits
|
|
9
|
+
for (let i = 0; i < 6; i += 2) {
|
|
10
|
+
// Calculate the bit index (0 to 2047)
|
|
11
|
+
const bitIndex = ((hash[i] << 8) | hash[i + 1]) & 0x7ff;
|
|
12
|
+
// Check if that bit is set in the 256-byte bloom array
|
|
13
|
+
const byteIndex = 255 - Math.floor(bitIndex / 8);
|
|
14
|
+
const bitMask = 1 << (bitIndex % 8);
|
|
15
|
+
if ((bloom[byteIndex] & bitMask) === 0) {
|
|
16
|
+
return false; // Definitely NOT in this block
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return true; // PROBABLY in this block (could be a false positive)
|
|
20
|
+
};
|
|
21
|
+
export function isBlockInteresting(bloomHex, addresses, topics) {
|
|
22
|
+
// Check if ANY of our target contracts might be in this block
|
|
23
|
+
const hasContract = addresses.some((addr) => isInBloom(bloomHex, addr));
|
|
24
|
+
if (!hasContract)
|
|
25
|
+
return false;
|
|
26
|
+
// Check if ANY of our target event signatures might be in this block
|
|
27
|
+
const hasEvent = topics.some((topic) => isInBloom(bloomHex, topic));
|
|
28
|
+
return hasEvent;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=bloom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bloom.js","sourceRoot":"","sources":["../../../src/utils/bloom.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,OAAO,EAAY,UAAU,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAEtD,MAAM,CAAC,MAAM,aAAa,GACxB,ogBAAogB,CAAA;AAEtgB,gCAAgC;AAEhC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAa,EAAE,KAAU,EAAW,EAAE;IAC9D,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IAClC,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;IAEzC,mEAAmE;IACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,sCAAsC;QACtC,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,GAAG,KAAK,CAAA;QAEzD,uDAAuD;QACvD,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;QAChD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;QAEnC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,KAAK,CAAA,CAAC,+BAA+B;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA,CAAC,qDAAqD;AACnE,CAAC,CAAA;AAED,MAAM,UAAU,kBAAkB,CAChC,QAAa,EACb,SAAgB,EAChB,MAAa;IAEb,8DAA8D;IAC9D,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;IACvE,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAA;IAE9B,qEAAqE;IACrE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;IACnE,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type SQL } from 'drizzle-orm';
|
|
2
|
+
import type { PgTable } from 'drizzle-orm/pg-core';
|
|
3
|
+
export declare const buildConflictUpdateColumns: <T extends PgTable, Q extends keyof T["_"]["columns"]>(table: T, columns?: Q[]) => Record<Q, SQL<unknown>>;
|
|
4
|
+
//# sourceMappingURL=build-conflict-columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-conflict-columns.d.ts","sourceRoot":"","sources":["../../../src/utils/build-conflict-columns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAO,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAIlD,eAAO,MAAM,0BAA0B,GACrC,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,EAEjC,OAAO,CAAC,EACR,UAAU,CAAC,EAAE,4BAed,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { sql } from 'drizzle-orm';
|
|
2
|
+
import { getColumns } from 'drizzle-orm/utils';
|
|
3
|
+
import { snakeCase } from 'scule';
|
|
4
|
+
export const buildConflictUpdateColumns = (table, columns) => {
|
|
5
|
+
const cls = getColumns(table);
|
|
6
|
+
const cols = columns ?? Object.keys(cls);
|
|
7
|
+
const r = cols.reduce((acc, column) => {
|
|
8
|
+
const colName = snakeCase(cls[column].name);
|
|
9
|
+
acc[column] = sql.raw(`excluded.${colName}`);
|
|
10
|
+
return acc;
|
|
11
|
+
}, {});
|
|
12
|
+
return r;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=build-conflict-columns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-conflict-columns.js","sourceRoot":"","sources":["../../../src/utils/build-conflict-columns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,GAAG,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAIxC,KAAQ,EACR,OAAa,EACb,EAAE;IACF,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IAC7B,MAAM,IAAI,GAAG,OAAO,IAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAS,CAAA;IACjD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CACnB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QACd,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAA;QAE3C,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,OAAO,EAAE,CAAC,CAAA;QAC5C,OAAO,GAAG,CAAA;IACZ,CAAC,EACD,EAAoB,CACrB,CAAA;IAED,OAAO,CAAC,CAAA;AACV,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,QAAO,IAEvB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG,GAAS,EAAE;IAC7B,YAAY;AACd,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/utils/cursor.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAG1E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../src/utils/cursor.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,IAAY,EAAE,GAAW;IAChE,MAAM,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE,CAAA;IAC7B,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;AAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/utils/format.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,GAAI,IAAI,MAAM,WAiB3C,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const formatLogDuration = (ms) => {
|
|
2
|
+
// If less than 1 second, return ms.
|
|
3
|
+
if (ms < 1000)
|
|
4
|
+
return `${Math.round(ms)}ms`;
|
|
5
|
+
const seconds = Math.floor(ms / 1000);
|
|
6
|
+
const h = Math.floor(seconds / 3600);
|
|
7
|
+
const m = Math.floor((seconds - h * 3600) / 60);
|
|
8
|
+
const s = seconds - h * 3600 - m * 60;
|
|
9
|
+
const secWithMs = ((ms % 60000) / 1000).toFixed(3).replace(/\.?0+$/, ''); // seconds including ms fraction, max 59.999
|
|
10
|
+
const hstr = h > 0 ? `${h}h ` : '';
|
|
11
|
+
const mstr = m > 0 || h > 0 ? `${m < 10 && h > 0 ? '0' : ''}${m}m ` : '';
|
|
12
|
+
// Add milliseconds fraction to the seconds string, e.g., 2.322s
|
|
13
|
+
const sstr = s > 0 || m > 0 ? `${s < 10 && m > 0 ? '0' : ''}${secWithMs}s` : '';
|
|
14
|
+
return `${hstr}${mstr}${sstr}`;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/utils/format.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAU,EAAE,EAAE;IAC9C,oCAAoC;IACpC,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAA;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;IAErC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACpC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAC/C,MAAM,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,CAAA;IACrC,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA,CAAC,4CAA4C;IAErH,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IAClC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IACxE,gEAAgE;IAChE,MAAM,IAAI,GACR,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAEpE,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,CAAA;AAChC,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalizes hash strings so comparisons are case-insensitive.
|
|
3
|
+
*/
|
|
4
|
+
export declare function normalizeHash(hash: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* Compares two optional hash strings for equality.
|
|
7
|
+
*/
|
|
8
|
+
export declare function hashEquals(left: string | null | undefined, right: string | null | undefined): boolean;
|
|
9
|
+
//# sourceMappingURL=hash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../src/utils/hash.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC/B,OAAO,CAGT"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalizes hash strings so comparisons are case-insensitive.
|
|
3
|
+
*/
|
|
4
|
+
export function normalizeHash(hash) {
|
|
5
|
+
return hash.toLowerCase();
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Compares two optional hash strings for equality.
|
|
9
|
+
*/
|
|
10
|
+
export function hashEquals(left, right) {
|
|
11
|
+
if (left == null || right == null)
|
|
12
|
+
return left === right;
|
|
13
|
+
return normalizeHash(left) === normalizeHash(right);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../src/utils/hash.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAA;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,IAA+B,EAC/B,KAAgC;IAEhC,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,KAAK,KAAK,CAAA;IACxD,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,KAAK,CAAC,CAAA;AACrD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../src/utils/json.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,KAAK,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;AAE/C,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAOxE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function deserialize(value, reviver) {
|
|
2
|
+
return JSON.parse(value, (key, value_) => {
|
|
3
|
+
let value = value_;
|
|
4
|
+
if (value?.__type === 'bigint')
|
|
5
|
+
value = BigInt(value.value);
|
|
6
|
+
if (value?.__type === 'Map')
|
|
7
|
+
value = new Map(value.value);
|
|
8
|
+
return reviver?.(key, value) ?? value;
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/utils/json.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,WAAW,CAAO,KAAa,EAAE,OAAiB;IAChE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QACvC,IAAI,KAAK,GAAG,MAAM,CAAA;QAClB,IAAI,KAAK,EAAE,MAAM,KAAK,QAAQ;YAAE,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC3D,IAAI,KAAK,EAAE,MAAM,KAAK,KAAK;YAAE,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACzD,OAAO,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,CAAA;IACvC,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LevelWithSilent } from 'pino';
|
|
2
|
+
import pino from 'pino';
|
|
3
|
+
import type { Simplify } from 'type-fest';
|
|
4
|
+
export type LogMode = 'pretty' | 'json';
|
|
5
|
+
export type LogLevel = Simplify<LevelWithSilent>;
|
|
6
|
+
export type Logger = ReturnType<typeof createLogger>;
|
|
7
|
+
export declare function createLogger({ level, mode, }: {
|
|
8
|
+
level: LogLevel;
|
|
9
|
+
mode: LogMode;
|
|
10
|
+
}): pino.Logger<never, boolean>;
|
|
11
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,eAAe,EAAE,MAAM,MAAM,CAAA;AAC9D,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAIzC,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;AACvC,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAA;AAChD,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA;AAEpD,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,GACL,EAAE;IACD,KAAK,EAAE,QAAQ,CAAA;IACf,IAAI,EAAE,OAAO,CAAA;CACd,+BAwCA"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import pc from 'picocolors';
|
|
2
|
+
import pino from 'pino';
|
|
3
|
+
import { stringify } from 'viem';
|
|
4
|
+
import { formatLogDuration } from "./format.js";
|
|
5
|
+
export function createLogger({ level, mode, }) {
|
|
6
|
+
const stream = {
|
|
7
|
+
write(logString) {
|
|
8
|
+
const log = JSON.parse(logString);
|
|
9
|
+
const prettyLog = format(log);
|
|
10
|
+
// biome-ignore lint/suspicious/noConsole: logging to console
|
|
11
|
+
console.log(prettyLog);
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
const errorSerializer = pino.stdSerializers.wrapErrorSerializer((error) => {
|
|
15
|
+
error.meta = Array.isArray(error.meta) ? error.meta.join('\n') : error.meta;
|
|
16
|
+
// @ts-expect-error - type is not defined in the error serializer
|
|
17
|
+
error.type = undefined;
|
|
18
|
+
return error;
|
|
19
|
+
});
|
|
20
|
+
let logger;
|
|
21
|
+
if (mode === 'pretty') {
|
|
22
|
+
logger = pino({
|
|
23
|
+
level,
|
|
24
|
+
serializers: {
|
|
25
|
+
error: errorSerializer,
|
|
26
|
+
},
|
|
27
|
+
// Removes "pid" and "hostname" properties from the log.
|
|
28
|
+
base: undefined,
|
|
29
|
+
}, stream);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
logger = pino({
|
|
33
|
+
level,
|
|
34
|
+
serializers: {
|
|
35
|
+
error: errorSerializer,
|
|
36
|
+
},
|
|
37
|
+
// Removes "pid" and "hostname" properties from the log.
|
|
38
|
+
base: undefined,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return logger;
|
|
42
|
+
}
|
|
43
|
+
const INTERNAL_KEYS = ['level', 'time', 'msg', 'duration', 'error'];
|
|
44
|
+
const levels = {
|
|
45
|
+
50: { label: 'ERROR', colorLabel: pc.red('ERROR') },
|
|
46
|
+
40: { label: 'WARN ', colorLabel: pc.yellow('WARN ') },
|
|
47
|
+
30: { label: 'INFO ', colorLabel: pc.green('INFO ') },
|
|
48
|
+
20: { label: 'DEBUG', colorLabel: pc.blue('DEBUG') },
|
|
49
|
+
10: { label: 'TRACE', colorLabel: pc.gray('TRACE') },
|
|
50
|
+
};
|
|
51
|
+
const timeFormatter = new Intl.DateTimeFormat(undefined, {
|
|
52
|
+
hour: '2-digit',
|
|
53
|
+
minute: '2-digit',
|
|
54
|
+
second: '2-digit',
|
|
55
|
+
fractionalSecondDigits: 3,
|
|
56
|
+
hour12: false,
|
|
57
|
+
});
|
|
58
|
+
const format = (log) => {
|
|
59
|
+
const time = timeFormatter.format(new Date(log.time));
|
|
60
|
+
const levelObject = levels[log.level ?? 30];
|
|
61
|
+
let prettyLog;
|
|
62
|
+
if (pc.isColorSupported) {
|
|
63
|
+
const level = levelObject.colorLabel;
|
|
64
|
+
const messageText = pc.reset(log.msg);
|
|
65
|
+
let keyText = '';
|
|
66
|
+
for (const key of Object.keys(log)) {
|
|
67
|
+
if (INTERNAL_KEYS.includes(key))
|
|
68
|
+
continue;
|
|
69
|
+
const value = typeof log[key] === 'string' ? log[key] : stringify(log[key]);
|
|
70
|
+
keyText += ` ${key}=${value}`;
|
|
71
|
+
}
|
|
72
|
+
let durationText = '';
|
|
73
|
+
if (log.duration) {
|
|
74
|
+
durationText = ` ${pc.gray(`(${formatLogDuration(log.duration)})`)}`;
|
|
75
|
+
}
|
|
76
|
+
prettyLog = [
|
|
77
|
+
`${pc.dim(time)} ${level} ${messageText}${pc.dim(keyText)}${durationText}`,
|
|
78
|
+
];
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
const level = levelObject.label;
|
|
82
|
+
let keyText = '';
|
|
83
|
+
for (const key of Object.keys(log)) {
|
|
84
|
+
if (INTERNAL_KEYS.includes(key))
|
|
85
|
+
continue;
|
|
86
|
+
const value = typeof log[key] === 'string' ? log[key] : stringify(log[key]);
|
|
87
|
+
keyText += ` ${key}=${value}`;
|
|
88
|
+
}
|
|
89
|
+
let durationText = '';
|
|
90
|
+
if (log.duration) {
|
|
91
|
+
durationText = ` (${formatLogDuration(log.duration)})`;
|
|
92
|
+
}
|
|
93
|
+
prettyLog = [`${time} ${level} ${log.msg}${keyText}${durationText}`];
|
|
94
|
+
}
|
|
95
|
+
if (log.error) {
|
|
96
|
+
if (log.error.stack) {
|
|
97
|
+
prettyLog.push(log.error.stack);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
prettyLog.push(`${log.error.name}: ${log.error.message}`);
|
|
101
|
+
}
|
|
102
|
+
if (typeof log.error === 'object' && 'where' in log.error) {
|
|
103
|
+
prettyLog.push(`where: ${log.error.where}`);
|
|
104
|
+
}
|
|
105
|
+
if (typeof log.error === 'object' && 'meta' in log.error) {
|
|
106
|
+
prettyLog.push(log.error.meta);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return prettyLog.join('\n');
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Logger } from 'pino';
|
|
2
|
+
export declare function createExit({ logger, stop, }: {
|
|
3
|
+
logger: Logger;
|
|
4
|
+
stop: () => Promise<void>;
|
|
5
|
+
}): void;
|
|
6
|
+
export declare function registerUnhandled({ logger }: {
|
|
7
|
+
logger: Logger;
|
|
8
|
+
}): void;
|
|
9
|
+
//# sourceMappingURL=shutdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../../src/utils/shutdown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAElC,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,IAAI,GACL,EAAE;IACD,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B,QAYA;AAED,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,QAY/D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { asyncExitHook, gracefulExit } from 'exit-hook';
|
|
2
|
+
export function createExit({ logger, stop, }) {
|
|
3
|
+
asyncExitHook(async () => {
|
|
4
|
+
logger.warn('shutting down...');
|
|
5
|
+
await stop();
|
|
6
|
+
logger.info('shutdown complete');
|
|
7
|
+
process.exit(0);
|
|
8
|
+
}, {
|
|
9
|
+
wait: 300,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
export function registerUnhandled({ logger }) {
|
|
13
|
+
process.on('uncaughtException', (error, origin) => {
|
|
14
|
+
if (!origin || origin === 'uncaughtException') {
|
|
15
|
+
logger.error({ error }, 'uncaught exception');
|
|
16
|
+
gracefulExit(1);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
process.on('unhandledRejection', (error) => {
|
|
20
|
+
logger.error({ error }, 'unhandled rejection');
|
|
21
|
+
gracefulExit(1);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=shutdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../../src/utils/shutdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAGvD,MAAM,UAAU,UAAU,CAAC,EACzB,MAAM,EACN,IAAI,GAIL;IACC,aAAa,CACX,KAAK,IAAI,EAAE;QACT,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC/B,MAAM,IAAI,EAAE,CAAA;QACZ,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;QAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,EACD;QACE,IAAI,EAAE,GAAG;KACV,CACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAE,MAAM,EAAsB;IAC9D,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAChD,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;YAC9C,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,oBAAoB,CAAC,CAAA;YAC7C,YAAY,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;QACzC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,qBAAqB,CAAC,CAAA;QAC9C,YAAY,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer.d.ts","sourceRoot":"","sources":["../../../src/utils/timer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,UAAU,iBAGzB"}
|