@visulima/vis 3.0.6 → 4.0.0

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.
Files changed (44) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/LICENSE.md +0 -116
  3. package/README.md +3 -2
  4. package/dist/bin.js +1 -1
  5. package/dist/binx.js +1 -1
  6. package/dist/config/index.d.ts +24 -4
  7. package/dist/packem_chunks/CONFIG_FILES.js +6 -5
  8. package/dist/packem_chunks/catalog.js +32 -32
  9. package/dist/packem_chunks/cli-exec.js +1 -1
  10. package/dist/packem_chunks/cli-main.js +153 -152
  11. package/dist/packem_chunks/handler12.js +25 -10
  12. package/dist/packem_chunks/handler2.js +1 -1
  13. package/dist/packem_chunks/handler28.js +1 -1
  14. package/dist/packem_chunks/handler3.js +2 -2
  15. package/dist/packem_chunks/handler55.js +1 -1
  16. package/dist/packem_chunks/handler59.js +1 -1
  17. package/dist/packem_chunks/handler6.js +1 -1
  18. package/dist/packem_chunks/handler67.js +28 -25
  19. package/dist/packem_chunks/handler68.js +25 -153
  20. package/dist/packem_chunks/handler69.js +153 -10
  21. package/dist/packem_chunks/handler70.js +10 -22
  22. package/dist/packem_chunks/handler71.js +21 -22
  23. package/dist/packem_chunks/handler72.js +23 -322
  24. package/dist/packem_chunks/handler73.js +273 -659
  25. package/dist/packem_chunks/handler74.js +708 -48
  26. package/dist/packem_chunks/handler75.js +48 -27
  27. package/dist/packem_chunks/handler76.js +27 -3
  28. package/dist/packem_chunks/handler77.js +3 -189
  29. package/dist/packem_chunks/handler78.js +188 -39
  30. package/dist/packem_chunks/help-command.js +1 -1
  31. package/dist/packem_shared/{affected-selection-BXSwA6UK.js → affected-selection-BmUh3_Qp.js} +1 -1
  32. package/dist/packem_shared/{bin-DX0e6Is-.js → bin-D-Es9mva.js} +1 -1
  33. package/dist/packem_shared/{index-Cit0JVOK.js → index-BvYJA7e5.js} +1 -1
  34. package/dist/packem_shared/lockfile-DVFySxTS.js +1 -0
  35. package/dist/packem_shared/{package-version-DwvcnvER.js → package-version-B_KfpWKC.js} +1 -1
  36. package/dist/packem_shared/{project-name-filter-DENHWAF3.js → project-name-filter-D6uEN2ot.js} +1 -1
  37. package/dist/packem_shared/vis-user-error-By2ZNeEA.js +31 -0
  38. package/index.js +26 -26
  39. package/package.json +12 -12
  40. package/schemas/project.schema.json +2 -2
  41. package/schemas/vis-config.schema.json +8 -9
  42. package/skills/vis/SKILL.md +1 -1
  43. package/dist/packem_shared/lockfile-35RFsJDs.js +0 -1
  44. package/dist/packem_shared/vis-user-error-Bp_JAmry.js +0 -30
