@vzn/vx 0.0.161 → 0.0.163
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 +26 -23
- package/package.json +5 -5
- package/src/cache/cache.ts +1 -1
- package/src/config.ts +2 -2
- package/src/orchestrator/task-hash.ts +3 -2
- package/src/workspace/config-schema.ts +7 -1
package/README.md
CHANGED
|
@@ -143,29 +143,32 @@ keep your Turbo or Nx remote cache. [Parity map](packages/vx/docs/parity.md) ·
|
|
|
143
143
|
|
|
144
144
|
## Tried on real repos
|
|
145
145
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
|
152
|
-
|
|
|
153
|
-
| [
|
|
154
|
-
| [
|
|
155
|
-
| [
|
|
156
|
-
| [
|
|
157
|
-
| [
|
|
158
|
-
| [
|
|
159
|
-
| [
|
|
160
|
-
| [
|
|
161
|
-
| [
|
|
162
|
-
| [
|
|
163
|
-
| [
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
146
|
+
Public monorepos, each run with its own `turbo.json` or Nx graph against
|
|
147
|
+
the tool it ships with, same machine and tasks per row, medians.
|
|
148
|
+
|
|
149
|
+
<!-- repos:start — generated by packages/vx-bench/update-site.ts from real-repos.json; do not hand-edit -->
|
|
150
|
+
|
|
151
|
+
| Repo | Against | Cold build | Restore outputs | Nothing to do |
|
|
152
|
+
| ----------------------------------------------------------- | ------- | --------------------- | ------------------- | ---------------------- |
|
|
153
|
+
| [solidjs/solid](https://github.com/solidjs/solid) | Turbo | 40.6 s / 45.5 s | 66 ms / 127 ms | 51 ms / 95 ms |
|
|
154
|
+
| [withastro/astro](https://github.com/withastro/astro) | Turbo | 48.0 s / 57.9 s | 478 ms / 1.43 s | 249 ms / 1.38 s |
|
|
155
|
+
| [payloadcms/payload](https://github.com/payloadcms/payload) | Turbo | 126.9 s / 127.5 s | 3.44 s / 3.46 s | 256 ms / **237 ms** |
|
|
156
|
+
| [medusajs/medusa](https://github.com/medusajs/medusa) | Turbo | 308 s / 315 s | 3.86 s / 7.16 s | 947 ms / 3.29 s |
|
|
157
|
+
| [n8n-io/n8n](https://github.com/n8n-io/n8n) | Turbo | 137.2 s / **133.7 s** | 8.27 s / 12.5 s | 842 ms / 1.36 s |
|
|
158
|
+
| [calcom/cal.com](https://github.com/calcom/cal.com) | Turbo | 245.7 s / 250.7 s | 17.4 s / 19.9 s | 14.7 s / 18.5 s |
|
|
159
|
+
| [unocss/unocss](https://github.com/unocss/unocss) | Turbo | 45.1 s / 47.3 s | 859 ms / **185 ms** | 770 ms / **126 ms** |
|
|
160
|
+
| [vueuse/vueuse](https://github.com/vueuse/vueuse) | Turbo | 21.4 s / 29.2 s | 263 ms / **128 ms** | 246 ms / **51–161 ms** |
|
|
161
|
+
| [TanStack/query](https://github.com/TanStack/query) | Nx | 34.6 s / 37.1 s | 910 ms / 1.62 s | 291 ms / 1.60 s |
|
|
162
|
+
| [strapi/strapi](https://github.com/strapi/strapi) | Nx | 238.2 s / 245.7 s | 1.61 s / 3.94 s | 341 ms / 4.02 s |
|
|
163
|
+
| [novuhq/novu](https://github.com/novuhq/novu) | Nx | 291.2 s / 299.4 s | 3.10 s / 9.05 s | 655 ms / 8.55 s |
|
|
164
|
+
| [TanStack/router](https://github.com/TanStack/router) | Nx | 123.0 s / 138.0 s | 1.27 s / 3.82 s | 626 ms / 3.91 s |
|
|
165
|
+
| [refinedev/refine](https://github.com/refinedev/refine) | Nx | 96.2 s / 105.9 s | 1.06 s / 1.19 s | 303 ms / 1.16 s |
|
|
166
|
+
|
|
167
|
+
vx first, theirs second; **bold** marks the other tool winning. How each
|
|
168
|
+
repo was run, versions, dates and why a tool wins where it does:
|
|
169
|
+
[vx on real Turbo and Nx repos](https://vznjs.github.io/vx/benchmarks/real-repos/).
|
|
170
|
+
|
|
171
|
+
<!-- repos:end -->
|
|
169
172
|
|
|
170
173
|
## How it compares
|
|
171
174
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vzn/vx",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.163",
|
|
4
4
|
"description": "A fast, correct task runner and build cache for JavaScript monorepos.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
"node": ">=18"
|
|
18
18
|
},
|
|
19
19
|
"optionalDependencies": {
|
|
20
|
-
"@vzn/vx-linux-x64": "0.0.
|
|
21
|
-
"@vzn/vx-linux-arm64": "0.0.
|
|
22
|
-
"@vzn/vx-darwin-x64": "0.0.
|
|
23
|
-
"@vzn/vx-darwin-arm64": "0.0.
|
|
20
|
+
"@vzn/vx-linux-x64": "0.0.163",
|
|
21
|
+
"@vzn/vx-linux-arm64": "0.0.163",
|
|
22
|
+
"@vzn/vx-darwin-x64": "0.0.163",
|
|
23
|
+
"@vzn/vx-darwin-arm64": "0.0.163"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@anthropic-ai/sandbox-runtime": "^0.0.76"
|
package/src/cache/cache.ts
CHANGED
|
@@ -622,7 +622,7 @@ export class Cache implements CacheLayer {
|
|
|
622
622
|
}
|
|
623
623
|
if (found === SCHEMA_VERSION) return null
|
|
624
624
|
this.db.exec(
|
|
625
|
-
'DROP TABLE IF EXISTS entries; DROP TABLE IF EXISTS runs; DROP TABLE IF EXISTS file_hashes; DROP TABLE IF EXISTS output_files; DROP TABLE IF EXISTS invocations; DROP TABLE IF EXISTS run_task_inputs; DROP TABLE IF EXISTS entry_inputs; DROP TABLE IF EXISTS config_evals;',
|
|
625
|
+
'DROP TABLE IF EXISTS entries; DROP TABLE IF EXISTS runs; DROP TABLE IF EXISTS file_hashes; DROP TABLE IF EXISTS output_files; DROP TABLE IF EXISTS invocations; DROP TABLE IF EXISTS run_task_inputs; DROP TABLE IF EXISTS entry_inputs; DROP TABLE IF EXISTS config_evals; DROP TABLE IF EXISTS config_closures; DROP TABLE IF EXISTS output_dirs;',
|
|
626
626
|
)
|
|
627
627
|
this.db
|
|
628
628
|
.prepare("UPDATE schema_meta SET value = ? WHERE key = 'version'")
|
package/src/config.ts
CHANGED
|
@@ -14,8 +14,8 @@ export interface WorkspaceConfig {
|
|
|
14
14
|
*/
|
|
15
15
|
timeout?: number
|
|
16
16
|
/**
|
|
17
|
-
* Evict from the local cache at the end of every run
|
|
18
|
-
* by the same policy `vx cache prune` takes as flags: entries not used
|
|
17
|
+
* Evict from the local cache at the end of every run, whatever its
|
|
18
|
+
* `--cache` policy (a remote hit is ingested under any), by the same policy `vx cache prune` takes as flags: entries not used
|
|
19
19
|
* for `olderThan` (`30d`, `12h`), then least-recently-used entries
|
|
20
20
|
* until the cache is under `maxSize` (`10G`, `500MB`). Either or both.
|
|
21
21
|
* Omitted → nothing is evicted unless you run `vx cache prune`. Never
|
|
@@ -223,8 +223,9 @@ export async function movedInput(
|
|
|
223
223
|
} catch {
|
|
224
224
|
return f.path
|
|
225
225
|
}
|
|
226
|
-
// A whole-second stamp may stand for any write in its second
|
|
227
|
-
// during the command included
|
|
226
|
+
// A whole-second stamp may stand for any write in its second (two for
|
|
227
|
+
// an even one, FAT's tick), one during the command included
|
|
228
|
+
// (`racyWindowMs`).
|
|
228
229
|
if (commandFrom !== undefined && ctimeMs >= commandFrom - racyWindowMs(ctimeMs, 0)) {
|
|
229
230
|
return f.path
|
|
230
231
|
}
|
|
@@ -841,6 +841,11 @@ const FOREIGN_TOKENS: readonly (readonly [string, string])[] = [
|
|
|
841
841
|
"Turbo's workspace root — name the path without it in `workspaceFiles`, which is workspace-root-relative",
|
|
842
842
|
],
|
|
843
843
|
['{projectRoot}', "Nx's project root — drop it: `files` globs are project-relative already"],
|
|
844
|
+
[
|
|
845
|
+
'{options.',
|
|
846
|
+
'an Nx target option, which vx does not interpolate — write the path the option names',
|
|
847
|
+
],
|
|
848
|
+
['{projectName}', "Nx's project name, which vx does not interpolate — write the name"],
|
|
844
849
|
[
|
|
845
850
|
'{workspaceRoot}',
|
|
846
851
|
"Nx's workspace root — name the path without it in `workspaceFiles`, which is workspace-root-relative",
|
|
@@ -858,7 +863,8 @@ function assertNoForeignToken(glob: string, where: string): void {
|
|
|
858
863
|
}
|
|
859
864
|
for (const [token, meaning] of FOREIGN_TOKENS) {
|
|
860
865
|
if (glob.includes(token)) {
|
|
861
|
-
|
|
866
|
+
const shown = token.endsWith('.') ? `${token}…}` : token
|
|
867
|
+
throw new UserError(`${where}: "${glob}" holds ${shown}, ${meaning}`)
|
|
862
868
|
}
|
|
863
869
|
}
|
|
864
870
|
}
|