@miden-sdk/miden-sdk 0.14.5 → 0.15.0-alpha.4
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/LICENSE +21 -0
- package/README.md +9 -9
- package/dist/{Cargo-M3382VZc.js → Cargo-CVlXCH_2.js} +7129 -6225
- package/dist/Cargo-CVlXCH_2.js.map +1 -0
- package/dist/api-types.d.ts +19 -65
- package/dist/assets/miden_client_web.wasm +0 -0
- package/dist/crates/miden_client_web.d.ts +122 -172
- package/dist/docs-entry.d.ts +5 -2
- package/dist/eager.js +7 -4
- package/dist/eager.js.map +1 -1
- package/dist/index.d.ts +107 -14
- package/dist/index.js +529 -415
- package/dist/index.js.map +1 -1
- package/dist/wasm.js +1 -1
- package/dist/workers/{Cargo-M3382VZc-Dfw4tXwh.js → Cargo-CVlXCH_2-CWA-5vlh.js} +7129 -6225
- package/dist/workers/Cargo-CVlXCH_2-CWA-5vlh.js.map +1 -0
- package/dist/workers/assets/miden_client_web.wasm +0 -0
- package/dist/workers/web-client-methods-worker.js +7153 -6243
- package/dist/workers/web-client-methods-worker.js.map +1 -1
- package/dist/workers/web-client-methods-worker.module.js +23 -19
- package/dist/workers/web-client-methods-worker.module.js.map +1 -1
- package/js/client.js +327 -0
- package/js/node/client-factory.js +117 -0
- package/js/node/loader.js +138 -0
- package/js/node/napi-compat.js +238 -0
- package/js/node-index.js +195 -0
- package/js/resources/accounts.js +224 -0
- package/js/resources/compiler.js +74 -0
- package/js/resources/keystore.js +54 -0
- package/js/resources/notes.js +124 -0
- package/js/resources/settings.js +30 -0
- package/js/resources/tags.js +31 -0
- package/js/resources/transactions.js +533 -0
- package/js/standalone.js +109 -0
- package/js/utils.js +232 -0
- package/lazy/package.json +4 -0
- package/package.json +62 -40
- package/dist/Cargo-M3382VZc.js.map +0 -1
- package/dist/workers/Cargo-M3382VZc-Dfw4tXwh.js.map +0 -1
package/js/utils.js
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utility functions for the MidenClient resource classes.
|
|
3
|
+
* Each function accepts a `wasm` parameter (the WASM module) for constructing typed objects.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Resolves an AccountRef (string | Account | AccountId) to an AccountId.
|
|
8
|
+
*
|
|
9
|
+
* - Strings starting with `0x`/`0X` are parsed as hex via `AccountId.fromHex()`.
|
|
10
|
+
* - Other strings are parsed as bech32 via `AccountId.fromBech32()`.
|
|
11
|
+
* - Objects with an `.id()` method (Account) are resolved by calling `.id()`.
|
|
12
|
+
* - Otherwise, the value is assumed to be an AccountId pass-through.
|
|
13
|
+
*
|
|
14
|
+
* @param {string | Account | AccountId} ref - The account reference to resolve.
|
|
15
|
+
* @param {object} wasm - The WASM module.
|
|
16
|
+
* @returns {AccountId} The resolved AccountId.
|
|
17
|
+
*/
|
|
18
|
+
export function resolveAccountRef(ref, wasm) {
|
|
19
|
+
if (ref == null) {
|
|
20
|
+
throw new Error("Account reference cannot be null or undefined");
|
|
21
|
+
}
|
|
22
|
+
if (typeof ref === "string") {
|
|
23
|
+
if (ref.startsWith("0x") || ref.startsWith("0X")) {
|
|
24
|
+
return wasm.AccountId.fromHex(ref);
|
|
25
|
+
}
|
|
26
|
+
return wasm.AccountId.fromBech32(ref);
|
|
27
|
+
}
|
|
28
|
+
if (ref && typeof ref.id === "function") {
|
|
29
|
+
return ref.id();
|
|
30
|
+
}
|
|
31
|
+
return ref;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Resolves an AccountRef to a WASM Address object.
|
|
36
|
+
*
|
|
37
|
+
* - Strings starting with bech32 prefixes (`m`) are parsed via `Address.fromBech32()`.
|
|
38
|
+
* - Strings starting with `0x`/`0X` are parsed as hex AccountId, then wrapped in Address.
|
|
39
|
+
* - Account objects are resolved via `.id()` then wrapped in Address.
|
|
40
|
+
* - AccountId objects are wrapped in Address directly.
|
|
41
|
+
*
|
|
42
|
+
* @param {string | Account | AccountId} ref - The account reference to resolve.
|
|
43
|
+
* @param {object} wasm - The WASM module.
|
|
44
|
+
* @returns {Address} The resolved Address.
|
|
45
|
+
*/
|
|
46
|
+
export function resolveAddress(ref, wasm) {
|
|
47
|
+
if (ref == null) {
|
|
48
|
+
throw new Error("Address reference cannot be null or undefined");
|
|
49
|
+
}
|
|
50
|
+
if (typeof ref === "string") {
|
|
51
|
+
if (ref.startsWith("0x") || ref.startsWith("0X")) {
|
|
52
|
+
const accountId = wasm.AccountId.fromHex(ref);
|
|
53
|
+
return wasm.Address.fromAccountId(accountId, undefined);
|
|
54
|
+
}
|
|
55
|
+
return wasm.Address.fromBech32(ref);
|
|
56
|
+
}
|
|
57
|
+
if (ref && typeof ref.id === "function") {
|
|
58
|
+
const accountId = ref.id();
|
|
59
|
+
return wasm.Address.fromAccountId(accountId, undefined);
|
|
60
|
+
}
|
|
61
|
+
return wasm.Address.fromAccountId(ref, undefined);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Resolves a NoteVisibility string to a WASM NoteType value.
|
|
66
|
+
*
|
|
67
|
+
* @param {string | undefined} type - "public" or "private". Defaults to "public".
|
|
68
|
+
* @param {object} wasm - The WASM module.
|
|
69
|
+
* @returns {number} The NoteType enum value.
|
|
70
|
+
*/
|
|
71
|
+
export function resolveNoteType(type, wasm) {
|
|
72
|
+
if (type === "private") {
|
|
73
|
+
return wasm.NoteType.Private;
|
|
74
|
+
}
|
|
75
|
+
if (type === "public" || type == null) {
|
|
76
|
+
return wasm.NoteType.Public;
|
|
77
|
+
}
|
|
78
|
+
throw new Error(
|
|
79
|
+
`Unknown note type: "${type}". Expected "public" or "private".`
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Resolves a storage mode string to a WASM AccountStorageMode instance.
|
|
85
|
+
*
|
|
86
|
+
* @param {string | undefined} mode - "private", "public", or "network". Defaults to "private".
|
|
87
|
+
* @param {object} wasm - The WASM module.
|
|
88
|
+
* @returns {AccountStorageMode} The storage mode instance.
|
|
89
|
+
*/
|
|
90
|
+
export function resolveStorageMode(mode, wasm) {
|
|
91
|
+
switch (mode) {
|
|
92
|
+
case "public":
|
|
93
|
+
return wasm.AccountStorageMode.public();
|
|
94
|
+
case "network":
|
|
95
|
+
return wasm.AccountStorageMode.network();
|
|
96
|
+
case "private":
|
|
97
|
+
case undefined:
|
|
98
|
+
case null:
|
|
99
|
+
return wasm.AccountStorageMode.private();
|
|
100
|
+
default:
|
|
101
|
+
throw new Error(
|
|
102
|
+
`Unknown storage mode: "${mode}". Expected "private", "public", or "network".`
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Resolves an auth scheme string to a WASM AuthScheme enum value.
|
|
109
|
+
*
|
|
110
|
+
* @param {string | undefined} scheme - "falcon" or "ecdsa". Defaults to "falcon".
|
|
111
|
+
* @param {object} wasm - The WASM module.
|
|
112
|
+
* @returns {number} The AuthScheme enum value.
|
|
113
|
+
*/
|
|
114
|
+
export function resolveAuthScheme(scheme, wasm) {
|
|
115
|
+
if (scheme === "ecdsa") {
|
|
116
|
+
return wasm.AuthScheme.AuthEcdsaK256Keccak;
|
|
117
|
+
}
|
|
118
|
+
if (scheme === "falcon" || scheme == null) {
|
|
119
|
+
return wasm.AuthScheme.AuthRpoFalcon512;
|
|
120
|
+
}
|
|
121
|
+
throw new Error(
|
|
122
|
+
`Unknown auth scheme: "${scheme}". Expected "falcon" or "ecdsa".`
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Resolves an AccountType value to a boolean `mutable` flag
|
|
128
|
+
* for the underlying WASM `newWallet()` / `importPublicAccountFromSeed()` calls.
|
|
129
|
+
*
|
|
130
|
+
* Accepts the numeric WASM enum values (2 = immutable, 3 = mutable) or the
|
|
131
|
+
* legacy string aliases ("MutableWallet", "ImmutableWallet"). Defaults to
|
|
132
|
+
* mutable when undefined.
|
|
133
|
+
*
|
|
134
|
+
* @param {number | string | undefined} accountType
|
|
135
|
+
* @returns {boolean} Whether the account code is mutable.
|
|
136
|
+
*/
|
|
137
|
+
export function resolveAccountMutability(accountType) {
|
|
138
|
+
if (
|
|
139
|
+
accountType == null ||
|
|
140
|
+
accountType === "MutableWallet" ||
|
|
141
|
+
accountType === 3
|
|
142
|
+
) {
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
if (accountType === "ImmutableWallet" || accountType === 2) {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
throw new Error(
|
|
149
|
+
`Unknown wallet account type: "${accountType}". Expected AccountType.MutableWallet (3) or AccountType.ImmutableWallet (2).`
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Resolves a NoteInput (string | NoteId | InputNoteRecord | Note) to a hex string.
|
|
155
|
+
*
|
|
156
|
+
* - Strings are passed through unchanged.
|
|
157
|
+
* - NoteId WASM objects are converted via `.toString()`.
|
|
158
|
+
* - InputNoteRecord and Note objects (with an `.id()` method) are resolved via `.id().toString()`.
|
|
159
|
+
*
|
|
160
|
+
* @param {string | object} input - The note reference to resolve.
|
|
161
|
+
* @returns {string} The hex note ID string.
|
|
162
|
+
*/
|
|
163
|
+
export function resolveNoteIdHex(input) {
|
|
164
|
+
if (input == null) {
|
|
165
|
+
throw new Error("Note ID cannot be null or undefined");
|
|
166
|
+
}
|
|
167
|
+
if (typeof input === "string") {
|
|
168
|
+
return input;
|
|
169
|
+
}
|
|
170
|
+
// NoteId WASM object — has toString() but not id() (unlike InputNoteRecord/Note).
|
|
171
|
+
// Check for constructor.fromHex to distinguish from plain objects (which also inherit toString).
|
|
172
|
+
if (
|
|
173
|
+
typeof input.toString === "function" &&
|
|
174
|
+
typeof input.id !== "function" &&
|
|
175
|
+
input.constructor?.fromHex !== undefined
|
|
176
|
+
) {
|
|
177
|
+
return input.toString();
|
|
178
|
+
}
|
|
179
|
+
// InputNoteRecord, Note, or other object with id() returning NoteId
|
|
180
|
+
if (typeof input.id === "function") {
|
|
181
|
+
return input.id().toString();
|
|
182
|
+
}
|
|
183
|
+
throw new TypeError(
|
|
184
|
+
`Cannot resolve note ID: expected string, NoteId, InputNoteRecord, or Note, got ${typeof input}`
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Resolves a TransactionId reference (string | TransactionId) to a hex string.
|
|
190
|
+
*
|
|
191
|
+
* - Strings are passed through unchanged.
|
|
192
|
+
* - TransactionId WASM objects are converted via `.toHex()`.
|
|
193
|
+
*
|
|
194
|
+
* @param {string | object} input - The transaction ID reference to resolve.
|
|
195
|
+
* @returns {string} The hex transaction ID string.
|
|
196
|
+
*/
|
|
197
|
+
export function resolveTransactionIdHex(input) {
|
|
198
|
+
if (input == null) {
|
|
199
|
+
throw new Error("Transaction ID cannot be null or undefined");
|
|
200
|
+
}
|
|
201
|
+
if (typeof input === "string") {
|
|
202
|
+
return input;
|
|
203
|
+
}
|
|
204
|
+
// TransactionId WASM object — toHex() returns hex
|
|
205
|
+
if (typeof input.toHex === "function") {
|
|
206
|
+
return input.toHex();
|
|
207
|
+
}
|
|
208
|
+
throw new TypeError(
|
|
209
|
+
`Cannot resolve transaction ID: expected string or TransactionId, got ${typeof input}`
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Hashes a seed value. Strings are hashed via SHA-256 to produce a 32-byte Uint8Array.
|
|
215
|
+
* Uint8Array values are passed through unchanged.
|
|
216
|
+
*
|
|
217
|
+
* @param {string | Uint8Array} seed - The seed to hash.
|
|
218
|
+
* @returns {Promise<Uint8Array>} The hashed seed.
|
|
219
|
+
*/
|
|
220
|
+
export async function hashSeed(seed) {
|
|
221
|
+
if (seed instanceof Uint8Array) {
|
|
222
|
+
return seed;
|
|
223
|
+
}
|
|
224
|
+
if (typeof seed === "string") {
|
|
225
|
+
const encoded = new TextEncoder().encode(seed);
|
|
226
|
+
const hash = await crypto.subtle.digest("SHA-256", encoded);
|
|
227
|
+
return new Uint8Array(hash);
|
|
228
|
+
}
|
|
229
|
+
throw new TypeError(
|
|
230
|
+
`Invalid seed type: expected string or Uint8Array, got ${typeof seed}`
|
|
231
|
+
);
|
|
232
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@miden-sdk/miden-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0-alpha.4",
|
|
4
4
|
"description": "Miden Wasm SDK",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/0xMiden/web-sdk",
|
|
9
|
+
"directory": "crates/web-client"
|
|
10
|
+
},
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/0xMiden/web-sdk/issues"
|
|
13
|
+
},
|
|
5
14
|
"collaborators": [
|
|
6
15
|
"Miden"
|
|
7
16
|
],
|
|
@@ -11,69 +20,82 @@
|
|
|
11
20
|
"types": "./dist/index.d.ts",
|
|
12
21
|
"exports": {
|
|
13
22
|
".": {
|
|
14
|
-
"
|
|
15
|
-
|
|
23
|
+
"node": {
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"default": "./js/node-index.js"
|
|
26
|
+
},
|
|
27
|
+
"import": {
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"default": "./dist/eager.js"
|
|
30
|
+
}
|
|
16
31
|
},
|
|
17
32
|
"./lazy": {
|
|
18
|
-
"
|
|
19
|
-
|
|
20
|
-
|
|
33
|
+
"import": {
|
|
34
|
+
"types": "./dist/index.d.ts",
|
|
35
|
+
"default": "./dist/index.js"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"./package.json": "./package.json"
|
|
21
39
|
},
|
|
22
40
|
"files": [
|
|
23
41
|
"dist",
|
|
42
|
+
"lazy",
|
|
43
|
+
"js/node-index.js",
|
|
44
|
+
"js/node",
|
|
45
|
+
"js/client.js",
|
|
46
|
+
"js/standalone.js",
|
|
47
|
+
"js/utils.js",
|
|
48
|
+
"js/resources",
|
|
24
49
|
"../LICENSE.md"
|
|
25
50
|
],
|
|
26
|
-
"scripts": {
|
|
27
|
-
"build-rust-client-js": "cd ../idxdb-store/src/ && yarn && yarn build",
|
|
28
|
-
"build": "rimraf dist && npm run build-rust-client-js && cross-env RUSTFLAGS=\"--cfg getrandom_backend=\\\"wasm_js\\\"\" rollup -c rollup.config.js && cpr js/types dist && node clean.js",
|
|
29
|
-
"build-dev": "npm install && MIDEN_WEB_DEV=true npm run build",
|
|
30
|
-
"check:wasm-types": "node ./scripts/check-bindgen-types.js",
|
|
31
|
-
"check:method-classification": "node ./scripts/check-method-classification.js",
|
|
32
|
-
"check:standalone-types": "node ./scripts/check-standalone-types.js",
|
|
33
|
-
"test": "yarn playwright install --with-deps && yarn playwright test",
|
|
34
|
-
"test:ci": "yarn playwright install --with-deps chromium && yarn playwright test",
|
|
35
|
-
"test:ci:remote_prover": "yarn playwright install --with-deps && cross-env TEST_MIDEN_PROVER_URL=localhost yarn playwright test -g 'with remote prover'",
|
|
36
|
-
"test:devnet": "cross-env TEST_MIDEN_NETWORK=devnet yarn test",
|
|
37
|
-
"test:testnet": "cross-env TEST_MIDEN_NETWORK=testnet yarn test",
|
|
38
|
-
"test:remote_prover": "yarn install && yarn playwright install --with-deps && cross-env MIDEN_WEB_DEV=true yarn run build && cross-env TEST_MIDEN_PROVER_URL=localhost yarn playwright test -g 'with remote prover' ",
|
|
39
|
-
"test:remote_prover:devnet": "cross-env TEST_MIDEN_NETWORK=devnet TEST_MIDEN_PROVER_URL=devnet yarn run test:remote_prover",
|
|
40
|
-
"test:remote_prover:testnet": "cross-env TEST_MIDEN_NETWORK=testnet TEST_MIDEN_PROVER_URL=testnet yarn run test:remote_prover",
|
|
41
|
-
"test:clean": "yarn install && yarn playwright install --with-deps && MIDEN_WEB_DEV=true yarn run build && yarn playwright test ",
|
|
42
|
-
"test:clean:opt": "yarn install && yarn playwright install --with-deps && yarn run build && yarn playwright test ",
|
|
43
|
-
"typedoc": "typedoc"
|
|
44
|
-
},
|
|
45
51
|
"devDependencies": {
|
|
46
52
|
"@playwright/test": "^1.55.0",
|
|
47
53
|
"@rollup/plugin-commonjs": "^25.0.7",
|
|
48
54
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
49
55
|
"@types/node": "^24.9.2",
|
|
56
|
+
"@vitest/coverage-v8": "^3.0.0",
|
|
50
57
|
"@wasm-tool/rollup-plugin-rust": "^3.0.3",
|
|
51
58
|
"binaryen": "^129.0.0",
|
|
52
|
-
"chai": "^5.1.1",
|
|
53
59
|
"cpr": "^3.0.1",
|
|
54
60
|
"cross-env": "^7.0.3",
|
|
55
|
-
"esm": "^3.2.25",
|
|
56
|
-
"http-server": "^14.1.1",
|
|
57
|
-
"mocha": "^10.7.3",
|
|
58
|
-
"puppeteer": "^23.1.0",
|
|
59
61
|
"rimraf": "^6.0.1",
|
|
60
62
|
"rollup": "^4.59.0",
|
|
61
63
|
"rollup-plugin-copy": "^3.5.0",
|
|
62
|
-
"ts-node": "^10.9.2",
|
|
63
64
|
"typedoc": "^0.28.1",
|
|
64
65
|
"typedoc-plugin-markdown": "^4.8.1",
|
|
65
|
-
"typescript": "^5.5.4"
|
|
66
|
+
"typescript": "^5.5.4",
|
|
67
|
+
"vitest": "^3.0.0"
|
|
66
68
|
},
|
|
67
69
|
"dependencies": {
|
|
68
|
-
"@rollup/plugin-typescript": "^12.3.0",
|
|
69
70
|
"dexie": "^4.0.1",
|
|
70
71
|
"glob": "^11.0.0"
|
|
71
72
|
},
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
"optionalDependencies": {
|
|
74
|
+
"@miden-sdk/node-darwin-arm64": "0.15.0-alpha.4",
|
|
75
|
+
"@miden-sdk/node-darwin-x64": "0.15.0-alpha.4",
|
|
76
|
+
"@miden-sdk/node-linux-x64-gnu": "0.15.0-alpha.4"
|
|
77
|
+
},
|
|
78
|
+
"scripts": {
|
|
79
|
+
"build-rust-client-js": "pnpm --filter web_store run build",
|
|
80
|
+
"build": "rimraf dist && pnpm run build-rust-client-js && cross-env RUSTFLAGS=\"--cfg getrandom_backend=\\\"wasm_js\\\"\" rollup -c rollup.config.js && cpr js/types dist && node clean.js && node ./scripts/post-build.js",
|
|
81
|
+
"build-dev": "pnpm install && MIDEN_WEB_DEV=true pnpm run build",
|
|
82
|
+
"check:wasm-types": "node ./scripts/check-bindgen-types.js",
|
|
83
|
+
"check:method-classification": "node ./scripts/check-method-classification.js",
|
|
84
|
+
"check:standalone-types": "node ./scripts/check-standalone-types.js",
|
|
85
|
+
"test:install": "pnpm exec playwright install --with-deps",
|
|
86
|
+
"test:install:ci": "pnpm exec playwright install --with-deps chromium",
|
|
87
|
+
"test": "pnpm exec playwright test",
|
|
88
|
+
"test:ci": "pnpm exec playwright test",
|
|
89
|
+
"test:ci:remote_prover": "cross-env TEST_MIDEN_PROVER_URL=localhost pnpm exec playwright test --project=chromium -g 'with remote prover'",
|
|
90
|
+
"test:devnet": "cross-env TEST_MIDEN_NETWORK=devnet pnpm exec playwright test",
|
|
91
|
+
"test:testnet": "cross-env TEST_MIDEN_NETWORK=testnet pnpm exec playwright test",
|
|
92
|
+
"test:remote_prover": "cross-env TEST_MIDEN_PROVER_URL=localhost pnpm exec playwright test -g 'with remote prover'",
|
|
93
|
+
"test:remote_prover:devnet": "cross-env TEST_MIDEN_NETWORK=devnet TEST_MIDEN_PROVER_URL=devnet pnpm exec playwright test -g 'with remote prover'",
|
|
94
|
+
"test:remote_prover:testnet": "cross-env TEST_MIDEN_NETWORK=testnet TEST_MIDEN_PROVER_URL=testnet pnpm exec playwright test -g 'with remote prover'",
|
|
95
|
+
"test:clean": "pnpm exec playwright test",
|
|
96
|
+
"test:clean:opt": "pnpm exec playwright test",
|
|
97
|
+
"test:unit": "vitest run",
|
|
98
|
+
"test:coverage": "vitest run --coverage",
|
|
99
|
+
"typedoc": "typedoc"
|
|
78
100
|
}
|
|
79
|
-
}
|
|
101
|
+
}
|