package/CHANGELOG.md CHANGED
@@ -1,3 +1,31 @@
1
+ ## @visulima/vis [4.0.0](https://github.com/visulima/visulima/compare/@visulima/vis@3.0.6...@visulima/vis@4.0.0) (2026-09-03)
2
+
3
+ ### ⚠ BREAKING CHANGES
4
+
5
+ * **redact:** make nlp detection opt-in via injection (#852)
6
+
7
+ ### Features
8
+
9
+ * **redact:** make nlp detection opt-in via injection ([#852](https://github.com/visulima/visulima/issues/852)) ([78e60fd](https://github.com/visulima/visulima/commit/78e60fd3821dbe8c267c6ec71d90659ab4e4b2e1))
10
+
11
+ ### Bug Fixes
12
+
13
+ * stop vis ci, cache, preflight and inference failing silently ([#854](https://github.com/visulima/visulima/issues/854)) ([45a97b0](https://github.com/visulima/visulima/commit/45a97b02684c8336662f23a3f2cd2f7227c14692))
14
+ * unbreak the nightly Data Sync job ([#851](https://github.com/visulima/visulima/issues/851)) ([4f94b42](https://github.com/visulima/visulima/commit/4f94b429596b7047cd9b3a2ec2bd9c49caac4a82))
15
+
16
+
17
+ ### Dependencies
18
+
19
+ * **@visulima/task-runner:** upgraded to 1.0.6
20
+ * **@visulima/tui:** upgraded to 4.0.6
21
+ * **@visulima/tui-kit:** upgraded to 1.0.9
22
+ * **@visulima/cerebro:** upgraded to 3.1.1
23
+ * **@visulima/fs:** upgraded to 6.0.6
24
+ * **@visulima/package:** upgraded to 5.0.19
25
+ * **@visulima/pail:** upgraded to 5.0.0
26
+ * **@visulima/redact:** upgraded to 5.0.0
27
+ * **@visulima/tsconfig:** upgraded to 3.2.13
28
+
1
29
  ## @visulima/vis [3.0.6](https://github.com/visulima/visulima/compare/@visulima/vis@3.0.5...@visulima/vis@3.0.6) (2026-08-19)
2
30
 
3
31
  ### Bug Fixes
package/LICENSE.md CHANGED
@@ -10918,35 +10918,6 @@ Repository: git+https://github.com/yarnpkg/berry.git
10918
10918
 
10919
10919
  ---------------------------------------
10920
10920
 
10921
- ## compromise
10922
- License: MIT
10923
- By: Spencer Kelly
10924
- Repository: git://github.com/spencermountain/compromise.git
10925
-
10926
- > The MIT License (MIT)
10927
- >
10928
- > Copyright (c) 2019 Spencer Kelly
10929
- >
10930
- > Permission is hereby granted, free of charge, to any person obtaining a copy
10931
- > of this software and associated documentation files (the "Software"), to deal
10932
- > in the Software without restriction, including without limitation the rights
10933
- > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10934
- > copies of the Software, and to permit persons to whom the Software is
10935
- > furnished to do so, subject to the following conditions:
10936
- >
10937
- > The above copyright notice and this permission notice shall be included in all
10938
- > copies or substantial portions of the Software.
10939
- >
10940
- > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
10941
- > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10942
- > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
10943
- > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
10944
- > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
10945
- > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
10946
- > SOFTWARE.
10947
-
10948
- ---------------------------------------
10949
-
10950
10921
  ## conventional-commits-parser
10951
10922
  License: MIT
10952
10923
  By: Steve Mao
@@ -10976,35 +10947,6 @@ Repository: https://github.com/conventional-changelog/conventional-changelog.git
10976
10947
 
10977
10948
  ---------------------------------------
10978
10949
 
10979
- ## efrt
10980
- License: MIT
10981
- By: Spencer Kelly
10982
- Repository: git://github.com/spencermountain/efrt.git
10983
-
10984
- > The MIT License (MIT)
10985
- >
10986
- > Copyright (c) 2020 Spencer Kelly
10987
- >
10988
- > Permission is hereby granted, free of charge, to any person obtaining a copy
10989
- > of this software and associated documentation files (the "Software"), to deal
10990
- > in the Software without restriction, including without limitation the rights
10991
- > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10992
- > copies of the Software, and to permit persons to whom the Software is
10993
- > furnished to do so, subject to the following conditions:
10994
- >
10995
- > The above copyright notice and this permission notice shall be included in all
10996
- > copies or substantial portions of the Software.
10997
- >
10998
- > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
10999
- > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
11000
- > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
11001
- > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11002
- > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
11003
- > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
11004
- > SOFTWARE.
11005
-
11006
- ---------------------------------------
11007
-
11008
10950
  ## fastest-levenshtein
11009
10951
  License: MIT
11010
10952
  By: Kasper U. Weihe
@@ -11225,35 +11167,6 @@ Repository: unjs/giget
11225
11167
 
11226
11168
  ---------------------------------------
11227
11169
 
11228
- ## grad-school
11229
- License: MIT
11230
- By: Spencer Kelly
11231
- Repository: git+https://github.com/spencermountain/grounder.git
11232
-
11233
- > MIT License
11234
- >
11235
- > Copyright (c) 2021 spencer kelly
11236
- >
11237
- > Permission is hereby granted, free of charge, to any person obtaining a copy
11238
- > of this software and associated documentation files (the "Software"), to deal
11239
- > in the Software without restriction, including without limitation the rights
11240
- > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11241
- > copies of the Software, and to permit persons to whom the Software is
11242
- > furnished to do so, subject to the following conditions:
11243
- >
11244
- > The above copyright notice and this permission notice shall be included in all
11245
- > copies or substantial portions of the Software.
11246
- >
11247
- > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
11248
- > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
11249
- > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
11250
- > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11251
- > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
11252
- > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
11253
- > SOFTWARE.
11254
-
11255
- ---------------------------------------
11256
-
11257
11170
  ## grammex
11258
11171
  License: MIT
11259
11172
  Repository: github:fabiospampinato/grammex
@@ -12145,35 +12058,6 @@ Repository: jslicense/spdx-license-ids
12145
12058
 
12146
12059
  ---------------------------------------
12147
12060
 
12148
- ## suffix-thumb
12149
- License: MIT
12150
- By: Spencer Kelly
12151
- Repository: git://github.com/spencermountain/suffix-thumb.git
12152
-
12153
- > The MIT License (MIT)
12154
- >
12155
- > Copyright (c) 2016 Spencer Kelly
12156
- >
12157
- > Permission is hereby granted, free of charge, to any person obtaining a copy
12158
- > of this software and associated documentation files (the "Software"), to deal
12159
- > in the Software without restriction, including without limitation the rights
12160
- > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12161
- > copies of the Software, and to permit persons to whom the Software is
12162
- > furnished to do so, subject to the following conditions:
12163
- >
12164
- > The above copyright notice and this permission notice shall be included in all
12165
- > copies or substantial portions of the Software.
12166
- >
12167
- > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12168
- > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12169
- > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
12170
- > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
12171
- > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
12172
- > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
12173
- > SOFTWARE.
12174
-
12175
- ---------------------------------------
12176
-
12177
12061
  ## tinyexec
12178
12062
  License: MIT
12179
12063
  By: James Garbutt
package/README.md CHANGED
@@ -219,6 +219,7 @@ When aube is the installer, `vis doctor` surfaces aube's effective hardening pos
219
219
  | `vis init` | | Initialize vis.config.ts with security defaults |
220
220
  | `vis run <target>` | | Run a target across workspace projects with caching |
221
221
  | `vis affected <target>` | | Run tasks only on projects affected by git changes |
222
+ | `vis ci <targets>` | | One-shot CI entry point: toolchain, install, then affected runs for each comma-separated target |
222
223
  | `vis ignore <project>` | | CI build gating for Vercel / Netlify "Ignored Build Step" |
223
224
  | `vis graph` | | Visualize the project dependency graph |
224
225
  | `vis check [packages]` | `c` | Check for outdated dependencies in workspace catalogs |
@@ -249,7 +250,7 @@ vis cache why @myorg/app:build --json # stable shape for CI
249
250
  vis cache hash @myorg/app:build # just print the hash + per-bucket inputs
250
251
  ```
251
252
 
252
- `vis cache why` reads `.task-runner/last-summary.json` and diffs the task's `hashDetails` (`command`, `nodes`, `runtime`, `implicitDeps`) against the previous run, so you can pinpoint exactly which bucket rotated. Past runs only land in `.task-runner/runs/` when you pass `--summarize`, so use `vis run :build --summarize` (or set it as a default in CI) for diffs you'll want to inspect later.
253
+ `vis cache why` reads `.vis/last-summary.json` and diffs the task's `hashDetails` (`command`, `nodes`, `runtime`, `implicitDeps`) against the previous run, so you can pinpoint exactly which bucket rotated. Past runs only land in `.vis/runs/` when you pass `--summarize`, so use `vis run :build --summarize` (or set it as a default in CI) for diffs you'll want to inspect later.
253
254
 
254
255
  ### Cache retention
255
256
 
@@ -266,7 +267,7 @@ vis cache prune --keep-last=30 --max-age-days=14 # combine: 30-newest floor, t
266
267
 
267
268
  ### Sharing the cache across git worktrees
268
269
 
269
- When the workspace is a linked worktree (created with `git worktree add`), vis stores the cache at `<mainWorktreeRoot>/.task-runner-cache` so sibling worktrees driven by parallel agents share one cache instead of rebuilding the same hash N times. Set `sharedWorktreeCache: false` in `vis.config.ts` to opt out, or use `--scope=worktree|shared|all` on `vis cache list/size/prune` to inspect or operate on a specific store.
270
+ When the workspace is a linked worktree (created with `git worktree add`), vis stores the cache at `<mainWorktreeRoot>/node_modules/.cache/vis` so sibling worktrees driven by parallel agents share one cache instead of rebuilding the same hash N times. Set `sharedWorktreeCache: false` in `vis.config.ts` to opt out, or use `--scope=worktree|shared|all` on `vis cache list/size/prune` to inspect or operate on a specific store.
270
271
 
271
272
  ### Quieting successful runs
272
273
 
package/dist/bin.js CHANGED
@@ -1 +1 @@
1
- import"./packem_shared/compile-cache-DoMHRsRZ.js";import"./packem_shared/bin-DX0e6Is-.js";
1
+ import"./packem_shared/compile-cache-DoMHRsRZ.js";import"./packem_shared/bin-D-Es9mva.js";
package/dist/binx.js CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import{a as r,w as i,i as c,d as a,r as d}from"./packem_shared/vis-user-error-Bp_JAmry.js";import{t as n}from"./packem_shared/compile-cache-DoMHRsRZ.js";import{g as o}from"./packem_shared/package-version-DwvcnvER.js";process.argv.includes("--no-color")&&(process.env.NO_COLOR="1",process.env.FORCE_COLOR="0");process.argv.slice(2).some(s=>s==="--version"||s==="-v"||s==="-V")&&(process.stdout.write(`${o()}
2
+ import{a as r,x as i,i as c,d as a,r as d}from"./packem_shared/vis-user-error-By2ZNeEA.js";import{t as n}from"./packem_shared/compile-cache-DoMHRsRZ.js";import{g as o}from"./packem_shared/package-version-B_KfpWKC.js";process.argv.includes("--no-color")&&(process.env.NO_COLOR="1",process.env.FORCE_COLOR="0");process.argv.slice(2).some(s=>s==="--version"||s==="-v"||s==="-V")&&(process.stdout.write(`${o()}
3
3
  `),process.exit(0));process.argv.splice(2,0,"dlx");n();const e=r("visx",{packageName:"visx",packageVersion:o()}),p=process.argv.includes("--debug")||!!process.env.DEBUG;e.addPlugin(i({concise:c,detailed:p,exitOnError:!1}));e.addCommand(a);d(e);
@@ -1108,12 +1108,13 @@ interface VisConfig {
1108
1108
  };
1109
1109
  /**
1110
1110
  * Auto-create targets from detected config files (Project Crystal-style).
1111
- * On by default; set `false` to disable entirely, or use the object
1112
- * form to disable individual detectors.
1111
+ * Detectors run by default; set `false` to disable them entirely, or use
1112
+ * the object form to disable individual ones. See the note at the bottom
1113
+ * of this block for what "unset" allows versus an explicit `true`.
1113
1114
  *
1114
1115
  * Inferred targets sit *below* explicit ones — the command from
1115
1116
  * `package.json#scripts`, `project.json#targets`, or `vis.task.ts`
1116
- * always wins per-key, so opting in never changes what runs. As a
1117
+ * always wins per-key, so enrichment never changes what runs. As a
1117
1118
  * caching aid, when a `package.json` script's command *is* a
1118
1119
  * detector's command (optionally with extra flags, no shell
1119
1120
  * chaining) and the script declares no `inputs`/`outputs`, the
@@ -1173,7 +1174,26 @@ interface VisConfig {
1173
1174
  * opt individual detectors in or out by name. Detectors omitted from
1174
1175
  * the object run at their default (enabled). Useful when one
1175
1176
  * detector misfires for a given workspace without disabling the rest.
1176
- * @default true
1177
+ *
1178
+ * **Leaving this unset is not the same as setting `true`.** Detectors
1179
+ * always *enrich* the targets a project already has — adopting their
1180
+ * `type`, `inputs` and `outputs`, which is the caching aid and changes
1181
+ * nothing about what runs. *Synthesizing* a target the project never
1182
+ * had does change what runs, so on the unset default it is limited to
1183
+ * projects that declare no scripts and no targets of their own.
1184
+ * Setting this to `true` (or the object form) opts in to synthesis
1185
+ * everywhere.
1186
+ *
1187
+ * The distinction exists because a package can deliberately omit a
1188
+ * script: a shared eslint-config ships an `eslint.config.js` but no
1189
+ * `lint` script, because linting its own flat-config export crashes
1190
+ * eslint. Synthesizing `lint` there turned a package `pnpm -r run lint`
1191
+ * had always skipped into a failing task, on a workspace that had never
1192
+ * asked for inference.
1193
+ *
1194
+ * Deliberately no `@default` tag: there is no single value that
1195
+ * describes the unset behaviour, and advertising `true` would invite
1196
+ * tooling to write it into a config and silently widen synthesis.
1177
1197
  */
1178
1198
  inferTargets?: Record<string, boolean> | boolean;
1179
1199
  /**
@@ -1,8 +1,9 @@
1
- import{createRequire as G}from"node:module";import{L as _,m as L,T as O}from"../packem_shared/target-merge-B4No-LHM.js";import{v as b,e as a,m as y}from"../packem_shared/index-DHD8wb6Z.js";import{i as q}from"./ts-loader.js";import{otelPlugin as je}from"../packem_shared/otelPlugin-D8LL2-4L.js";import{definePlugin as Oe}from"../packem_shared/definePlugin-DoUcoYSy.js";import{y as d}from"../packem_shared/isAccessibleSync-DYKTrrvc-CSnBISfV.js";import{h as p}from"../packem_shared/writeFileSync-DJoHk3Ks-CgQ-VNNT.js";import{p as $}from"../packem_shared/readJsonSync-CbryXYxN-B2aSeDpC.js";let R;const I=e=>(R??=G(import.meta.url))(e),l=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,k=e=>{if(typeof l<"u"&&l.versions&&l.versions.node){const[s,t]=l.versions.node.split(".").map(Number);if(s>22||s===22&&t>=3||s===20&&t>=16)return l.getBuiltinModule(e)}return I(e)},{createHash:w}=k("node:crypto"),{readdirSync:j,readFileSync:N}=k("node:fs"),{createRequire:F}=k("node:module");class h extends Error{chain;constructor(s,t,o){super(s,o),this.name=this.constructor.name,this.chain=t}}class K extends h{constructor(s,t){const o=[...t,`${s} (re-enters)`].join(" → ");super(`Config cycle: ${o}`,t)}}class E extends h{filePath;removedKeys;constructor(s,t,o){const r=[`${s} uses removed keys.`,""];for(const n of o){const i=n.location?` (at ${n.location})`:"";r.push(` • ${n.name}${i} → renamed to \`${n.renamedTo}\``);for(const c of n.children??[])r.push(` ↳ ${c.name} → renamed to \`${c.renamedTo}\``)}r.push("","Run `vis migrate self` to auto-rewrite the config (use --dry-run to preview)."),super(r.join(`
2
- `),t),this.filePath=s,this.removedKeys=o}}class v extends h{constructor(s,t,o){const r=o instanceof Error?o.message:String(o),n=t.length>0?`
3
- Chain: ${t.join(" → ")}`:"";super(`Failed to load ${s}: ${r}${n}`,t,{cause:o})}}const M=e=>e.join(" → ");class m extends h{constructor(s,t,o){const r=t.length>0?t[t.length-1]:"<unknown>",n=o.length>0?`
1
+ import{createRequire as I}from"node:module";import{L as x,m as K,T as O}from"../packem_shared/target-merge-B4No-LHM.js";import{v as _,e as a,m as C}from"../packem_shared/index-DHD8wb6Z.js";import{i as M}from"./ts-loader.js";import{otelPlugin as _e}from"../packem_shared/otelPlugin-D8LL2-4L.js";import{definePlugin as Ee}from"../packem_shared/definePlugin-DoUcoYSy.js";import{y as d}from"../packem_shared/isAccessibleSync-DYKTrrvc-CSnBISfV.js";import{h as m}from"../packem_shared/writeFileSync-DJoHk3Ks-CgQ-VNNT.js";import{p as S}from"../packem_shared/readJsonSync-CbryXYxN-B2aSeDpC.js";let N;const F=e=>(N??=I(import.meta.url))(e),l=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,v=e=>{if(typeof l<"u"&&l.versions&&l.versions.node){const[s,t]=l.versions.node.split(".").map(Number);if(s>22||s===22&&t>=3||s===20&&t>=16)return l.getBuiltinModule(e)}return F(e)},{createHash:w}=v("node:crypto"),{readdirSync:$,readFileSync:L}=v("node:fs"),{createRequire:q}=v("node:module");class p extends Error{chain;constructor(s,t,o){super(s,o),this.name=this.constructor.name,this.chain=t}}class P extends p{constructor(s,t){const o=[...t,`${s} (re-enters)`].join(" → ");super(`Config cycle: ${o}`,t)}}class E extends p{filePath;removedKeys;constructor(s,t,o){const r=[`${s} uses removed keys.`,""];for(const n of o){const c=n.location?` (at ${n.location})`:"";r.push(` • ${n.name}${c} → renamed to \`${n.renamedTo}\``);for(const i of n.children??[])r.push(` ↳ ${i.name} → renamed to \`${i.renamedTo}\``)}r.push("","Run `vis migrate self` to auto-rewrite the config (use --dry-run to preview)."),super(r.join(`
2
+ `),t),this.filePath=s,this.removedKeys=o}}class T extends p{constructor(s,t,o){const r=o instanceof Error?o.message:String(o),n=t.length>0?`
3
+ Chain: ${t.join(" → ")}`:"";super(`Failed to load ${s}: ${r}${n}`,t,{cause:o})}}const U=e=>e.join(" → ");class k extends p{constructor(s,t,o){const r=t.length>0?t[t.length-1]:"<unknown>",n=o.length>0?`
4
4
  Tried:
5
5
  ${o.join(`
6
6
  `)}`:"";super(`Cannot resolve "${s}" extended from ${r}.${n}
7
- Chain: ${M(t)}`,t)}}const P=e=>{const s=[];if(Object.hasOwn(e,"targetDefaults")&&s.push({name:"targetDefaults",renamedTo:"tasks"}),Object.hasOwn(e,"taskRunnerOptions")&&s.push({name:"taskRunnerOptions",renamedTo:"taskRunner"}),Object.hasOwn(e,"taskDefaults")){const{taskDefaults:t}=e,o=[];if(Array.isArray(t))for(const[r,n]of t.entries())n&&typeof n=="object"&&(Object.hasOwn(n,"scope")&&o.push({location:`taskDefaults[${r}].scope`,name:"scope",renamedTo:"match"}),Object.hasOwn(n,"targets")&&o.push({location:`taskDefaults[${r}].targets`,name:"targets",renamedTo:"tasks"}));s.push({children:o.length>0?o:void 0,name:"taskDefaults",renamedTo:"scopedTasks"})}else if(Array.isArray(e.scopedTasks))for(const[t,o]of e.scopedTasks.entries())o&&typeof o=="object"&&(Object.hasOwn(o,"scope")&&s.push({location:`scopedTasks[${t}].scope`,name:"scope",renamedTo:"match"}),Object.hasOwn(o,"targets")&&s.push({location:`scopedTasks[${t}].targets`,name:"targets",renamedTo:"tasks"}));return s},U=e=>Object.hasOwn(e,"targets")&&!Object.hasOwn(e,"tasks")?[{name:"targets",renamedTo:"tasks"}]:[],W=(e,s,t)=>{if(!t||typeof t!="object")return;const o=P(t);if(o.length>0)throw new E(e,s,o)},z=(e,s,t)=>{if(!t||typeof t!="object")return;const o=U(t);if(o.length>0)throw new E(e,s,o)},x=["vis.config.ts","vis.config.mts","vis.config.cts","vis.config.js","vis.config.mjs","vis.config.cjs"],B=new Set(x),S=["vis.task.ts","vis.task.mts","vis.task.cts","vis.task.js","vis.task.mjs","vis.task.cjs"],H=new Set(S),ge=2880,g={blockExoticSubdeps:!0,policies:{installScripts:{strict:!0},publisherChange:{ignoreAfter:43200,mode:"no-downgrade"}}},Y=e=>{if(!e)return{...g};const s=g.policies??{},t=e.policies??{},o={...s,...t};for(const r of Object.keys(s)){const n=s[r],i=t[r];n!==void 0&&i!==void 0&&(o[r]={...n,...i})}return{...g,...e,policies:o}},T=e=>({...e,security:Y(e.security),update:{security:!0,target:"minor",...e.update}}),J=e=>{let s;try{s=j(e)}catch{return}const t=new Set(s.filter(o=>B.has(o)));for(const o of x)if(t.has(o))return a(e,o)},Q=e=>{let s;try{s=j(e)}catch{return}const t=new Set(s.filter(o=>H.has(o)));for(const o of S)if(t.has(o))return a(e,o)},D=e=>w("sha256").update(N(e)).digest("hex"),X=e=>{const s=w("sha256"),t=[...e].sort();for(const o of t)s.update(o),s.update(":"),s.update(D(o)),s.update(`
8
- `);return s.digest("hex")},Z=e=>{const s=a(e,"node_modules");if(d(s)){const o=a(s,".cache","vis");return p(o),a(o,"vis-config-cache.json")}const t=_("vis",{create:!0,cwd:e});return t?a(t,"vis-config-cache.json"):void 0},ee=(e,s)=>{if(d(e))try{const t=$(e);if(t.hash===s)return t.config}catch{}},se=(e,s,t)=>{try{p(y(e)),O(e,{config:t,hash:s})}catch{}},te=e=>e===void 0?[]:Array.isArray(e)?e:[e],oe=(e,s,t)=>{if(b(e))throw new m(e,[...t,s],["Absolute paths in `extends` are not supported. Use a relative path or an npm package name."]);const o=[];if(e.startsWith("./")||e.startsWith("../")){const r=y(s),n=a(r,e);if(o.push(n),d(n))return n;throw new m(e,[...t,s],o)}try{return F(s).resolve(e)}catch{throw o.push(`require.resolve("${e}") from ${s}`),new m(e,[...t,s],o)}},V=async(e,s)=>{let t;try{t=(await q(e)).default??{}}catch(o){throw new v(e,s,o)}try{return(typeof t=="function"?await t()??{}:t)??{}}catch(o){throw new v(e,s,o)}},ne=(e,s)=>{const t={...e,...s};if(e.tasks||s.tasks){const o=new Set([...Object.keys(e.tasks??{}),...Object.keys(s.tasks??{})]),r={};for(const n of o)r[n]=L(e.tasks?.[n],s.tasks?.[n]);t.tasks=r}if((e.scopedTasks||s.scopedTasks)&&(t.scopedTasks=[...e.scopedTasks??[],...s.scopedTasks??[]]),(e.fileGroups||s.fileGroups)&&(t.fileGroups={...e.fileGroups,...s.fileGroups}),(e.taskGroups||s.taskGroups)&&(t.taskGroups={...e.taskGroups,...s.taskGroups}),e.security||s.security){const o=e.security?.policies??{},r=s.security?.policies??{},n={...o,...r};for(const i of Object.keys(o)){const c=o[i],u=r[i];c!==void 0&&u!==void 0&&(n[i]={...c,...u})}t.security={...e.security,...s.security,acceptedRisks:{...e.security?.acceptedRisks,...s.security?.acceptedRisks},policies:n}}return(e.update||s.update)&&(t.update={...e.update,...s.update}),(e.taskRunner||s.taskRunner)&&(t.taskRunner={...e.taskRunner,...s.taskRunner}),delete t.extends,t},A=async(e,s,t,o,r)=>{if(t.has(e))throw new K(e,s);if(!o.has(e)){t.add(e);try{const n=await V(e,s);W(e,s,n);const i=te(n.extends);for(const c of i){const u=oe(c,e,s);await A(u,[...s,e],t,o,r)}o.set(e,n),r.push(e)}finally{t.delete(e)}}},ke=async(e,s)=>{let t;if(s?.explicitConfigPath){const f=b(s.explicitConfigPath)?s.explicitConfigPath:a(e,s.explicitConfigPath);if(!d(f))throw new Error(`Cannot find config file at ${f}`);t=f}else t=J(e);if(!t)return T({});const o=new Set,r=new Map,n=[];await A(t,[],o,r,n);const i=X(n),c=Z(e);if(c){const f=ee(c,i);if(f)return f}let u={};for(const f of n)u=ne(u,r.get(f));const C=T(u);return c&&se(c,i,C),C},re=e=>e.replaceAll(/[^\w.-]+/g,"_"),ie=(e,s)=>{const t=a(e,"node_modules"),o=re(s);if(d(t)){const n=a(t,".cache","vis","task-configs");return p(n),a(n,`${o}.json`)}const r=_("vis",{create:!0,cwd:e});return r?a(r,"task-configs",`${o}.json`):void 0},ce=(e,s)=>{if(d(e))try{const t=$(e);if(t.hash===s)return t.config}catch{}},ae=(e,s,t)=>{try{p(y(e)),O(e,{config:t,hash:s})}catch{}},ye=async(e,s,t)=>{const o=Q(s);if(!o)return;const r=D(o),n=ie(e,t);if(n){const u=ce(n,r);if(u)return u}const i=await V(o,[]);z(o,[],i);const c=i;return n&&ae(n,r,c),c},Ce=e=>e,ve=e=>e;export{x as CONFIG_FILES,ge as DEFAULT_MIN_RELEASE_AGE_MINUTES,g as SECURITY_DEFAULTS,S as TASK_CONFIG_FILES,T as applyDefaults,ve as defineConfig,Oe as definePlugin,Ce as defineTaskConfig,J as findVisConfigFile,Q as findVisTaskConfigFile,ke as loadVisConfig,ye as loadVisTaskConfig,je as otelPlugin};
7
+ Chain: ${U(t)}`,t)}}class W extends p{filePath;violations;constructor(s,t,o){const r=[`${s} has an invalid value.`,""];for(const n of o)r.push(` • ${n.location} — expected ${n.expected}, found ${n.found}`);r.push("","See https://visulima.com/docs/packages/vis/configuration for the expected shape."),super(r.join(`
8
+ `),t),this.filePath=s,this.violations=o}}const z=e=>{const s=[];if(Object.hasOwn(e,"targetDefaults")&&s.push({name:"targetDefaults",renamedTo:"tasks"}),Object.hasOwn(e,"taskRunnerOptions")&&s.push({name:"taskRunnerOptions",renamedTo:"taskRunner"}),Object.hasOwn(e,"taskDefaults")){const{taskDefaults:t}=e,o=[];if(Array.isArray(t))for(const[r,n]of t.entries())n&&typeof n=="object"&&(Object.hasOwn(n,"scope")&&o.push({location:`taskDefaults[${r}].scope`,name:"scope",renamedTo:"match"}),Object.hasOwn(n,"targets")&&o.push({location:`taskDefaults[${r}].targets`,name:"targets",renamedTo:"tasks"}));s.push({children:o.length>0?o:void 0,name:"taskDefaults",renamedTo:"scopedTasks"})}else if(Array.isArray(e.scopedTasks))for(const[t,o]of e.scopedTasks.entries())o&&typeof o=="object"&&(Object.hasOwn(o,"scope")&&s.push({location:`scopedTasks[${t}].scope`,name:"scope",renamedTo:"match"}),Object.hasOwn(o,"targets")&&s.push({location:`scopedTasks[${t}].targets`,name:"targets",renamedTo:"tasks"}));return s},B=e=>Object.hasOwn(e,"targets")&&!Object.hasOwn(e,"tasks")?[{name:"targets",renamedTo:"tasks"}]:[],H=(e,s,t)=>{if(!t||typeof t!="object")return;const o=z(t);if(o.length>0)throw new E(e,s,o)},Y=(e,s,t)=>{if(!t||typeof t!="object")return;const o=B(t);if(o.length>0)throw new E(e,s,o)},h=e=>{if(e===null)return"null";if(Array.isArray(e))return"an array";if(typeof e=="object"){const s=Object.keys(e);return s.length>0?`an object with { ${s.join(", ")} }`:"an empty object"}return typeof e},g=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),J=e=>{const s=[];if(!Object.hasOwn(e,"scopedTasks")||e.scopedTasks===void 0)return s;const{scopedTasks:t}=e;if(!Array.isArray(t))return s.push({expected:"an array of `{ match?, tasks }` blocks",found:h(t),location:"scopedTasks"}),s;for(const[o,r]of t.entries()){const n=`scopedTasks[${o}]`;if(!g(r)){s.push({expected:"a `{ match?, tasks }` block",found:h(r),location:n});continue}g(r.tasks)||s.push({expected:"`tasks` to be an object keyed by target name",found:r.tasks===void 0?`a block with { ${Object.keys(r).join(", ")} }`:h(r.tasks),location:`${n}.tasks`}),r.match!==void 0&&!g(r.match)&&s.push({expected:"`match` to be an object of project constraints",found:h(r.match),location:`${n}.match`})}return s},Q=(e,s,t)=>{if(!t||typeof t!="object")return;const o=J(t);if(o.length>0)throw new W(e,s,o)},D=["vis.config.ts","vis.config.mts","vis.config.cts","vis.config.js","vis.config.mjs","vis.config.cjs"],X=new Set(D),A=["vis.task.ts","vis.task.mts","vis.task.cts","vis.task.js","vis.task.mjs","vis.task.cjs"],Z=new Set(A),je=2880,y={blockExoticSubdeps:!0,policies:{installScripts:{strict:!0},publisherChange:{ignoreAfter:43200,mode:"no-downgrade"}}},ee=e=>{if(!e)return{...y};const s=y.policies??{},t=e.policies??{},o={...s,...t};for(const r of Object.keys(s)){const n=s[r],c=t[r];n!==void 0&&c!==void 0&&(o[r]={...n,...c})}return{...y,...e,policies:o}},b=e=>({...e,security:ee(e.security),update:{security:!0,target:"minor",...e.update}}),se=e=>{let s;try{s=$(e)}catch{return}const t=new Set(s.filter(o=>X.has(o)));for(const o of D)if(t.has(o))return a(e,o)},te=e=>{let s;try{s=$(e)}catch{return}const t=new Set(s.filter(o=>Z.has(o)));for(const o of A)if(t.has(o))return a(e,o)},V=e=>w("sha256").update(L(e)).digest("hex"),oe=e=>{const s=w("sha256"),t=[...e].sort();for(const o of t)s.update(o),s.update(":"),s.update(V(o)),s.update(`
9
+ `);return s.digest("hex")},ne=e=>{const s=a(e,"node_modules");if(d(s)){const o=a(s,".cache","vis");return m(o),a(o,"vis-config-cache.json")}const t=x("vis",{create:!0,cwd:e});return t?a(t,"vis-config-cache.json"):void 0},re=(e,s)=>{if(d(e))try{const t=S(e);if(t.hash===s)return t.config}catch{}},ce=(e,s,t)=>{try{m(C(e)),O(e,{config:t,hash:s})}catch{}},ie=e=>e===void 0?[]:Array.isArray(e)?e:[e],ae=(e,s,t)=>{if(_(e))throw new k(e,[...t,s],["Absolute paths in `extends` are not supported. Use a relative path or an npm package name."]);const o=[];if(e.startsWith("./")||e.startsWith("../")){const r=C(s),n=a(r,e);if(o.push(n),d(n))return n;throw new k(e,[...t,s],o)}try{return q(s).resolve(e)}catch{throw o.push(`require.resolve("${e}") from ${s}`),new k(e,[...t,s],o)}},G=async(e,s)=>{let t;try{t=(await M(e)).default??{}}catch(o){throw new T(e,s,o)}try{return(typeof t=="function"?await t()??{}:t)??{}}catch(o){throw new T(e,s,o)}},fe=(e,s)=>{const t={...e,...s};if(e.tasks||s.tasks){const o=new Set([...Object.keys(e.tasks??{}),...Object.keys(s.tasks??{})]),r={};for(const n of o)r[n]=K(e.tasks?.[n],s.tasks?.[n]);t.tasks=r}if((e.scopedTasks||s.scopedTasks)&&(t.scopedTasks=[...e.scopedTasks??[],...s.scopedTasks??[]]),(e.fileGroups||s.fileGroups)&&(t.fileGroups={...e.fileGroups,...s.fileGroups}),(e.taskGroups||s.taskGroups)&&(t.taskGroups={...e.taskGroups,...s.taskGroups}),e.security||s.security){const o=e.security?.policies??{},r=s.security?.policies??{},n={...o,...r};for(const c of Object.keys(o)){const i=o[c],f=r[c];i!==void 0&&f!==void 0&&(n[c]={...i,...f})}t.security={...e.security,...s.security,acceptedRisks:{...e.security?.acceptedRisks,...s.security?.acceptedRisks},policies:n}}return(e.update||s.update)&&(t.update={...e.update,...s.update}),(e.taskRunner||s.taskRunner)&&(t.taskRunner={...e.taskRunner,...s.taskRunner}),delete t.extends,t},R=async(e,s,t,o,r)=>{if(t.has(e))throw new P(e,s);if(!o.has(e)){t.add(e);try{const n=await G(e,s);H(e,s,n),Q(e,s,n);const c=ie(n.extends);for(const i of c){const f=ae(i,e,s);await R(f,[...s,e],t,o,r)}o.set(e,n),r.push(e)}finally{t.delete(e)}}},Te=async(e,s)=>{let t;if(s?.explicitConfigPath){const u=_(s.explicitConfigPath)?s.explicitConfigPath:a(e,s.explicitConfigPath);if(!d(u))throw new Error(`Cannot find config file at ${u}`);t=u}else t=se(e);if(!t)return b({});const o=new Set,r=new Map,n=[];await R(t,[],o,r,n);const c=oe(n),i=ne(e);if(i){const u=re(i,c);if(u)return u}let f={};for(const u of n)f=fe(f,r.get(u));const j=b(f);return i&&ce(i,c,j),j},ue=e=>e.replaceAll(/[^\w.-]+/g,"_"),de=(e,s)=>{const t=a(e,"node_modules"),o=ue(s);if(d(t)){const n=a(t,".cache","vis","task-configs");return m(n),a(n,`${o}.json`)}const r=x("vis",{create:!0,cwd:e});return r?a(r,"task-configs",`${o}.json`):void 0},le=(e,s)=>{if(d(e))try{const t=S(e);if(t.hash===s)return t.config}catch{}},pe=(e,s,t)=>{try{m(C(e)),O(e,{config:t,hash:s})}catch{}},be=async(e,s,t)=>{const o=te(s);if(!o)return;const r=V(o),n=de(e,t);if(n){const f=le(n,r);if(f)return f}const c=await G(o,[]);Y(o,[],c);const i=c;return n&&pe(n,r,i),i},we=e=>e,$e=e=>e;export{D as CONFIG_FILES,je as DEFAULT_MIN_RELEASE_AGE_MINUTES,y as SECURITY_DEFAULTS,A as TASK_CONFIG_FILES,b as applyDefaults,$e as defineConfig,Ee as definePlugin,we as defineTaskConfig,se as findVisConfigFile,te as findVisTaskConfigFile,Te as loadVisConfig,be as loadVisTaskConfig,_e as otelPlugin};