@spool-lab/core 0.5.2 → 0.6.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 +22 -14
- package/dist/db/db.d.ts +2 -2
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/db.js +106 -15
- package/dist/db/db.js.map +1 -1
- package/dist/db/native-binding.d.ts +21 -0
- package/dist/db/native-binding.d.ts.map +1 -0
- package/dist/db/native-binding.js +32 -0
- package/dist/db/native-binding.js.map +1 -0
- package/dist/db/published-shares-cache.d.ts +39 -0
- package/dist/db/published-shares-cache.d.ts.map +1 -0
- package/dist/db/published-shares-cache.js +60 -0
- package/dist/db/published-shares-cache.js.map +1 -0
- package/dist/db/queries.d.ts +5 -0
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +219 -80
- package/dist/db/queries.js.map +1 -1
- package/dist/db/search-query.d.ts +7 -0
- package/dist/db/search-query.d.ts.map +1 -1
- package/dist/db/search-query.js +33 -7
- package/dist/db/search-query.js.map +1 -1
- package/dist/db/share-drafts.d.ts.map +1 -1
- package/dist/db/share-drafts.js +1 -3
- package/dist/db/share-drafts.js.map +1 -1
- package/dist/doctor/checks/config.d.ts.map +1 -1
- package/dist/doctor/checks/config.js +3 -3
- package/dist/doctor/checks/config.js.map +1 -1
- package/dist/doctor/checks/db.d.ts.map +1 -1
- package/dist/doctor/checks/db.js +36 -18
- package/dist/doctor/checks/db.js.map +1 -1
- package/dist/doctor/checks/env.d.ts.map +1 -1
- package/dist/doctor/checks/env.js +5 -1
- package/dist/doctor/checks/env.js.map +1 -1
- package/dist/doctor/checks/index.js +2 -2
- package/dist/doctor/checks/index.js.map +1 -1
- package/dist/doctor/checks/native.d.ts.map +1 -1
- package/dist/doctor/checks/native.js.map +1 -1
- package/dist/doctor/checks/versions.d.ts.map +1 -1
- package/dist/doctor/checks/versions.js +2 -2
- package/dist/doctor/checks/versions.js.map +1 -1
- package/dist/doctor/preflight.js +2 -2
- package/dist/doctor/preflight.js.map +1 -1
- package/dist/doctor/runner.d.ts.map +1 -1
- package/dist/doctor/runner.js +1 -1
- package/dist/doctor/runner.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/migrations/agent-search-cleanup.d.ts.map +1 -1
- package/dist/migrations/agent-search-cleanup.js +10 -6
- package/dist/migrations/agent-search-cleanup.js.map +1 -1
- package/dist/migrations/worktree-identity-upgrade.d.ts +5 -3
- package/dist/migrations/worktree-identity-upgrade.d.ts.map +1 -1
- package/dist/migrations/worktree-identity-upgrade.js +26 -3
- package/dist/migrations/worktree-identity-upgrade.js.map +1 -1
- package/dist/observability/exporter-file.d.ts.map +1 -1
- package/dist/observability/exporter-file.js +14 -6
- package/dist/observability/exporter-file.js.map +1 -1
- package/dist/observability/exporter-pretty.d.ts.map +1 -1
- package/dist/observability/exporter-pretty.js +13 -7
- package/dist/observability/exporter-pretty.js.map +1 -1
- package/dist/observability/layer.d.ts.map +1 -1
- package/dist/observability/layer.js +1 -1
- package/dist/observability/layer.js.map +1 -1
- package/dist/parsers/claude.d.ts.map +1 -1
- package/dist/parsers/claude.js +4 -144
- package/dist/parsers/claude.js.map +1 -1
- package/dist/parsers/codex.d.ts +7 -1
- package/dist/parsers/codex.d.ts.map +1 -1
- package/dist/parsers/codex.js +43 -186
- package/dist/parsers/codex.js.map +1 -1
- package/dist/parsers/gemini.d.ts.map +1 -1
- package/dist/parsers/gemini.js +113 -13
- package/dist/parsers/gemini.js.map +1 -1
- package/dist/parsers/opencode.d.ts.map +1 -1
- package/dist/parsers/opencode.js +67 -33
- package/dist/parsers/opencode.js.map +1 -1
- package/dist/parsers/pi.d.ts +18 -0
- package/dist/parsers/pi.d.ts.map +1 -0
- package/dist/parsers/pi.js +155 -0
- package/dist/parsers/pi.js.map +1 -0
- package/dist/parsers/spool-prelude.d.ts +1 -15
- package/dist/parsers/spool-prelude.d.ts.map +1 -1
- package/dist/parsers/spool-prelude.js +3 -20
- package/dist/parsers/spool-prelude.js.map +1 -1
- package/dist/projects/fs.d.ts.map +1 -1
- package/dist/projects/fs.js +1 -1
- package/dist/projects/fs.js.map +1 -1
- package/dist/projects/groups.d.ts +4 -1
- package/dist/projects/groups.d.ts.map +1 -1
- package/dist/projects/groups.js +32 -11
- package/dist/projects/groups.js.map +1 -1
- package/dist/projects/identity-synthesizers.d.ts.map +1 -1
- package/dist/projects/identity-synthesizers.js.map +1 -1
- package/dist/projects/identity.d.ts +2 -2
- package/dist/projects/identity.d.ts.map +1 -1
- package/dist/projects/identity.js +24 -13
- package/dist/projects/identity.js.map +1 -1
- package/dist/projects/sessions.d.ts.map +1 -1
- package/dist/projects/sessions.js +11 -10
- package/dist/projects/sessions.js.map +1 -1
- package/dist/projects/worktree-resolvers.d.ts +3 -0
- package/dist/projects/worktree-resolvers.d.ts.map +1 -1
- package/dist/projects/worktree-resolvers.js +144 -8
- package/dist/projects/worktree-resolvers.js.map +1 -1
- package/dist/security/index.d.ts +2 -2
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1 -1
- package/dist/security/index.js.map +1 -1
- package/dist/security/maintenance.d.ts.map +1 -1
- package/dist/security/maintenance.js +1 -1
- package/dist/security/maintenance.js.map +1 -1
- package/dist/security/profile.d.ts.map +1 -1
- package/dist/security/profile.js +6 -4
- package/dist/security/profile.js.map +1 -1
- package/dist/security/purge.d.ts +2 -2
- package/dist/security/purge.d.ts.map +1 -1
- package/dist/security/purge.js +31 -15
- package/dist/security/purge.js.map +1 -1
- package/dist/security/repo.d.ts +1 -1
- package/dist/security/repo.d.ts.map +1 -1
- package/dist/security/repo.js +64 -37
- package/dist/security/repo.js.map +1 -1
- package/dist/security/scan.d.ts +2 -2
- package/dist/security/scan.d.ts.map +1 -1
- package/dist/security/scan.js +6 -4
- package/dist/security/scan.js.map +1 -1
- package/dist/security/worker.d.ts +2 -2
- package/dist/security/worker.d.ts.map +1 -1
- package/dist/security/worker.js +5 -11
- package/dist/security/worker.js.map +1 -1
- package/dist/sync/source-paths.d.ts.map +1 -1
- package/dist/sync/source-paths.js +46 -16
- package/dist/sync/source-paths.js.map +1 -1
- package/dist/sync/syncer.d.ts.map +1 -1
- package/dist/sync/syncer.js +112 -80
- package/dist/sync/syncer.js.map +1 -1
- package/dist/sync/watcher.d.ts +1 -1
- package/dist/sync/watcher.d.ts.map +1 -1
- package/dist/sync/watcher.js +17 -4
- package/dist/sync/watcher.js.map +1 -1
- package/dist/types.d.ts +8 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/util/resolve-bin.d.ts.map +1 -1
- package/dist/util/resolve-bin.js +40 -25
- package/dist/util/resolve-bin.js.map +1 -1
- package/package.json +35 -17
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-bin.d.ts","sourceRoot":"","sources":["../../src/util/resolve-bin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve-bin.d.ts","sourceRoot":"","sources":["../../src/util/resolve-bin.ts"],"names":[],"mappings":"AAaA;;;;;;;;;GASG;AAEH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAYnE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAmCpE;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAW7F;AAgBD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAM,EAAO,GAAG,MAAM,GAAG,IAAI,CAwBhG;AAID,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,EAAO,GAAG,MAAM,GAAG,IAAI,CAKhF;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEpD;AAsCD,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,gBAAgB,GAAE,MAAM,EAAO,GAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0BxB;AAED;;;;qEAIqE;AACrE,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,MAAM,EAAO,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWxB;AAED;;0EAE0E;AAC1E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAIhF;AAED;6EAC6E;AAC7E,wBAAgB,uBAAuB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAEvE"}
|
package/dist/util/resolve-bin.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execFile, execFileSync } from 'node:child_process';
|
|
2
2
|
import { existsSync, readdirSync } from 'node:fs';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
5
|
import { promisify } from 'node:util';
|
|
6
|
-
const
|
|
6
|
+
const execFileAsync = promisify(execFile);
|
|
7
|
+
const SAFE_BINARY_NAME = /^[A-Za-z0-9._+-]+$/;
|
|
8
|
+
function isSafeBinaryName(name) {
|
|
9
|
+
return name.length > 0 && SAFE_BINARY_NAME.test(name);
|
|
10
|
+
}
|
|
7
11
|
/**
|
|
8
12
|
* Resolve a binary path that works in both terminal-launched and
|
|
9
13
|
* GUI-launched (minimal PATH) contexts on macOS.
|
|
@@ -15,12 +19,15 @@ const execAsync = promisify(exec);
|
|
|
15
19
|
* in .zshrc / .bashrc (mise, asdf, fnm, etc.) rather than only profile files.
|
|
16
20
|
*/
|
|
17
21
|
export function nvmVersionBins(home, name) {
|
|
22
|
+
if (!isSafeBinaryName(name))
|
|
23
|
+
return [];
|
|
18
24
|
const versionsDir = join(home, '.nvm', 'versions', 'node');
|
|
19
25
|
try {
|
|
20
26
|
return readdirSync(versionsDir)
|
|
21
|
-
.filter(d => d.startsWith('v'))
|
|
22
|
-
.sort()
|
|
23
|
-
.
|
|
27
|
+
.filter((d) => d.startsWith('v'))
|
|
28
|
+
.sort()
|
|
29
|
+
.reverse()
|
|
30
|
+
.map((d) => join(versionsDir, d, 'bin', name));
|
|
24
31
|
}
|
|
25
32
|
catch {
|
|
26
33
|
return [];
|
|
@@ -33,6 +40,8 @@ export function nvmVersionBins(home, name) {
|
|
|
33
40
|
* (it's a stable entry point), then scan installed versions newest-first.
|
|
34
41
|
*/
|
|
35
42
|
export function miseVersionBins(home, name) {
|
|
43
|
+
if (!isSafeBinaryName(name))
|
|
44
|
+
return [];
|
|
36
45
|
const root = join(home, '.local', 'share', 'mise');
|
|
37
46
|
const result = [join(root, 'shims', name)];
|
|
38
47
|
const installsDir = join(root, 'installs');
|
|
@@ -53,7 +62,13 @@ export function miseVersionBins(home, name) {
|
|
|
53
62
|
continue;
|
|
54
63
|
}
|
|
55
64
|
const ordered = versions.includes('latest')
|
|
56
|
-
? [
|
|
65
|
+
? [
|
|
66
|
+
'latest',
|
|
67
|
+
...versions
|
|
68
|
+
.filter((v) => v !== 'latest')
|
|
69
|
+
.sort()
|
|
70
|
+
.reverse(),
|
|
71
|
+
]
|
|
57
72
|
: versions.sort().reverse();
|
|
58
73
|
for (const v of ordered) {
|
|
59
74
|
result.push(join(pluginDir, v, 'bin', name));
|
|
@@ -63,6 +78,8 @@ export function miseVersionBins(home, name) {
|
|
|
63
78
|
}
|
|
64
79
|
/** Ordered list of filesystem paths to probe for `name`. Pure. */
|
|
65
80
|
export function wellKnownBinPaths(name, home, extras = []) {
|
|
81
|
+
if (!isSafeBinaryName(name))
|
|
82
|
+
return [];
|
|
66
83
|
return [
|
|
67
84
|
...extras,
|
|
68
85
|
`/usr/local/bin/${name}`,
|
|
@@ -74,8 +91,10 @@ export function wellKnownBinPaths(name, home, extras = []) {
|
|
|
74
91
|
];
|
|
75
92
|
}
|
|
76
93
|
function shellLookup(shell, flags, name, timeoutMs) {
|
|
94
|
+
if (!isSafeBinaryName(name))
|
|
95
|
+
return null;
|
|
77
96
|
try {
|
|
78
|
-
const p =
|
|
97
|
+
const p = execFileSync(shell, [flags, 'command -v -- "$1"', 'spool-resolve', name], {
|
|
79
98
|
encoding: 'utf8',
|
|
80
99
|
timeout: timeoutMs,
|
|
81
100
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
@@ -87,13 +106,12 @@ function shellLookup(shell, flags, name, timeoutMs) {
|
|
|
87
106
|
}
|
|
88
107
|
}
|
|
89
108
|
export function resolveSystemBinary(name, extraSearchPaths = []) {
|
|
109
|
+
if (!isSafeBinaryName(name))
|
|
110
|
+
return null;
|
|
90
111
|
// 1. Current process PATH — fast path for terminal-launched contexts
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return p;
|
|
95
|
-
}
|
|
96
|
-
catch { }
|
|
112
|
+
const processPathMatch = shellLookup('/bin/sh', '-c', name, 3000);
|
|
113
|
+
if (processPathMatch)
|
|
114
|
+
return processPathMatch;
|
|
97
115
|
// 2. User's login+interactive shell — covers mise/asdf/fnm activated in .zshrc/.bashrc
|
|
98
116
|
const userShell = process.env['SHELL'];
|
|
99
117
|
if (userShell) {
|
|
@@ -127,7 +145,7 @@ export function clearResolveCache(name) {
|
|
|
127
145
|
delete resolvedPaths[name];
|
|
128
146
|
}
|
|
129
147
|
// ── Async API ─────────────────────────────────────────────────────────────
|
|
130
|
-
// The sync variants above use
|
|
148
|
+
// The sync variants above use execFileSync('<shell>', ['-ilc', ...]) which spawns a
|
|
131
149
|
// fresh interactive login shell and can take seconds when the user's
|
|
132
150
|
// .zshrc is heavy. Awaiting calls to those from the Electron main process
|
|
133
151
|
// stalls the event loop and produces a launch beachball. Async callers
|
|
@@ -142,11 +160,10 @@ export function clearResolveCache(name) {
|
|
|
142
160
|
// is reserved for users whose binaries genuinely only exist behind a
|
|
143
161
|
// shell-activated alias or function.
|
|
144
162
|
async function shellLookupAsync(shell, flags, name, timeoutMs) {
|
|
163
|
+
if (!isSafeBinaryName(name))
|
|
164
|
+
return null;
|
|
145
165
|
try {
|
|
146
|
-
const { stdout } = await
|
|
147
|
-
encoding: 'utf8',
|
|
148
|
-
timeout: timeoutMs,
|
|
149
|
-
});
|
|
166
|
+
const { stdout } = await execFileAsync(shell, [flags, 'command -v -- "$1"', 'spool-resolve', name], { encoding: 'utf8', timeout: timeoutMs });
|
|
150
167
|
const p = stdout.trim();
|
|
151
168
|
return p || null;
|
|
152
169
|
}
|
|
@@ -155,14 +172,12 @@ async function shellLookupAsync(shell, flags, name, timeoutMs) {
|
|
|
155
172
|
}
|
|
156
173
|
}
|
|
157
174
|
export async function resolveSystemBinaryAsync(name, extraSearchPaths = []) {
|
|
175
|
+
if (!isSafeBinaryName(name))
|
|
176
|
+
return null;
|
|
158
177
|
// 1. Current process PATH — fastest, covers terminal-launched contexts
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
if (p)
|
|
163
|
-
return p;
|
|
164
|
-
}
|
|
165
|
-
catch { }
|
|
178
|
+
const processPathMatch = await shellLookupAsync('/bin/sh', '-c', name, 3000);
|
|
179
|
+
if (processPathMatch)
|
|
180
|
+
return processPathMatch;
|
|
166
181
|
// 2. Well-known install locations — pure filesystem probes, no shell exec.
|
|
167
182
|
// Covers homebrew, ~/.local/bin, nvm versions, and mise installs/shims.
|
|
168
183
|
for (const p of wellKnownBinPaths(name, homedir(), extraSearchPaths)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-bin.js","sourceRoot":"","sources":["../../src/util/resolve-bin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"resolve-bin.js","sourceRoot":"","sources":["../../src/util/resolve-bin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spool-lab/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"private": false,
|
|
5
|
+
"homepage": "https://github.com/spool-lab/spool#readme",
|
|
6
|
+
"bugs": {
|
|
7
|
+
"url": "https://github.com/spool-lab/spool/issues"
|
|
8
|
+
},
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"author": {
|
|
11
|
+
"name": "xinyao",
|
|
12
|
+
"email": "hi@xinyao.me"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/spool-lab/spool.git"
|
|
17
|
+
},
|
|
18
|
+
"funding": "https://github.com/sponsors/xinyao27",
|
|
19
|
+
"files": [
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
5
22
|
"type": "module",
|
|
6
23
|
"main": "./dist/index.js",
|
|
7
24
|
"types": "./dist/index.d.ts",
|
|
@@ -11,35 +28,36 @@
|
|
|
11
28
|
"types": "./dist/index.d.ts"
|
|
12
29
|
}
|
|
13
30
|
},
|
|
14
|
-
"files": [
|
|
15
|
-
"dist"
|
|
16
|
-
],
|
|
17
31
|
"publishConfig": {
|
|
18
32
|
"access": "public"
|
|
19
33
|
},
|
|
20
34
|
"dependencies": {
|
|
21
|
-
"@effect/opentelemetry": "^0.
|
|
35
|
+
"@effect/opentelemetry": "^0.64.0",
|
|
22
36
|
"@opentelemetry/api": "^1.9.1",
|
|
23
|
-
"@opentelemetry/resources": "^2.
|
|
24
|
-
"@opentelemetry/sdk-trace-base": "^2.
|
|
25
|
-
"@opentelemetry/sdk-trace-node": "^2.
|
|
26
|
-
"@opentelemetry/semantic-conventions": "^1.
|
|
27
|
-
"better-sqlite3": "
|
|
28
|
-
"effect": "^3.
|
|
29
|
-
"@spool-lab/redact": "0.
|
|
37
|
+
"@opentelemetry/resources": "^2.9.0",
|
|
38
|
+
"@opentelemetry/sdk-trace-base": "^2.9.0",
|
|
39
|
+
"@opentelemetry/sdk-trace-node": "^2.9.0",
|
|
40
|
+
"@opentelemetry/semantic-conventions": "^1.43.0",
|
|
41
|
+
"better-sqlite3": "12.11.1",
|
|
42
|
+
"effect": "^3.22.0",
|
|
43
|
+
"@spool-lab/redact": "0.6.1",
|
|
44
|
+
"@spool-lab/session-kit": "^0.6.1"
|
|
30
45
|
},
|
|
31
46
|
"devDependencies": {
|
|
32
|
-
"@effect/vitest": "^0.
|
|
47
|
+
"@effect/vitest": "^0.30.0",
|
|
33
48
|
"@types/better-sqlite3": "^7.6.13",
|
|
34
|
-
"@types/node": "^
|
|
35
|
-
"
|
|
49
|
+
"@types/node": "^26.1.1",
|
|
50
|
+
"vite": "npm:@voidzero-dev/vite-plus-core@0.2.5",
|
|
51
|
+
"vite-plus": "0.2.5",
|
|
52
|
+
"vitest": "4.1.10"
|
|
36
53
|
},
|
|
37
54
|
"scripts": {
|
|
38
55
|
"rebuild:native": "pnpm run rebuild:native:node",
|
|
39
56
|
"rebuild:native:node": "node ../../scripts/rebuild-better-sqlite3-node.mjs",
|
|
40
|
-
"build": "pnpm run clean && tsc",
|
|
41
57
|
"dev": "tsc --watch",
|
|
42
|
-
"
|
|
58
|
+
"typecheck": "tsc --noEmit",
|
|
59
|
+
"test": "vp test run",
|
|
60
|
+
"bench:search": "vp run build && node scripts/benchmark-search-preview.mjs",
|
|
43
61
|
"clean": "rm -rf dist"
|
|
44
62
|
}
|
|
45
63
|
}
|