embedded-chain 0.0.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/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +70 -0
- package/dist/index.js.map +1 -0
- package/dist/indexeddb-storage.d.ts +24 -0
- package/dist/indexeddb-storage.d.ts.map +1 -0
- package/dist/indexeddb-storage.js +137 -0
- package/dist/indexeddb-storage.js.map +1 -0
- package/dist/provider.d.ts +27 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +179 -0
- package/dist/provider.js.map +1 -0
- package/dist/tmp.d.ts +2 -0
- package/dist/tmp.d.ts.map +1 -0
- package/dist/tmp.js +125 -0
- package/dist/tmp.js.map +1 -0
- package/package.json +41 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { EIP1193ProviderWithoutEvents, ProviderOptions } from './provider.js';
|
|
2
|
+
type MiningConfig = {
|
|
3
|
+
type: 'auto';
|
|
4
|
+
} | {
|
|
5
|
+
type: 'manual';
|
|
6
|
+
} | {
|
|
7
|
+
type: 'interval';
|
|
8
|
+
interval: number;
|
|
9
|
+
};
|
|
10
|
+
export type EmbeddedChainProviderOptions = Omit<ProviderOptions, 'impersonate'> & {
|
|
11
|
+
impersonate?: {
|
|
12
|
+
mode: 'always' | 'unknown';
|
|
13
|
+
} | {
|
|
14
|
+
mode: 'list';
|
|
15
|
+
list: `0x${string}`[];
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export type EmbeddedChainOptions = {
|
|
19
|
+
persistence?: {
|
|
20
|
+
type: 'indexeddb';
|
|
21
|
+
db?: string;
|
|
22
|
+
store?: string;
|
|
23
|
+
key?: string;
|
|
24
|
+
};
|
|
25
|
+
miningConfig?: MiningConfig;
|
|
26
|
+
initialBalances?: Record<`0x${string}`, bigint>;
|
|
27
|
+
providerOptions?: EmbeddedChainProviderOptions;
|
|
28
|
+
};
|
|
29
|
+
export type EmbeddedChain = {
|
|
30
|
+
provider: EIP1193ProviderWithoutEvents;
|
|
31
|
+
};
|
|
32
|
+
export declare function createEmbeddedChain(options: EmbeddedChainOptions): Promise<EmbeddedChain>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAA6B,4BAA4B,EAAE,eAAe,EAAC,MAAM,eAAe,CAAC;AAExG,KAAK,YAAY,GAAG;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,GAAG;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAC,GAAG;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAAC;AAE7F,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,GAAG;IACjF,WAAW,CAAC,EACT;QACA,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;KAC1B,GACD;QACA,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,KAAK,MAAM,EAAE,EAAE,CAAC;KACrB,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,WAAW,CAAC,EAAE;QACb,IAAI,EAAE,WAAW,CAAC;QAClB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;IACF,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;IAChD,eAAe,CAAC,EAAE,4BAA4B,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC3B,QAAQ,EAAE,4BAA4B,CAAC;CACvC,CAAC;AAEF,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAwE/F"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { createMemoryClient } from '@tevm/memory-client';
|
|
2
|
+
import { createSyncStoragePersister } from '@tevm/sync-storage-persister';
|
|
3
|
+
import { IndexedDBStorage } from './indexeddb-storage.js';
|
|
4
|
+
import { extendProviderWithAccounts } from './provider.js';
|
|
5
|
+
export async function createEmbeddedChain(options) {
|
|
6
|
+
const { persistence, miningConfig, initialBalances, providerOptions } = options;
|
|
7
|
+
let persister;
|
|
8
|
+
if (persistence) {
|
|
9
|
+
// Create persistence
|
|
10
|
+
const db = persistence?.db ?? 'tevm-storage';
|
|
11
|
+
const store = persistence?.store ?? 'keyvalue';
|
|
12
|
+
const key = persistence?.key ?? 'tevm-state';
|
|
13
|
+
const indexedDBStorage = new IndexedDBStorage(db, store);
|
|
14
|
+
await indexedDBStorage.initialize();
|
|
15
|
+
persister = createSyncStoragePersister({
|
|
16
|
+
storage: indexedDBStorage,
|
|
17
|
+
key,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
const client = createMemoryClient({
|
|
21
|
+
persister,
|
|
22
|
+
miningConfig,
|
|
23
|
+
});
|
|
24
|
+
// Initialize client
|
|
25
|
+
await client.tevmReady();
|
|
26
|
+
// Set up initial balances if provided
|
|
27
|
+
if (initialBalances) {
|
|
28
|
+
for (const [address, balance] of Object.entries(initialBalances)) {
|
|
29
|
+
let accountBalance;
|
|
30
|
+
try {
|
|
31
|
+
accountBalance = await client.getBalance({
|
|
32
|
+
address: address,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
accountBalance = 0n;
|
|
37
|
+
}
|
|
38
|
+
if (accountBalance === 0n) {
|
|
39
|
+
await client.tevmSetAccount({
|
|
40
|
+
address: address,
|
|
41
|
+
balance,
|
|
42
|
+
});
|
|
43
|
+
console.log(`Account ${address} initialized with balance:`, balance.toString(), 'wei');
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.log(`Account ${address} already exists with balance:`, accountBalance.toString(), 'wei');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
let actualProviderOptions;
|
|
51
|
+
if (providerOptions) {
|
|
52
|
+
if ('impersonate' in providerOptions && providerOptions.impersonate) {
|
|
53
|
+
actualProviderOptions = {
|
|
54
|
+
...providerOptions,
|
|
55
|
+
impersonate: {
|
|
56
|
+
...providerOptions.impersonate,
|
|
57
|
+
impersonator: client,
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
actualProviderOptions = providerOptions;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const provider = await extendProviderWithAccounts(client, actualProviderOptions);
|
|
66
|
+
return {
|
|
67
|
+
provider,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAC,0BAA0B,EAAuB,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAC,gBAAgB,EAAC,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAC,0BAA0B,EAAgD,MAAM,eAAe,CAAC;AA+BxG,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAA6B;IACtE,MAAM,EAAC,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAC,GAAG,OAAO,CAAC;IAE9E,IAAI,SAA2C,CAAC;IAChD,IAAI,WAAW,EAAE,CAAC;QACjB,qBAAqB;QACrB,MAAM,EAAE,GAAG,WAAW,EAAE,EAAE,IAAI,cAAc,CAAC;QAC7C,MAAM,KAAK,GAAG,WAAW,EAAE,KAAK,IAAI,UAAU,CAAC;QAC/C,MAAM,GAAG,GAAG,WAAW,EAAE,GAAG,IAAI,YAAY,CAAC;QAE7C,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACzD,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;QAEpC,SAAS,GAAG,0BAA0B,CAAC;YACtC,OAAO,EAAE,gBAAgB;YACzB,GAAG;SACH,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC;QACjC,SAAS;QACT,YAAY;KACZ,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;IAEzB,sCAAsC;IACtC,IAAI,eAAe,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YAClE,IAAI,cAAc,CAAC;YACnB,IAAI,CAAC;gBACJ,cAAc,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;oBACxC,OAAO,EAAE,OAAwB;iBACjC,CAAC,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACR,cAAc,GAAG,EAAE,CAAC;YACrB,CAAC;YAED,IAAI,cAAc,KAAK,EAAE,EAAE,CAAC;gBAC3B,MAAM,MAAM,CAAC,cAAc,CAAC;oBAC3B,OAAO,EAAE,OAAwB;oBACjC,OAAO;iBACP,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,4BAA4B,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;YACxF,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,+BAA+B,EAAE,cAAc,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;YAClG,CAAC;QACF,CAAC;IACF,CAAC;IAED,IAAI,qBAAkD,CAAC;IAEvD,IAAI,eAAe,EAAE,CAAC;QACrB,IAAI,aAAa,IAAI,eAAe,IAAI,eAAe,CAAC,WAAW,EAAE,CAAC;YACrE,qBAAqB,GAAG;gBACvB,GAAG,eAAe;gBAClB,WAAW,EAAE;oBACZ,GAAG,eAAe,CAAC,WAAW;oBAC9B,YAAY,EAAE,MAAM;iBACpB;aACD,CAAC;QACH,CAAC;aAAM,CAAC;YACP,qBAAqB,GAAG,eAAkC,CAAC;QAC5D,CAAC;IACF,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC,MAAsC,EAAE,qBAAqB,CAAC,CAAC;IAEjH,OAAO;QACN,QAAQ;KACR,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Storage } from "@tevm/sync-storage-persister";
|
|
2
|
+
/**
|
|
3
|
+
* IndexedDB storage adapter for tevm persistence
|
|
4
|
+
* Provides a synchronous Storage interface using IndexedDB with in-memory caching
|
|
5
|
+
*/
|
|
6
|
+
export declare class IndexedDBStorage implements Storage {
|
|
7
|
+
private dbName;
|
|
8
|
+
private storeName;
|
|
9
|
+
private cache;
|
|
10
|
+
private db;
|
|
11
|
+
private initialized;
|
|
12
|
+
private pendingPersists;
|
|
13
|
+
private nextValues;
|
|
14
|
+
constructor(dbName?: string, storeName?: string);
|
|
15
|
+
initialize(): Promise<void>;
|
|
16
|
+
private initDB;
|
|
17
|
+
private loadFromDB;
|
|
18
|
+
private persistToDB;
|
|
19
|
+
private schedulePersist;
|
|
20
|
+
getItem(key: string): string | null;
|
|
21
|
+
setItem(key: string, value: string): void;
|
|
22
|
+
removeItem(key: string): void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=indexeddb-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexeddb-storage.d.ts","sourceRoot":"","sources":["../src/indexeddb-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAE5D;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,OAAO;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,EAAE,CAA4B;IACtC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,UAAU,CAAyC;gBAE/C,MAAM,SAAiB,EAAE,SAAS,SAAa;IAMrD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAInB,MAAM;YA8BN,UAAU;YA8BV,WAAW;IAyBzB,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAInC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAI9B"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IndexedDB storage adapter for tevm persistence
|
|
3
|
+
* Provides a synchronous Storage interface using IndexedDB with in-memory caching
|
|
4
|
+
*/
|
|
5
|
+
export class IndexedDBStorage {
|
|
6
|
+
dbName;
|
|
7
|
+
storeName;
|
|
8
|
+
cache = new Map();
|
|
9
|
+
db = null;
|
|
10
|
+
initialized = false;
|
|
11
|
+
pendingPersists = new Map();
|
|
12
|
+
nextValues = new Map();
|
|
13
|
+
constructor(dbName = "tevm-storage", storeName = "keyvalue") {
|
|
14
|
+
this.dbName = dbName;
|
|
15
|
+
this.storeName = storeName;
|
|
16
|
+
// Don't auto-init, let caller control when to initialize
|
|
17
|
+
}
|
|
18
|
+
async initialize() {
|
|
19
|
+
await this.initDB();
|
|
20
|
+
}
|
|
21
|
+
async initDB() {
|
|
22
|
+
if (this.initialized)
|
|
23
|
+
return;
|
|
24
|
+
try {
|
|
25
|
+
this.db = await new Promise((resolve, reject) => {
|
|
26
|
+
const request = indexedDB.open(this.dbName, 1);
|
|
27
|
+
request.onerror = () => reject(request.error);
|
|
28
|
+
request.onsuccess = () => resolve(request.result);
|
|
29
|
+
request.onupgradeneeded = (event) => {
|
|
30
|
+
const db = event.target.result;
|
|
31
|
+
if (!db.objectStoreNames.contains(this.storeName)) {
|
|
32
|
+
db.createObjectStore(this.storeName);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
// Load existing data into cache
|
|
37
|
+
await this.loadFromDB();
|
|
38
|
+
this.initialized = true;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.warn("IndexedDB initialization failed, using in-memory storage only:", error);
|
|
42
|
+
this.initialized = true; // Still mark as initialized to avoid retries
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async loadFromDB() {
|
|
46
|
+
if (!this.db)
|
|
47
|
+
return;
|
|
48
|
+
try {
|
|
49
|
+
const transaction = this.db.transaction([this.storeName], "readonly");
|
|
50
|
+
const store = transaction.objectStore(this.storeName);
|
|
51
|
+
const request = store.getAll();
|
|
52
|
+
const result = await new Promise((resolve, reject) => {
|
|
53
|
+
request.onsuccess = () => resolve(request.result);
|
|
54
|
+
request.onerror = () => reject(request.error);
|
|
55
|
+
});
|
|
56
|
+
// IndexedDB getAll returns array of values, we need keys too
|
|
57
|
+
// Let's get all keys separately
|
|
58
|
+
const keysRequest = store.getAllKeys();
|
|
59
|
+
const keys = await new Promise((resolve, reject) => {
|
|
60
|
+
keysRequest.onsuccess = () => resolve(keysRequest.result);
|
|
61
|
+
keysRequest.onerror = () => reject(keysRequest.error);
|
|
62
|
+
});
|
|
63
|
+
// Populate cache
|
|
64
|
+
keys.forEach((key, index) => {
|
|
65
|
+
this.cache.set(key, result[index]);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
console.warn("Failed to load from IndexedDB:", error);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async persistToDB(key, value) {
|
|
73
|
+
if (!this.db)
|
|
74
|
+
return;
|
|
75
|
+
try {
|
|
76
|
+
const transaction = this.db.transaction([this.storeName], "readwrite");
|
|
77
|
+
const store = transaction.objectStore(this.storeName);
|
|
78
|
+
if (value === null) {
|
|
79
|
+
await new Promise((resolve, reject) => {
|
|
80
|
+
const request = store.delete(key);
|
|
81
|
+
request.onsuccess = () => resolve();
|
|
82
|
+
request.onerror = () => reject(request.error);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
await new Promise((resolve, reject) => {
|
|
87
|
+
const request = store.put(value, key);
|
|
88
|
+
request.onsuccess = () => resolve();
|
|
89
|
+
request.onerror = () => reject(request.error);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.warn("Failed to persist to IndexedDB:", error);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
schedulePersist(key, value) {
|
|
98
|
+
if (this.pendingPersists.has(key)) {
|
|
99
|
+
// Persist in progress, set next value
|
|
100
|
+
this.nextValues.set(key, value);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// Start persist
|
|
104
|
+
const promise = this.persistToDB(key, value)
|
|
105
|
+
.then(() => {
|
|
106
|
+
// After persist, check if next value
|
|
107
|
+
const next = this.nextValues.get(key);
|
|
108
|
+
if (next !== undefined) {
|
|
109
|
+
this.nextValues.delete(key);
|
|
110
|
+
this.schedulePersist(key, next); // Recurse
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
this.pendingPersists.delete(key);
|
|
114
|
+
}
|
|
115
|
+
})
|
|
116
|
+
.catch((error) => {
|
|
117
|
+
console.warn("Failed to persist to IndexedDB:", error);
|
|
118
|
+
// Clean up on error
|
|
119
|
+
this.pendingPersists.delete(key);
|
|
120
|
+
// Optionally, could retry, but for now just log
|
|
121
|
+
});
|
|
122
|
+
this.pendingPersists.set(key, promise);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
getItem(key) {
|
|
126
|
+
return this.cache.get(key) || null;
|
|
127
|
+
}
|
|
128
|
+
setItem(key, value) {
|
|
129
|
+
this.cache.set(key, value);
|
|
130
|
+
this.schedulePersist(key, value);
|
|
131
|
+
}
|
|
132
|
+
removeItem(key) {
|
|
133
|
+
this.cache.delete(key);
|
|
134
|
+
this.schedulePersist(key, null);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=indexeddb-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexeddb-storage.js","sourceRoot":"","sources":["../src/indexeddb-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { EIP1193ProviderWithoutEvents } from "eip-1193";
|
|
2
|
+
export type { EIP1193ProviderWithoutEvents };
|
|
3
|
+
export interface ProviderOptions {
|
|
4
|
+
accounts?: {
|
|
5
|
+
privateKeys?: `0x${string}`[];
|
|
6
|
+
} | {
|
|
7
|
+
mnemonic?: string;
|
|
8
|
+
numAccounts?: number;
|
|
9
|
+
};
|
|
10
|
+
impersonate?: {
|
|
11
|
+
impersonator: {
|
|
12
|
+
impersonateAccount: (params: {
|
|
13
|
+
address: `0x${string}`;
|
|
14
|
+
}) => Promise<void>;
|
|
15
|
+
};
|
|
16
|
+
} & ({
|
|
17
|
+
mode: "always" | "unknown";
|
|
18
|
+
} | {
|
|
19
|
+
mode: "list";
|
|
20
|
+
list: `0x${string}`[];
|
|
21
|
+
});
|
|
22
|
+
fixes?: {
|
|
23
|
+
tevmPendingCount?: boolean;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export declare function extendProviderWithAccounts(provider: EIP1193ProviderWithoutEvents, options?: ProviderOptions): Promise<EIP1193ProviderWithoutEvents>;
|
|
27
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAE7D,YAAY,EAAE,4BAA4B,EAAE,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EACL;QACE,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,EAAE,CAAC;KAC/B,GACD;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,WAAW,CAAC,EAAE;QACZ,YAAY,EAAE;YACZ,kBAAkB,EAAE,CAAC,MAAM,EAAE;gBAAE,OAAO,EAAE,KAAK,MAAM,EAAE,CAAA;aAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;SAC3E,CAAC;KACH,GAAG,CACA;QACE,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;KAC5B,GACD;QACE,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,KAAK,MAAM,EAAE,EAAE,CAAC;KACvB,CACJ,CAAC;IACF,KAAK,CAAC,EAAE;QACN,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,CAAC;CACH;AAED,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,4BAA4B,EACtC,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,4BAA4B,CAAC,CAuKvC"}
|
package/dist/provider.js
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { privateKeyToAccount, mnemonicToAccount, } from "viem/accounts";
|
|
2
|
+
export async function extendProviderWithAccounts(provider, options) {
|
|
3
|
+
function parseTxParams(tx) {
|
|
4
|
+
const params = {};
|
|
5
|
+
if (tx.to)
|
|
6
|
+
params.to = tx.to;
|
|
7
|
+
if (tx.data)
|
|
8
|
+
params.data = tx.data;
|
|
9
|
+
if (tx.gas)
|
|
10
|
+
params.gas = BigInt(tx.gas);
|
|
11
|
+
if (tx.nonce)
|
|
12
|
+
params.nonce = parseInt(tx.nonce, 16);
|
|
13
|
+
if (tx.chainId)
|
|
14
|
+
params.chainId = parseInt(tx.chainId, 16);
|
|
15
|
+
if (tx.accessList)
|
|
16
|
+
params.accessList = tx.accessList;
|
|
17
|
+
if (tx.type === "0x1") {
|
|
18
|
+
params.type = "eip2930";
|
|
19
|
+
if (tx.gasPrice)
|
|
20
|
+
params.gasPrice = BigInt(tx.gasPrice);
|
|
21
|
+
}
|
|
22
|
+
else if (tx.type === "0x2") {
|
|
23
|
+
params.type = "eip1559";
|
|
24
|
+
if (tx.maxFeePerGas)
|
|
25
|
+
params.maxFeePerGas = BigInt(tx.maxFeePerGas);
|
|
26
|
+
if (tx.maxPriorityFeePerGas)
|
|
27
|
+
params.maxPriorityFeePerGas = BigInt(tx.maxPriorityFeePerGas);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
params.type = "legacy";
|
|
31
|
+
if (tx.gasPrice)
|
|
32
|
+
params.gasPrice = BigInt(tx.gasPrice);
|
|
33
|
+
}
|
|
34
|
+
return params;
|
|
35
|
+
}
|
|
36
|
+
const accounts = [];
|
|
37
|
+
if (options?.accounts) {
|
|
38
|
+
const accountsProvided = options.accounts;
|
|
39
|
+
if ("privateKeys" in accountsProvided && accountsProvided.privateKeys) {
|
|
40
|
+
for (const pk of accountsProvided.privateKeys) {
|
|
41
|
+
const account = privateKeyToAccount(pk);
|
|
42
|
+
accounts.push(account);
|
|
43
|
+
// await client.tevmSetAccount({ address: account.address, balance: 0n });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else if ("mnemonic" in accountsProvided && accountsProvided.mnemonic) {
|
|
47
|
+
const num = accountsProvided.numAccounts || 10;
|
|
48
|
+
for (let i = 0; i < num; i++) {
|
|
49
|
+
const account = mnemonicToAccount(accountsProvided.mnemonic, {
|
|
50
|
+
accountIndex: i,
|
|
51
|
+
});
|
|
52
|
+
accounts.push(account);
|
|
53
|
+
// await client.tevmSetAccount({ address: account.address, balance: 0n });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const shouldImpersonate = (address) => {
|
|
58
|
+
if (options?.impersonate?.mode === "always") {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
else if (options?.impersonate?.mode == "unknown") {
|
|
62
|
+
return !accounts.some((a) => a.address === address);
|
|
63
|
+
}
|
|
64
|
+
else if (options?.impersonate?.mode === "list") {
|
|
65
|
+
return (options.impersonate.list.includes(address) || false);
|
|
66
|
+
}
|
|
67
|
+
return false;
|
|
68
|
+
};
|
|
69
|
+
const accountHandlers = {
|
|
70
|
+
eth_sendTransaction: async (params) => {
|
|
71
|
+
const tx = params[0];
|
|
72
|
+
const account = accounts.find((a) => a.address === tx.from);
|
|
73
|
+
const impersonate = options?.impersonate;
|
|
74
|
+
if (impersonate?.mode !== "always" && account) {
|
|
75
|
+
const signedTx = await account.signTransaction(parseTxParams(tx));
|
|
76
|
+
return await provider.request({
|
|
77
|
+
method: "eth_sendRawTransaction",
|
|
78
|
+
params: [signedTx],
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
else if (impersonate) {
|
|
82
|
+
if (shouldImpersonate(tx.from)) {
|
|
83
|
+
await impersonate.impersonator.impersonateAccount({
|
|
84
|
+
address: tx.from,
|
|
85
|
+
});
|
|
86
|
+
return await provider.request({
|
|
87
|
+
method: "eth_sendTransaction",
|
|
88
|
+
params: [tx],
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
throw new Error("Account not available, not even as impersonation");
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
throw new Error("Account not available");
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
eth_accounts: async () => {
|
|
100
|
+
return accounts.map((a) => a.address);
|
|
101
|
+
},
|
|
102
|
+
eth_requestAccounts: async () => {
|
|
103
|
+
return accounts.map((a) => a.address);
|
|
104
|
+
},
|
|
105
|
+
personal_sign: async (params) => {
|
|
106
|
+
const [message, address] = params;
|
|
107
|
+
const account = accounts.find((a) => a.address === address);
|
|
108
|
+
if (!account) {
|
|
109
|
+
throw new Error("Account not available for signing");
|
|
110
|
+
}
|
|
111
|
+
const prefixedMessage = `\x19Ethereum Signed Message:\n${message.length}${message}`;
|
|
112
|
+
return account.signMessage({ message: prefixedMessage });
|
|
113
|
+
},
|
|
114
|
+
eth_sign: async (params) => {
|
|
115
|
+
const [address, message] = params;
|
|
116
|
+
const account = accounts.find((a) => a.address === address);
|
|
117
|
+
if (!account) {
|
|
118
|
+
throw new Error("Account not available for signing");
|
|
119
|
+
}
|
|
120
|
+
return account.signMessage({ message });
|
|
121
|
+
},
|
|
122
|
+
eth_signTransaction: async (params) => {
|
|
123
|
+
const tx = params[0];
|
|
124
|
+
const account = accounts.find((a) => a.address === tx.from);
|
|
125
|
+
if (!account) {
|
|
126
|
+
throw new Error("Account not available for signing");
|
|
127
|
+
}
|
|
128
|
+
const signTxParams = parseTxParams(tx);
|
|
129
|
+
if (tx.value)
|
|
130
|
+
signTxParams.value = BigInt(tx.value);
|
|
131
|
+
return account.signTransaction(signTxParams);
|
|
132
|
+
},
|
|
133
|
+
eth_signTypedData: async (params) => {
|
|
134
|
+
const [address, typedData] = params;
|
|
135
|
+
const account = accounts.find((a) => a.address === address);
|
|
136
|
+
if (!account) {
|
|
137
|
+
throw new Error("Account not available for signing");
|
|
138
|
+
}
|
|
139
|
+
return account.signTypedData(typedData);
|
|
140
|
+
},
|
|
141
|
+
eth_signTypedData_v4: async (params) => {
|
|
142
|
+
const [address, typedData] = params;
|
|
143
|
+
const account = accounts.find((a) => a.address === address);
|
|
144
|
+
if (!account) {
|
|
145
|
+
throw new Error("Account not available for signing");
|
|
146
|
+
}
|
|
147
|
+
return account.signTypedData(typedData);
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
const tevmPendingCountFix = options?.fixes?.tevmPendingCount
|
|
151
|
+
? {
|
|
152
|
+
eth_getTransactionCount: async (params) => {
|
|
153
|
+
const modifiedParam1 = params[1] === "pending" ? "latest" : params[1];
|
|
154
|
+
return provider.request({
|
|
155
|
+
method: "eth_getTransactionCount",
|
|
156
|
+
params: [params[0], modifiedParam1],
|
|
157
|
+
});
|
|
158
|
+
},
|
|
159
|
+
}
|
|
160
|
+
: undefined;
|
|
161
|
+
const handlers = {
|
|
162
|
+
...tevmPendingCountFix,
|
|
163
|
+
...accountHandlers,
|
|
164
|
+
};
|
|
165
|
+
return {
|
|
166
|
+
request: async (args) => {
|
|
167
|
+
const { method, params = [] } = args;
|
|
168
|
+
const handler = handlers[method];
|
|
169
|
+
if (!handler) {
|
|
170
|
+
return provider.request({
|
|
171
|
+
method: args.method,
|
|
172
|
+
params: args.params,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
return handler(params);
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/tmp.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmp.d.ts","sourceRoot":"","sources":["../src/tmp.ts"],"names":[],"mappings":""}
|
package/dist/tmp.js
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
// const baseHandlers: Record<string, (params: any[]) => Promise<any>> = {
|
|
3
|
+
// eth_chainId: async () => {
|
|
4
|
+
// const chainId = await client.getChainId();
|
|
5
|
+
// return `0x${chainId.toString(16)}`;
|
|
6
|
+
// },
|
|
7
|
+
// eth_getBalance: async (params) => {
|
|
8
|
+
// const balance = await client.getBalance({ address: params[0] });
|
|
9
|
+
// return `0x${balance.toString(16)}`;
|
|
10
|
+
// },
|
|
11
|
+
// eth_sendRawTransaction: async (params) => {
|
|
12
|
+
// return await client.request({
|
|
13
|
+
// method: "eth_sendRawTransaction",
|
|
14
|
+
// params: [params[0]],
|
|
15
|
+
// });
|
|
16
|
+
// },
|
|
17
|
+
// eth_getTransactionByHash: async (params) => {
|
|
18
|
+
// return await client.getTransaction({ hash: params[0] });
|
|
19
|
+
// },
|
|
20
|
+
// eth_blockNumber: async () => {
|
|
21
|
+
// const blockNum = await client.getBlockNumber();
|
|
22
|
+
// return `0x${blockNum.toString(16)}`;
|
|
23
|
+
// },
|
|
24
|
+
// eth_getBlockByNumber: async (params) => {
|
|
25
|
+
// let blockNumber;
|
|
26
|
+
// if (params[0] === "latest") {
|
|
27
|
+
// blockNumber = await client.getBlockNumber();
|
|
28
|
+
// } else if (params[0] === "earliest") {
|
|
29
|
+
// blockNumber = 0n;
|
|
30
|
+
// } else if (params[0] === "pending") {
|
|
31
|
+
// blockNumber = await client.getBlockNumber();
|
|
32
|
+
// } else {
|
|
33
|
+
// blockNumber = BigInt(params[0]);
|
|
34
|
+
// }
|
|
35
|
+
// return await client.getBlock({ blockNumber });
|
|
36
|
+
// },
|
|
37
|
+
// eth_getTransactionCount: async (params) => {
|
|
38
|
+
// const txCount = await client.getTransactionCount({
|
|
39
|
+
// address: params[0],
|
|
40
|
+
// });
|
|
41
|
+
// return `0x${txCount.toString(16)}`;
|
|
42
|
+
// },
|
|
43
|
+
// eth_feeHistory: async (params) => {
|
|
44
|
+
// return {
|
|
45
|
+
// oldestBlock: params[1] || "0x0",
|
|
46
|
+
// baseFeePerGas: ["0x3b9aca00"],
|
|
47
|
+
// gasUsedRatio: [0.1],
|
|
48
|
+
// reward: params[2] ? params[2].map(() => "0x3b9aca00") : [],
|
|
49
|
+
// };
|
|
50
|
+
// },
|
|
51
|
+
// eth_gasPrice: async () => {
|
|
52
|
+
// return "0x3b9aca00";
|
|
53
|
+
// },
|
|
54
|
+
// eth_estimateGas: async (params) => {
|
|
55
|
+
// const txEst = params[0];
|
|
56
|
+
// const estimateParams = parseTxParams(txEst);
|
|
57
|
+
// if (txEst.from) estimateParams.account = txEst.from;
|
|
58
|
+
// if (txEst.value) estimateParams.value = BigInt(txEst.value);
|
|
59
|
+
// const gasEstimate = await client.estimateGas(estimateParams);
|
|
60
|
+
// return `0x${gasEstimate.toString(16)}`;
|
|
61
|
+
// },
|
|
62
|
+
// eth_call: async (params) => {
|
|
63
|
+
// const callParams = parseTxParams(params[0]);
|
|
64
|
+
// if (params[0].from) callParams.account = params[0].from;
|
|
65
|
+
// if (params[0].value) callParams.value = BigInt(params[0].value);
|
|
66
|
+
// return await client.call(callParams);
|
|
67
|
+
// },
|
|
68
|
+
// eth_getBlockByHash: async (params) => {
|
|
69
|
+
// return await client.getBlock({ blockHash: params[0] });
|
|
70
|
+
// },
|
|
71
|
+
// eth_getBlockTransactionCountByHash: async (params) => {
|
|
72
|
+
// const block = await client.getBlock({ blockHash: params[0] });
|
|
73
|
+
// return `0x${block.transactions.length.toString(16)}`;
|
|
74
|
+
// },
|
|
75
|
+
// eth_getBlockTransactionCountByNumber: async (params) => {
|
|
76
|
+
// let blockNumber;
|
|
77
|
+
// if (params[0] === "latest") {
|
|
78
|
+
// blockNumber = await client.getBlockNumber();
|
|
79
|
+
// } else if (params[0] === "earliest") {
|
|
80
|
+
// blockNumber = 0n;
|
|
81
|
+
// } else if (params[0] === "pending") {
|
|
82
|
+
// blockNumber = await client.getBlockNumber();
|
|
83
|
+
// } else {
|
|
84
|
+
// blockNumber = BigInt(params[0]);
|
|
85
|
+
// }
|
|
86
|
+
// const block = await client.getBlock({ blockNumber });
|
|
87
|
+
// return `0x${block.transactions.length.toString(16)}`;
|
|
88
|
+
// },
|
|
89
|
+
// eth_getCode: async (params) => {
|
|
90
|
+
// return await client.getCode({ address: params[0] });
|
|
91
|
+
// },
|
|
92
|
+
// eth_getLogs: async (params) => {
|
|
93
|
+
// return await client.getLogs(params[0]);
|
|
94
|
+
// },
|
|
95
|
+
// eth_getStorageAt: async (params) => {
|
|
96
|
+
// return await client.getStorageAt({ address: params[0], slot: params[1] });
|
|
97
|
+
// },
|
|
98
|
+
// eth_getTransactionByBlockHashAndIndex: async (params) => {
|
|
99
|
+
// const block = await client.getBlock({ blockHash: params[0] });
|
|
100
|
+
// const txHash = block.transactions[parseInt(params[1], 16)];
|
|
101
|
+
// return await client.getTransaction({ hash: txHash });
|
|
102
|
+
// },
|
|
103
|
+
// eth_getTransactionByBlockNumberAndIndex: async (params) => {
|
|
104
|
+
// let blockNumber;
|
|
105
|
+
// if (params[0] === "latest") {
|
|
106
|
+
// blockNumber = await client.getBlockNumber();
|
|
107
|
+
// } else if (params[0] === "earliest") {
|
|
108
|
+
// blockNumber = 0n;
|
|
109
|
+
// } else if (params[0] === "pending") {
|
|
110
|
+
// blockNumber = await client.getBlockNumber();
|
|
111
|
+
// } else {
|
|
112
|
+
// blockNumber = BigInt(params[0]);
|
|
113
|
+
// }
|
|
114
|
+
// const block = await client.getBlock({ blockNumber });
|
|
115
|
+
// const txHash = block.transactions[parseInt(params[1], 16)];
|
|
116
|
+
// return await client.getTransaction({ hash: txHash });
|
|
117
|
+
// },
|
|
118
|
+
// eth_getTransactionReceipt: async (params) => {
|
|
119
|
+
// return await client.getTransactionReceipt({ hash: params[0] });
|
|
120
|
+
// },
|
|
121
|
+
// eth_protocolVersion: async () => {
|
|
122
|
+
// return "67";
|
|
123
|
+
// },
|
|
124
|
+
// };
|
|
125
|
+
//# sourceMappingURL=tmp.js.map
|
package/dist/tmp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmp.js","sourceRoot":"","sources":["../src/tmp.ts"],"names":[],"mappings":";AAAA,0EAA0E;AAC1E,+BAA+B;AAC/B,iDAAiD;AACjD,0CAA0C;AAC1C,OAAO;AACP,wCAAwC;AACxC,uEAAuE;AACvE,0CAA0C;AAC1C,OAAO;AACP,gDAAgD;AAChD,oCAAoC;AACpC,0CAA0C;AAC1C,6BAA6B;AAC7B,UAAU;AACV,OAAO;AACP,kDAAkD;AAClD,+DAA+D;AAC/D,OAAO;AACP,mCAAmC;AACnC,sDAAsD;AACtD,2CAA2C;AAC3C,OAAO;AACP,8CAA8C;AAC9C,uBAAuB;AACvB,oCAAoC;AACpC,qDAAqD;AACrD,6CAA6C;AAC7C,0BAA0B;AAC1B,4CAA4C;AAC5C,qDAAqD;AACrD,eAAe;AACf,yCAAyC;AACzC,QAAQ;AACR,qDAAqD;AACrD,OAAO;AACP,iDAAiD;AACjD,yDAAyD;AACzD,4BAA4B;AAC5B,UAAU;AACV,0CAA0C;AAC1C,OAAO;AACP,wCAAwC;AACxC,eAAe;AACf,yCAAyC;AACzC,uCAAuC;AACvC,6BAA6B;AAC7B,oEAAoE;AACpE,SAAS;AACT,OAAO;AACP,gCAAgC;AAChC,2BAA2B;AAC3B,OAAO;AACP,yCAAyC;AACzC,+BAA+B;AAC/B,mDAAmD;AACnD,2DAA2D;AAC3D,mEAAmE;AACnE,oEAAoE;AACpE,8CAA8C;AAC9C,OAAO;AACP,kCAAkC;AAClC,mDAAmD;AACnD,+DAA+D;AAC/D,uEAAuE;AACvE,4CAA4C;AAC5C,OAAO;AACP,4CAA4C;AAC5C,8DAA8D;AAC9D,OAAO;AACP,4DAA4D;AAC5D,qEAAqE;AACrE,4DAA4D;AAC5D,OAAO;AACP,8DAA8D;AAC9D,uBAAuB;AACvB,oCAAoC;AACpC,qDAAqD;AACrD,6CAA6C;AAC7C,0BAA0B;AAC1B,4CAA4C;AAC5C,qDAAqD;AACrD,eAAe;AACf,yCAAyC;AACzC,QAAQ;AACR,4DAA4D;AAC5D,4DAA4D;AAC5D,OAAO;AACP,qCAAqC;AACrC,2DAA2D;AAC3D,OAAO;AACP,qCAAqC;AACrC,8CAA8C;AAC9C,OAAO;AACP,0CAA0C;AAC1C,iFAAiF;AACjF,OAAO;AACP,+DAA+D;AAC/D,qEAAqE;AACrE,kEAAkE;AAClE,4DAA4D;AAC5D,OAAO;AACP,iEAAiE;AACjE,uBAAuB;AACvB,oCAAoC;AACpC,qDAAqD;AACrD,6CAA6C;AAC7C,0BAA0B;AAC1B,4CAA4C;AAC5C,qDAAqD;AACrD,eAAe;AACf,yCAAyC;AACzC,QAAQ;AACR,4DAA4D;AAC5D,kEAAkE;AAClE,4DAA4D;AAC5D,OAAO;AACP,mDAAmD;AACnD,sEAAsE;AACtE,OAAO;AACP,uCAAuC;AACvC,mBAAmB;AACnB,OAAO;AACP,KAAK"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "embedded-chain",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "embedded chain",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"type": "module",
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"module": "dist/index.js",
|
|
11
|
+
"types": "dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"import": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"default": "./dist/index.js"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist"
|
|
22
|
+
],
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@tevm/memory-client": "1.0.0-next.148",
|
|
25
|
+
"@tevm/sync-storage-persister": "1.0.0-next.148",
|
|
26
|
+
"named-logs": "^0.4.1",
|
|
27
|
+
"viem": "^2.41.2"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@vitest/browser-playwright": "^4.0.16",
|
|
31
|
+
"as-soon": "^0.0.11",
|
|
32
|
+
"eip-1193": "^0.6.5",
|
|
33
|
+
"tsx": "^4.21.0",
|
|
34
|
+
"typescript": "^5.9.3",
|
|
35
|
+
"vitest": "^4.0.16"
|
|
36
|
+
},
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsc --project tsconfig.json",
|
|
39
|
+
"dev": "as-soon -w src pnpm build"
|
|
40
|
+
}
|
|
41
|
+
}
|