@vzn/vx 0.0.168 → 0.0.170

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vzn/vx",
3
- "version": "0.0.168",
3
+ "version": "0.0.170",
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.168",
21
- "@vzn/vx-linux-arm64": "0.0.168",
22
- "@vzn/vx-darwin-x64": "0.0.168",
23
- "@vzn/vx-darwin-arm64": "0.0.168"
20
+ "@vzn/vx-linux-x64": "0.0.170",
21
+ "@vzn/vx-linux-arm64": "0.0.170",
22
+ "@vzn/vx-darwin-x64": "0.0.170",
23
+ "@vzn/vx-darwin-arm64": "0.0.170"
24
24
  },
25
25
  "dependencies": {
26
26
  "@anthropic-ai/sandbox-runtime": "^0.0.76"
@@ -346,6 +346,7 @@ export function validateProjectConfig(config: ProjectConfig, configPath: string)
346
346
  // `VITE_*` passed nothing through and loaded clean (Turbo's
347
347
  // passThroughEnv expands it), where `cache.inputs.env` refused the
348
348
  // same text below: one refusal for the class (item 1090).
349
+ assertNoEnvNegation(passThrough as string[], `${where}.exec.env.passThrough`)
349
350
  const wild = (passThrough as string[]).find((n) => BUN_GLOB_WILDCARDS.test(n))
350
351
  if (wild !== undefined) {
351
352
  throw new UserError(
@@ -364,6 +365,8 @@ export function validateProjectConfig(config: ProjectConfig, configPath: string)
364
365
  `${where}.exec.env.secret must be an array of env var names (non-empty, no '=', NUL or wildcard)`,
365
366
  )
366
367
  }
368
+ if (secret !== undefined)
369
+ assertNoEnvNegation(secret as string[], `${where}.exec.env.secret`)
367
370
  const define = (env as { define?: unknown }).define
368
371
  if (define !== undefined) {
369
372
  if (typeof define !== 'object' || define === null || Array.isArray(define)) {
@@ -485,6 +488,7 @@ export function validateProjectConfig(config: ProjectConfig, configPath: string)
485
488
  `${where}.cache.inputs.env must be an array of env var names (non-empty, no '=' or NUL)`,
486
489
  )
487
490
  }
491
+ assertNoEnvNegation(envList as string[], `${where}.cache.inputs.env`)
488
492
  for (const name of envList as string[]) {
489
493
  // Reject wildcards explicitly so users don't silently miss
490
494
  // env vars they thought they were tracking. Turbo supports
@@ -872,7 +876,21 @@ function assertNoForeignToken(glob: string, where: string): void {
872
876
  /**
873
877
  * `.`, `./`, `././` (with or without a `!`) name the directory itself, which
874
878
  * no matcher expands: the entry selected nothing and said so nowhere.
875
- * `./src/**` is fine — the resolver strips the `./` (`normalizeGlob`).
879
+ * `./src/**
880
+ * Turbo's `!NAME` takes a name back out of a wildcard (`env`,
881
+ * `passThroughEnv`). vx has no wildcards, so the entry was a variable
882
+ * named `!NAME`: nothing excluded, nothing said (D-53).
883
+ */
884
+ function assertNoEnvNegation(names: readonly string[], where: string): void {
885
+ const neg = names.find((n) => n.startsWith('!'))
886
+ if (neg !== undefined) {
887
+ throw new UserError(
888
+ `${where}: "${neg}" is Turbo's exclusion from a wildcard — vx lists names explicitly, so leave ${neg.slice(1)} out`,
889
+ )
890
+ }
891
+ }
892
+
893
+ /**` is fine — the resolver strips the `./` (`normalizeGlob`).
876
894
  */
877
895
  function namesDirItself(glob: string): boolean {
878
896
  const g = normalizeGlob(glob.startsWith('!') ? glob.slice(1) : glob)