@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 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
- Twelve public monorepos, each run with its own `turbo.json` or Nx graph
147
- and nothing rewritten, against the tool it ships with. Same machine and
148
- tasks per row, medians; vx first, theirs second.
149
-
150
- | Repo | Against | Cold build | Restore outputs | Nothing to do |
151
- | ----------------------------------------------------------- | ------- | --------------------- | ------------------- | ------------------- |
152
- | [solidjs/solid](https://github.com/solidjs/solid) | Turbo | 40.6 s / 45.5 s | 66 ms / 127 ms | 51 ms / 95 ms |
153
- | [withastro/astro](https://github.com/withastro/astro) | Turbo | 48.0 s / 57.9 s | 478 ms / 1.43 s | 249 ms / 1.38 s |
154
- | [payloadcms/payload](https://github.com/payloadcms/payload) | Turbo | 126.9 s / 127.5 s | 3.44 s / 3.46 s | 256 ms / **237 ms** |
155
- | [medusajs/medusa](https://github.com/medusajs/medusa) | Turbo | 308 s / 315 s | 3.86 s / 7.16 s | 947 ms / 3.29 s |
156
- | [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 |
157
- | [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 |
158
- | [unocss/unocss](https://github.com/unocss/unocss) | Turbo | 45.1 s / 47.3 s | 859 ms / **185 ms** | 770 ms / **126 ms** |
159
- | [TanStack/query](https://github.com/TanStack/query) | Nx | 34.6 s / 37.1 s | 910 ms / 1.62 s | 291 ms / 1.60 s |
160
- | [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 |
161
- | [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 |
162
- | [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 |
163
- | [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 |
164
-
165
- **Bold** marks the other tool winning. Versions, revisions, scopes and
166
- harness per repo: [benchmarks](packages/vx/docs/benchmarks.md) (astro
167
- and refine as re-measured on 2026-09-27, TanStack/query,
168
- TanStack/router and unocss through their plugin on 2026-09-28, the rest 2026-09-10 and -11).
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.161",
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.161",
21
- "@vzn/vx-linux-arm64": "0.0.161",
22
- "@vzn/vx-darwin-x64": "0.0.161",
23
- "@vzn/vx-darwin-arm64": "0.0.161"
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"
@@ -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 that writes to it,
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, one
227
- // during the command included (`racyWindowMs`).
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
- throw new UserError(`${where}: "${glob}" holds ${token}, ${meaning}`)
866
+ const shown = token.endsWith('.') ? `${token}…}` : token
867
+ throw new UserError(`${where}: "${glob}" holds ${shown}, ${meaning}`)
862
868
  }
863
869
  }
864
870
  }