@visulima/vis 4.1.20 → 4.3.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 (197) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/LICENSE.md +804 -360
  3. package/dist/bin.js +1 -1
  4. package/dist/binx.js +1 -1
  5. package/dist/config/index.d.ts +117 -0
  6. package/dist/packem_chunks/CONFIG_FILES.js +1 -1
  7. package/dist/packem_chunks/bloom-status.js +1 -1
  8. package/dist/packem_chunks/bloom-sync.js +1 -1
  9. package/dist/packem_chunks/cargo-plan.js +3 -0
  10. package/dist/packem_chunks/catalog.js +50 -50
  11. package/dist/packem_chunks/cli-exec.js +1 -1
  12. package/dist/packem_chunks/cli-main.js +146 -142
  13. package/dist/packem_chunks/composer-projects.js +2 -0
  14. package/dist/packem_chunks/dart-plan.js +1 -0
  15. package/dist/packem_chunks/dart-projects.js +1 -0
  16. package/dist/packem_chunks/dispatch.js +1 -1
  17. package/dist/packem_chunks/fix.js +1 -1
  18. package/dist/packem_chunks/gem-plan.js +2 -0
  19. package/dist/packem_chunks/gem-projects.js +1 -0
  20. package/dist/packem_chunks/git.js +5 -5
  21. package/dist/packem_chunks/go-plan.js +1 -0
  22. package/dist/packem_chunks/go-projects.js +2 -0
  23. package/dist/packem_chunks/gradle-plan.js +1 -0
  24. package/dist/packem_chunks/handler.js +1 -1
  25. package/dist/packem_chunks/handler10.js +1 -1
  26. package/dist/packem_chunks/handler11.js +1 -1
  27. package/dist/packem_chunks/handler12.js +1 -1
  28. package/dist/packem_chunks/handler13.js +1 -1
  29. package/dist/packem_chunks/handler14.js +1 -1
  30. package/dist/packem_chunks/handler15.js +1 -1
  31. package/dist/packem_chunks/handler16.js +1 -1
  32. package/dist/packem_chunks/handler17.js +1 -1
  33. package/dist/packem_chunks/handler18.js +1 -1
  34. package/dist/packem_chunks/handler19.js +1 -1
  35. package/dist/packem_chunks/handler2.js +1 -1
  36. package/dist/packem_chunks/handler20.js +2 -2
  37. package/dist/packem_chunks/handler21.js +1 -1
  38. package/dist/packem_chunks/handler22.js +1 -1
  39. package/dist/packem_chunks/handler23.js +1 -1
  40. package/dist/packem_chunks/handler24.js +1 -1
  41. package/dist/packem_chunks/handler26.js +1 -1
  42. package/dist/packem_chunks/handler27.js +1 -1
  43. package/dist/packem_chunks/handler28.js +1 -1
  44. package/dist/packem_chunks/handler29.js +1 -1
  45. package/dist/packem_chunks/handler3.js +2 -2
  46. package/dist/packem_chunks/handler30.js +1 -1
  47. package/dist/packem_chunks/handler39.js +6 -6
  48. package/dist/packem_chunks/handler4.js +3 -3
  49. package/dist/packem_chunks/handler5.js +1 -1
  50. package/dist/packem_chunks/handler50.js +1 -1
  51. package/dist/packem_chunks/handler51.js +1 -1
  52. package/dist/packem_chunks/handler52.js +3 -3
  53. package/dist/packem_chunks/handler53.js +1 -1
  54. package/dist/packem_chunks/handler54.js +2 -2
  55. package/dist/packem_chunks/handler55.js +1 -1
  56. package/dist/packem_chunks/handler58.js +3 -3
  57. package/dist/packem_chunks/handler59.js +1 -1
  58. package/dist/packem_chunks/handler6.js +5 -5
  59. package/dist/packem_chunks/handler60.js +1 -1
  60. package/dist/packem_chunks/handler61.js +1 -1
  61. package/dist/packem_chunks/handler62.js +1 -1
  62. package/dist/packem_chunks/handler63.js +1 -1
  63. package/dist/packem_chunks/handler64.js +1 -1
  64. package/dist/packem_chunks/handler65.js +4 -4
  65. package/dist/packem_chunks/handler66.js +1 -1
  66. package/dist/packem_chunks/handler67.js +10 -10
  67. package/dist/packem_chunks/handler68.js +1 -1
  68. package/dist/packem_chunks/handler69.js +1 -1
  69. package/dist/packem_chunks/handler7.js +1 -1
  70. package/dist/packem_chunks/handler70.js +4 -4
  71. package/dist/packem_chunks/handler71.js +6 -6
  72. package/dist/packem_chunks/handler72.js +1 -1
  73. package/dist/packem_chunks/handler73.js +87 -86
  74. package/dist/packem_chunks/handler74.js +1 -1
  75. package/dist/packem_chunks/handler75.js +31 -31
  76. package/dist/packem_chunks/handler76.js +4 -4
  77. package/dist/packem_chunks/handler77.js +1 -1
  78. package/dist/packem_chunks/handler78.js +64 -64
  79. package/dist/packem_chunks/handler8.js +1 -1
  80. package/dist/packem_chunks/handler9.js +1 -1
  81. package/dist/packem_chunks/heal-accept.js +1 -1
  82. package/dist/packem_chunks/heal.js +1 -1
  83. package/dist/packem_chunks/help-command.js +7 -7
  84. package/dist/packem_chunks/hex-plan.js +3 -0
  85. package/dist/packem_chunks/hex-projects.js +1 -0
  86. package/dist/packem_chunks/index2.js +52 -42
  87. package/dist/packem_chunks/index4.js +58 -802
  88. package/dist/packem_chunks/index5.js +802 -7
  89. package/dist/packem_chunks/index6.js +7 -59
  90. package/dist/packem_chunks/keys-refresh.js +1 -1
  91. package/dist/packem_chunks/lean.js +1 -1
  92. package/dist/packem_chunks/list.js +1 -1
  93. package/dist/packem_chunks/loader.js +1 -1
  94. package/dist/packem_chunks/maven-plan.js +1 -0
  95. package/dist/packem_chunks/maven-projects.js +1 -0
  96. package/dist/packem_chunks/nuget-plan.js +1 -0
  97. package/dist/packem_chunks/nuget-projects.js +1 -0
  98. package/dist/packem_chunks/orchestrator.js +33 -33
  99. package/dist/packem_chunks/prune.js +1 -1
  100. package/dist/packem_chunks/python-plan.js +3 -0
  101. package/dist/packem_chunks/python-projects.js +1 -0
  102. package/dist/packem_chunks/security.js +1 -1
  103. package/dist/packem_chunks/snapshot.js +2 -2
  104. package/dist/packem_chunks/status.js +1 -1
  105. package/dist/packem_chunks/swift-projects.js +1 -0
  106. package/dist/packem_chunks/sync.js +3 -2
  107. package/dist/packem_chunks/sync2.js +1 -1
  108. package/dist/packem_chunks/tripwire.js +1 -1
  109. package/dist/packem_chunks/ts-loader.js +5 -5
  110. package/dist/packem_chunks/verify-lockfile.js +1 -1
  111. package/dist/packem_chunks/version-resolver.js +3 -3
  112. package/dist/packem_chunks/zig-plan.js +1 -0
  113. package/dist/packem_chunks/zig-projects.js +1 -0
  114. package/dist/packem_shared/Table-BB8xHTU5-BLPS917D.js +11 -0
  115. package/dist/packem_shared/affected-selection-BzIbfpA1.js +1 -0
  116. package/dist/packem_shared/{affected-shas-Dd0P7fGD.js → affected-shas-B2V84O0g.js} +1 -1
  117. package/dist/packem_shared/{ai-analysis-DSQQDFU9.js → ai-analysis-Cfj24UAy.js} +1 -1
  118. package/dist/packem_shared/{ai-fix-BHyx1F1j.js → ai-fix-DeRUtT-s.js} +1 -1
  119. package/dist/packem_shared/{augment-COAiXSIx.js → augment-B9kSZuvW.js} +1 -1
  120. package/dist/packem_shared/{bin-Bq3tJmvE.js → bin-D9TsVhq2.js} +1 -1
  121. package/dist/packem_shared/{build-scripts-pdVmqXRm.js → build-scripts-CEDx_nJp.js} +1 -1
  122. package/dist/packem_shared/{command-runtime-CiLVo4ED.js → command-runtime-p4IXiIf6.js} +1 -1
  123. package/dist/packem_shared/composer-DR3D-Psb.js +1 -0
  124. package/dist/packem_shared/dart-pubspec-BK_cK2EP.js +2 -0
  125. package/dist/packem_shared/{dependency-scan-DBH2Qo4I.js → dependency-scan-B8jroa1D.js} +1 -1
  126. package/dist/packem_shared/{docker-Dy-X_BuM.js → docker-DXqV-07f.js} +1 -1
  127. package/dist/packem_shared/ecosystem-gate-1M3wnsTr.js +6 -0
  128. package/dist/packem_shared/{failure-log-3R522Vb5.js → failure-log-D2x5BT8S.js} +1 -1
  129. package/dist/packem_shared/{formatBytes-BHAzNIrn-XohRrPdt.js → formatBytes-BHAzNIrn-CrusHOew.js} +1 -1
  130. package/dist/packem_shared/gemspec-K7N05xxc.js +3 -0
  131. package/dist/packem_shared/glob-Cyk1H9ZL-Dxlf9Swz.js +1 -0
  132. package/dist/packem_shared/go-modules-BsVqtyeC.js +1 -0
  133. package/dist/packem_shared/gradle-build-CHZDHyjI.js +8 -0
  134. package/dist/packem_shared/index-BO8qIogg.js +1 -0
  135. package/dist/packem_shared/index-BzhrR_iC.js +22 -0
  136. package/dist/packem_shared/{index-Vm90Te96.js → index-CNYv9D8g.js} +1 -1
  137. package/dist/packem_shared/{isAccessibleSync-DYKTrrvc-CSnBISfV.js → isAccessibleSync-DYKTrrvc-C-_5cgwu.js} +1 -1
  138. package/dist/packem_shared/{lifecycle-CAIJbxIa.js → lifecycle-D6PMPor-.js} +1 -1
  139. package/dist/packem_shared/{lockfile-DVFySxTS.js → lockfile-CiUtEbnt.js} +1 -1
  140. package/dist/packem_shared/{manifests-BNSmpPF_.js → manifests-Du4yKlf_.js} +1 -1
  141. package/dist/packem_shared/maven-pom-B0KG9kJQ.js +1 -0
  142. package/dist/packem_shared/{min-release-age-ChzTC7_I.js → min-release-age-JViyQuBM.js} +1 -1
  143. package/dist/packem_shared/missing-package-json-DnHMxRnG.js +1 -0
  144. package/dist/packem_shared/mix-project-RYvdZp3_.js +2 -0
  145. package/dist/packem_shared/multi-eco-lockfiles-CUUxUjHK.js +1 -0
  146. package/dist/packem_shared/{native-config-sync-BSzU4qUO.js → native-config-sync-TdTWjVgI.js} +2 -2
  147. package/dist/packem_shared/nuget-project-RApYSW_y.js +4 -0
  148. package/dist/packem_shared/{osv-bloom-JYIWcH3F.js → osv-bloom-BCAX5ARR.js} +1 -1
  149. package/dist/packem_shared/package-version-DUcG-b7S.js +4 -0
  150. package/dist/packem_shared/{packument-DyuhH1Gz.js → packument-CyGSNquL.js} +1 -1
  151. package/dist/packem_shared/{pm-runner-d93_73O6.js → pm-runner-CMSml1Bj.js} +1 -1
  152. package/dist/packem_shared/{project-name-filter-CC5FF49q.js → project-name-filter--bq-FL2f.js} +1 -1
  153. package/dist/packem_shared/{provenance-BH80RHXx.js → provenance-DyF0b6KX.js} +1 -1
  154. package/dist/packem_shared/{readJsonSync-CbryXYxN-B2aSeDpC.js → readJsonSync-CbryXYxN-EWl7_7KX.js} +1 -1
  155. package/dist/packem_shared/{registry-keys-BWHRFWbb.js → registry-keys-DwB3ZXS_.js} +1 -1
  156. package/dist/packem_shared/{resolve-explicit-DuJ3mbzt.js → resolve-explicit-BjCEm0s-.js} +1 -1
  157. package/dist/packem_shared/resolve-runtime-CNiHcVtx.js +1 -0
  158. package/dist/packem_shared/{run-file-jMngGQhs.js → run-file-UBukWaha.js} +1 -1
  159. package/dist/packem_shared/{runtime-check-BklgEMkC.js → runtime-check-1U8HrQd9.js} +1 -1
  160. package/dist/packem_shared/{s1ngularity-BJ5j2vbJ.js → s1ngularity-YfmkD_AH.js} +1 -1
  161. package/dist/packem_shared/scan-progress-C_zaZjyY.js +2 -0
  162. package/dist/packem_shared/{selectors-B7lSFz7l.js → selectors-edwcgNl3.js} +1 -1
  163. package/dist/packem_shared/{signatures-BP042BlB.js → signatures-CL3ckp_Y.js} +1 -1
  164. package/dist/packem_shared/{spinner-BM_0Bj6x.js → spinner-DuB0K0Am.js} +1 -1
  165. package/dist/packem_shared/swift-package-B6X5kzQE.js +1 -0
  166. package/dist/packem_shared/{tabs-UDYQ3tqt.js → tabs-RZd_e1M0.js} +1 -1
  167. package/dist/packem_shared/{target-merge-B4No-LHM.js → target-merge-DVJl-7Qz.js} +1 -1
  168. package/dist/packem_shared/{target-options-d_rIrLyq.js → target-options-DsHFmRZH.js} +1 -1
  169. package/dist/packem_shared/{toolchain-DY11tPCw.js → toolchain-BRdpaAC4.js} +1 -1
  170. package/dist/packem_shared/{typosquats-CSkIFgF5.js → typosquats-8u0drCqQ.js} +1 -1
  171. package/dist/packem_shared/{use-measured-height-BPQg2q_p.js → use-measured-height-DWkDV9Dj.js} +1 -1
  172. package/dist/packem_shared/verify-B_MblU_Q.js +1 -0
  173. package/dist/packem_shared/{vis-update-app-CR21zyht.js → vis-update-app-D73C__fx.js} +1 -1
  174. package/dist/packem_shared/{vis-user-error-qqqhLoF6.js → vis-user-error-Cpg2FqA4.js} +15 -15
  175. package/dist/packem_shared/{watch-Dswvj6Zp.js → watch-CcTketln.js} +1 -1
  176. package/dist/packem_shared/{watch-loop-COWvvSbR.js → watch-loop-qRn0IHPG.js} +1 -1
  177. package/dist/packem_shared/{writeFileSync-DJoHk3Ks-CgQ-VNNT.js → writeFileSync-DJoHk3Ks-BPRoepNw.js} +1 -1
  178. package/dist/packem_shared/zig-manifest-P7ydLEOa.js +7 -0
  179. package/dist/release/plugin-sdk.d.ts +1 -1
  180. package/dist/release/types.d.ts +133 -7
  181. package/dist/runtime/preload.js +1 -1
  182. package/index.js +52 -52
  183. package/package.json +12 -12
  184. package/schemas/vis-config.schema.json +279 -5
  185. package/schemas/vis-release-config.schema.json +132 -5
  186. package/dist/packem_shared/Table-kgZ-Cd21-DdNsp69H.js +0 -9
  187. package/dist/packem_shared/advisories-0ScpWAHV.js +0 -1
  188. package/dist/packem_shared/affected-selection-Bt4qkPUb.js +0 -1
  189. package/dist/packem_shared/cyclonedx-CX2fFvDi.js +0 -4
  190. package/dist/packem_shared/glob-Cyk1H9ZL-ox19CSsT.js +0 -1
  191. package/dist/packem_shared/index-Czrll7SU.js +0 -1
  192. package/dist/packem_shared/index-DHD8wb6Z.js +0 -22
  193. package/dist/packem_shared/missing-package-json-C0keIt78.js +0 -1
  194. package/dist/packem_shared/package-version-DFlytdgJ.js +0 -4
  195. package/dist/packem_shared/resolve-runtime-C7NBCA1C.js +0 -1
  196. package/dist/packem_shared/scan-progress-DRIGQRMr.js +0 -2
  197. package/dist/packem_shared/verify-D8wYvB85.js +0 -1
package/dist/bin.js CHANGED
@@ -1 +1 @@
1
- import"./packem_shared/compile-cache-DoMHRsRZ.js";import"./packem_shared/bin-Bq3tJmvE.js";
1
+ import"./packem_shared/compile-cache-DoMHRsRZ.js";import"./packem_shared/bin-D9TsVhq2.js";
package/dist/binx.js CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import{a as r,x as i,i as c,d as a,r as d}from"./packem_shared/vis-user-error-qqqhLoF6.js";import{t as n}from"./packem_shared/compile-cache-DoMHRsRZ.js";import{g as o}from"./packem_shared/package-version-DFlytdgJ.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-Cpg2FqA4.js";import{t as n}from"./packem_shared/compile-cache-DoMHRsRZ.js";import{g as o}from"./packem_shared/package-version-DUcG-b7S.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);
@@ -887,6 +887,27 @@ interface ScopedTasksBlock {
887
887
  tasks: Record<string, Partial<VisTargetConfiguration>>;
888
888
  }
889
889
  interface VisConfig {
890
+ /**
891
+ * Workspace-relative glob patterns for changed files outside every
892
+ * project that `vis affected`, `vis run --affected`, `vis ci` and
893
+ * `vis ci ignore` should not count as a change.
894
+ *
895
+ * By default a changed file that belongs to no project (a root
896
+ * `tsconfig.json`, `package.json`, …) is a global change and marks every
897
+ * project affected. A changed file matching one of these patterns is
898
+ * skipped instead. The patterns are only checked for files that belong
899
+ * to NO project: a file inside a project root is never filtered, so a
900
+ * broad pattern like `*.md` cannot hide a real package change.
901
+ *
902
+ * Patterns use `path.matchesGlob` syntax, where `*` does not cross `/`:
903
+ * `*.md` matches `README.md` but not `docs/guide.md`.
904
+ *
905
+ * Do NOT list paths whose changes really do affect projects, such as
906
+ * bundler-inlined shared source or the root `tsconfig.json`: an edit
907
+ * there would then run nothing.
908
+ * @example ["api-snapshots/**", "plans/**", "*.md"]
909
+ */
910
+ affectedIgnore?: string[];
890
911
  /** AI analysis configuration */
891
912
  ai?: {
892
913
  /** Cache TTL in milliseconds. Overrides default (1h / 30min for security). */
@@ -913,6 +934,13 @@ interface VisConfig {
913
934
  * renders the generated CODEOWNERS file.
914
935
  */
915
936
  codeowners?: CodeownersConfig;
937
+ /**
938
+ * Composer packages as task projects. Off by default: a `composer.json` in a
939
+ * subdirectory gets validate and, when its scripts define them, test and lint targets.
940
+ */
941
+ composer?: {
942
+ discover?: boolean;
943
+ };
916
944
  /**
917
945
  * Project dependency constraints.
918
946
  * Enforced after building the project graph, before running tasks.
@@ -984,6 +1012,14 @@ interface VisConfig {
984
1012
  */
985
1013
  templates?: Record<string, string>;
986
1014
  };
1015
+ /**
1016
+ * Dart pub workspace members as task projects. Off by default: each member listed
1017
+ * under the root `pubspec.yaml`'s `workspace:` gets analyze, test and format-check
1018
+ * targets only when this is set.
1019
+ */
1020
+ dart?: {
1021
+ discover?: boolean;
1022
+ };
987
1023
  /**
988
1024
  * Default base branch used by `vis affected`, `vis ci`, and `vis run --affected`
989
1025
  * when no explicit `--base` is passed and no CI smart-resolver fires.
@@ -1075,6 +1111,15 @@ interface VisConfig {
1075
1111
  */
1076
1112
  order?: FmtAdapterId[];
1077
1113
  };
1114
+ /**
1115
+ * Gems as task projects. Off by default: each `*.gemspec` directory (except `vendor`,
1116
+ * `node_modules` and `.bundle`) gets build, test and lint targets when this is set. The
1117
+ * root directory is not a task project. POSIX only: the inferred commands are not verified
1118
+ * on Windows.
1119
+ */
1120
+ gem?: {
1121
+ discover?: boolean;
1122
+ };
1078
1123
  /**
1079
1124
  * Configuration for the `vis generate` in-repo scaffolding command.
1080
1125
  * Points at additional template directories beyond the defaults
@@ -1106,6 +1151,28 @@ interface VisConfig {
1106
1151
  */
1107
1152
  templates?: string[];
1108
1153
  };
1154
+ /**
1155
+ * Go modules (the `use` entries of `go.work`) as task projects. Off by default.
1156
+ * The root module is not a task project.
1157
+ */
1158
+ go?: {
1159
+ discover?: boolean;
1160
+ };
1161
+ /**
1162
+ * Gradle projects as task projects. Off by default: a `settings.gradle(.kts)`
1163
+ * with a build script for each module gets build and test targets only when this is set.
1164
+ */
1165
+ gradle?: {
1166
+ discover?: boolean;
1167
+ };
1168
+ /**
1169
+ * Hex apps as task projects. Off by default: each `&lt;apps_path>/*` app of an umbrella
1170
+ * `mix.exs` gets build, test and format-check targets when this is set. The root project
1171
+ * is not a task project. POSIX only: the inferred commands are not verified on Windows.
1172
+ */
1173
+ hex?: {
1174
+ discover?: boolean;
1175
+ };
1109
1176
  /**
1110
1177
  * Auto-create targets from detected config files (Project Crystal-style).
1111
1178
  * Detectors run by default; set `false` to disable them entirely, or use
@@ -1272,6 +1339,13 @@ interface VisConfig {
1272
1339
  */
1273
1340
  order?: LintAdapterId[];
1274
1341
  };
1342
+ /**
1343
+ * Maven modules as task projects. Off by default: a directory with a
1344
+ * `pom.xml` (and a project-root `artifactId`) gets build and test targets only when this is set.
1345
+ */
1346
+ maven?: {
1347
+ discover?: boolean;
1348
+ };
1275
1349
  /**
1276
1350
  * `vis-mcp` promotion notice shown after successful commands when an
1277
1351
  * AI CLI (Claude Code, Cursor, Windsurf, Continue, Zed, Cline) is
@@ -1298,6 +1372,14 @@ interface VisConfig {
1298
1372
  * to task-runner's `namedInputs` but configurable from the vis config.
1299
1373
  */
1300
1374
  namedInputs?: NamedInputs;
1375
+ /**
1376
+ * NuGet projects as task projects. Off by default: each directory with one `*.csproj` or
1377
+ * `*.fsproj` (outside `bin`, `obj` and `node_modules`) gets build, test and format:check
1378
+ * targets when this is set. POSIX only: the inferred commands are not verified on Windows.
1379
+ */
1380
+ nuget?: {
1381
+ discover?: boolean;
1382
+ };
1301
1383
  /** Package override mappings applied during migration (e.g., `{ "lodash": "lodash-es" }`) */
1302
1384
  overrides?: Record<string, string>;
1303
1385
  /**
@@ -1607,6 +1689,13 @@ interface VisConfig {
1607
1689
  */
1608
1690
  lockfile?: boolean;
1609
1691
  };
1692
+ /**
1693
+ * Python projects as task projects. Off by default: a directory with a
1694
+ * `pyproject.toml` (and `[project]`) gets an inferred build target only when this is set.
1695
+ */
1696
+ python?: {
1697
+ discover?: boolean;
1698
+ };
1610
1699
  /**
1611
1700
  * Configuration for the `vis release` subsystem. Controls change-file
1612
1701
  * authoring, version computation, channel routing, publish behavior,
@@ -1677,6 +1766,19 @@ interface VisConfig {
1677
1766
  * cross-runtime multi-tool (see `rfc/design-runtime-multitool.md`).
1678
1767
  */
1679
1768
  runtime?: RuntimeId;
1769
+ /**
1770
+ * Options for `vis sbom`. `ecosystems` opts in ecosystems that the BOM otherwise leaves out:
1771
+ * Maven, Gradle, Hex, Go, Dart, Swift, NuGet and Zig. An ecosystem is also included when its
1772
+ * discover key (`maven.discover`, `go.discover`, ...) is on. Presence of a lock file or manifest
1773
+ * alone does not include it; `vis sbom` reports such ecosystems on stderr instead.
1774
+ * @example
1775
+ * ```
1776
+ * sbom: { ecosystems: ["go", "zig"] }
1777
+ * ```
1778
+ */
1779
+ sbom?: {
1780
+ ecosystems?: ("dart" | "go" | "gradle" | "hex" | "maven" | "nuget" | "swift" | "zig")[];
1781
+ };
1680
1782
  /**
1681
1783
  * Cascading scoped-task blocks. Each block may narrow its tasks to a
1682
1784
  * subset of projects via `match`. Blocks are evaluated in order; later
@@ -2503,6 +2605,13 @@ interface VisConfig {
2503
2605
  * @default false
2504
2606
  */
2505
2607
  strictEnv?: boolean;
2608
+ /**
2609
+ * Swift packages (a `Package.swift` directory under the root) as task projects.
2610
+ * Off by default. Commands are `swift build`, `swift test`, and a `swift-format lint --strict` check.
2611
+ */
2612
+ swift?: {
2613
+ discover?: boolean;
2614
+ };
2506
2615
  /**
2507
2616
  * Named bundles of target dependencies, referenceable from any task's
2508
2617
  * `dependsOn`. `dependsOn: [{ group: "lint" }]` expands to every entry
@@ -2642,6 +2751,14 @@ interface VisConfig {
2642
2751
  * @example ">=1.0.0"
2643
2752
  */
2644
2753
  versionConstraint?: string;
2754
+ /**
2755
+ * Zig packages as task projects. Off by default: the workspace root's
2756
+ * `build.zig.zon` and its in-workspace `.path` dependencies get build, test and
2757
+ * format-check targets only when this is set. The root itself is not a task project.
2758
+ */
2759
+ zig?: {
2760
+ discover?: boolean;
2761
+ };
2645
2762
  }
2646
2763
  /**
2647
2764
  * @since 1.0.0
@@ -1,4 +1,4 @@
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(`
1
+ import{createRequire as I}from"node:module";import{L as x,m as K,T as O}from"../packem_shared/target-merge-DVJl-7Qz.js";import{v as _,e as a,m as C}from"../packem_shared/index-BzhrR_iC.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-C-_5cgwu.js";import{h as m}from"../packem_shared/writeFileSync-DJoHk3Ks-BPRoepNw.js";import{p as S}from"../packem_shared/readJsonSync-CbryXYxN-EWl7_7KX.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
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
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:
@@ -1,2 +1,2 @@
1
- import{b as f,F as s,J as c}from"../packem_shared/index.server-sXNQYpsl.js";import{p as r}from"./cli-main.js";import{g as u}from"../packem_shared/osv-bloom-JYIWcH3F.js";const a=t=>{if(!t)return"never";const i=Date.parse(t);if(Number.isNaN(i))return t;const e=Date.now()-i;if(e<0)return t;const n=Math.floor(e/6e4);if(n<1)return"just now";if(n<60)return`${n}m ago`;const o=Math.floor(n/60);return o<24?`${o}h ago`:`${Math.floor(o/24)}d ago`},m=t=>t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`,l=async({options:t,workspaceRoot:i})=>{if(!i)throw new Error("Could not determine workspace root. Run this command inside a workspace.");const e=await u(i,t.cacheDir);if(t.format==="json"){process.stdout.write(`${JSON.stringify(e,void 0,2)}
1
+ import{b as f,F as s,J as c}from"../packem_shared/index.server-sXNQYpsl.js";import{p as r}from"./cli-main.js";import{g as u}from"../packem_shared/osv-bloom-BCAX5ARR.js";const a=t=>{if(!t)return"never";const i=Date.parse(t);if(Number.isNaN(i))return t;const e=Date.now()-i;if(e<0)return t;const n=Math.floor(e/6e4);if(n<1)return"just now";if(n<60)return`${n}m ago`;const o=Math.floor(n/60);return o<24?`${o}h ago`:`${Math.floor(o/24)}d ago`},m=t=>t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`,l=async({options:t,workspaceRoot:i})=>{if(!i)throw new Error("Could not determine workspace root. Run this command inside a workspace.");const e=await u(i,t.cacheDir);if(t.format==="json"){process.stdout.write(`${JSON.stringify(e,void 0,2)}
2
2
  `);return}if(r.info(`Cache: ${e.cacheDir}`),!e.present){r.warn(`No osv-bloom filter yet. Run ${f("vis advisories bloom sync")} to populate.`);return}if(e.manifest){const{manifest:o}=e;r.info(`Built: ${o.builtAtRfc3339} (${a(o.builtAtRfc3339)})`),r.info(`Fetch: ${e.fetchedAtIso??s("—")} (${a(e.fetchedAtIso)})`),r.info(`Filter: ${c(m(o.bloomByteLen))} m=${o.bloomMBits.toLocaleString()} bits k=${String(o.bloomKHashes)}`),r.info(`Set: ${o.entryCount.toLocaleString()} entries from ${o.advisoryCount.toLocaleString()} advisories (target FPR ${o.targetFpr})`),r.info(s(`Digest: ${o.setDigestSha256}`))}else r.warn("filter.bin present but manifest.json missing — `vis advisories bloom sync` will rewrite the cache.")},g=l;export{g as advisoriesBloomStatusExecute};
@@ -1,2 +1,2 @@
1
- import{F as f}from"../packem_shared/index.server-sXNQYpsl.js";import{p as i}from"./cli-main.js";import{s as d}from"../packem_shared/scan-progress-DRIGQRMr.js";import{D as p,s as D}from"../packem_shared/osv-bloom-JYIWcH3F.js";const h=o=>o?.security?.audit?.advisories?.bloom??{},u=o=>o>=1e3?`${(o/1e3).toFixed(1)}s`:`${Math.round(o)}ms`,$=o=>o<1024?`${o} B`:o<1024*1024?`${(o/1024).toFixed(1)} KB`:`${(o/(1024*1024)).toFixed(1)} MB`,b=async({options:o,visConfig:m,workspaceRoot:n})=>{if(!n)throw new Error("Could not determine workspace root. Run this command inside a workspace.");const a=o.format==="json",c=h(m),l=o.source??c.source??p,r=d([{id:"bloom",label:"Sync osv-bloom prefilter"}],{live:!a});let e,t;try{r.start("bloom");const s=Date.now();e=await D({allowedHosts:c.allowedHosts,cacheDir:o.cacheDir,force:!!o.force,source:l,workspaceRoot:n}),e.upToDate?r.finish("bloom","ok",`up to date · ${u(Date.now()-s)}`):r.finish("bloom","ok",`${e.manifest.entryCount.toLocaleString()} entries · ${$(e.bytesOnDisk)} · ${u(e.durationMs)}`)}catch(s){t=s instanceof Error?s.message:String(s),r.finish("bloom","error",t)}finally{r.stop()}a?process.stdout.write(`${JSON.stringify({bytesOnDisk:e?.bytesOnDisk??0,cacheDir:e?.cacheDir??null,durationMs:e?.durationMs??0,error:t??null,manifest:e?.manifest??null,source:l,upToDate:e?.upToDate??!1},void 0,2)}
1
+ import{F as f}from"../packem_shared/index.server-sXNQYpsl.js";import{p as i}from"./cli-main.js";import{s as d}from"../packem_shared/scan-progress-C_zaZjyY.js";import{D as p,s as D}from"../packem_shared/osv-bloom-BCAX5ARR.js";const h=o=>o?.security?.audit?.advisories?.bloom??{},u=o=>o>=1e3?`${(o/1e3).toFixed(1)}s`:`${Math.round(o)}ms`,$=o=>o<1024?`${o} B`:o<1024*1024?`${(o/1024).toFixed(1)} KB`:`${(o/(1024*1024)).toFixed(1)} MB`,b=async({options:o,visConfig:m,workspaceRoot:n})=>{if(!n)throw new Error("Could not determine workspace root. Run this command inside a workspace.");const a=o.format==="json",c=h(m),l=o.source??c.source??p,r=d([{id:"bloom",label:"Sync osv-bloom prefilter"}],{live:!a});let e,t;try{r.start("bloom");const s=Date.now();e=await D({allowedHosts:c.allowedHosts,cacheDir:o.cacheDir,force:!!o.force,source:l,workspaceRoot:n}),e.upToDate?r.finish("bloom","ok",`up to date · ${u(Date.now()-s)}`):r.finish("bloom","ok",`${e.manifest.entryCount.toLocaleString()} entries · ${$(e.bytesOnDisk)} · ${u(e.durationMs)}`)}catch(s){t=s instanceof Error?s.message:String(s),r.finish("bloom","error",t)}finally{r.stop()}a?process.stdout.write(`${JSON.stringify({bytesOnDisk:e?.bytesOnDisk??0,cacheDir:e?.cacheDir??null,durationMs:e?.durationMs??0,error:t??null,manifest:e?.manifest??null,source:l,upToDate:e?.upToDate??!1},void 0,2)}
2
2
  `):e&&(i.info(f(`Cache: ${e.cacheDir}`)),i.info(f(`Built: ${e.manifest.builtAtRfc3339}`)),t||i.success(e.upToDate?"osv-bloom prefilter up to date.":"osv-bloom prefilter synced.")),t&&(process.exitCode=1)},g=b;export{g as advisoriesBloomSyncExecute};
@@ -0,0 +1,3 @@
1
+ import{createRequire as S}from"node:module";import{s as P}from"../packem_shared/index-B4AjSxHU.js";import{VisReleaseError as R}from"../packem_shared/VisReleaseError-DZtgcKf8.js";import{e as b,i as j,f as L,s as F,g as x}from"./index2.js";let O;const q=a=>(O??=S(import.meta.url))(a),_=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,M=a=>{if(typeof _<"u"&&_.versions&&_.versions.node){const[n,s]=_.versions.node.split(".").map(Number);if(n>22||n===22&&s>=3||n===20&&s>=16)return _.getBuiltinModule(a)}return q(a)},{readFile:B}=M("node:fs/promises"),{dirname:$,join:D,resolve:E}=M("node:path"),G=new Set(["package"]),K=new Set(["workspace.package"]),y=new Set(["build-dependencies","dependencies","dev-dependencies"]),V=async(a,n)=>a.get(n)??B(n,"utf8"),I=async(a,n,s)=>{const o=x(n);let i=x(a);for(;;){const d=D(i,"Cargo.toml"),r=await V(s,d).catch(()=>{});if(r!==void 0&&typeof(await b(r,d)).workspace?.package?.version=="string")return d;if(i===o)return;const u=$(i);if(u===i)return;i=u}},W=(a,n)=>{const s=/^([\^~=])?\s*(.+)$/.exec(a.trim());if(!s)return;const o=s[1]??"",i=s[2];if(i.includes("*"))return;const d=o===""?`^${i}`:`${o}${i}`;if(P.validRange(d)&&!P.satisfies(n,d))return`${o}${n}`},T=a=>{const n=a.split(".").map(d=>d.trim()),s=n[n.length-1]??"",o=n[0]==="target"||n[0]==="workspace"||n.length===1||y.has(n[0]??"");if(y.has(s)&&o)return{kind:"table"};const i=n[n.length-2]??"";return y.has(i)&&(n[0]==="target"||n[0]==="workspace"||n.length===2)?{key:s,kind:"dep"}:{kind:"none"}},C=/(version\s*=\s*)(["'])([^"']*)\2/,H=(a,n,s)=>{const o=a.split(`
2
+ `),i=[];let d=!1,r={kind:"none"};const u=(l,f,v,p)=>{if(f===void 0)return;if(f.includes(",")){i.push(`cargo-deps: ${p} has a compound requirement "${f}" in ${n}; left unchanged.`);return}const e=W(f,v);e!==void 0&&(o[l]=o[l].replace(C,(t,c,h)=>`${c}${h}${e}${h}`),d=!0)},w=()=>{if(r.kind!=="dep"||r.path===void 0||r.versionLine===void 0||r.version===void 0)return;const l=s.get(E(n,r.path));l!==void 0&&u(r.versionLine,r.version,l,r.key)};for(const[l,f]of o.entries()){const v=/^\s*\[\[?\s*([^\]]+?)\s*\]\]?\s*(?:#.*)?$/.exec(f);if(v){w(),r=T(v[1].replaceAll(/\s+/g,""));continue}if(r.kind==="table"){const p=/^\s*([^=\s]+)\s*=\s*\{(.*)\}\s*$/.exec(f);if(!p)continue;const e=/path\s*=\s*"([^"]*)"/.exec(p[2])?.[1],t=C.exec(p[2])?.[3];if(e===void 0||t===void 0)continue;const c=s.get(E(n,e));c!==void 0&&u(l,t,c,p[1]);continue}if(r.kind==="dep"){const p=/^\s*path\s*=\s*"([^"]*)"/.exec(f)?.[1];if(p!==void 0){r.path=p;continue}const e=C.exec(f);e&&(r.versionLine=l,r.version=e.at(3))}}return w(),d?{content:o.join(`
3
+ `),warnings:i}:{warnings:i}},X=async a=>{const{crateManifests:n,cwd:s,pending:o,releases:i,rewriteDependents:d=!0,scanManifests:r}=a,u=new Set,w=[],l=new Map,f=new Map;for(const e of i)for(const t of e.manifestPaths)l.set($(t),e.newVersion),f.set(t,e.newVersion);const v=new Map;for(const e of i){if(e.ecosystem!=="cargo")continue;const t=e.manifestPaths[0];if(t===void 0)continue;const c=await V(o,t),h=await b(c,t);if(!j(h.package?.version)){const g=L(c,e.newVersion,G);g.content!==void 0&&(o.set(t,g.content),u.add(t));continue}const m=await I($(t),s,o);if(m===void 0)throw new R({code:"CONFIG_INVALID",file:t,message:`${t} inherits its version, but no ancestor Cargo.toml declares [workspace.package].version.`});const k=v.get(m)??{members:[],version:e.newVersion};k.members.push(t),v.set(m,k)}for(const[e,t]of v){const c=[];for(const g of n){const A=await V(o,g).catch(()=>{});if(A===void 0)continue;const N=await b(A,g);j(N.package?.version)&&await I($(g),s,o)===e&&c.push(g)}const h=c.filter(g=>f.get(g)!==t.version);if(h.length>0)throw new R({code:"CONFIG_INVALID",file:e,message:`Crates inherit [workspace.package].version from ${e}, so they must release together at ${t.version}. Not released at that version: ${h.join(", ")}.`});const m=await V(o,e),k=L(m,t.version,K);k.content!==void 0&&(o.set(e,k.content),u.add(e))}for(const e of d?r:[]){const t=await V(o,e).catch(()=>{});if(t===void 0)continue;const c=H(t,$(e),l);w.push(...c.warnings),c.content!==void 0&&(o.set(e,c.content),u.add(e))}const p=i.flatMap(e=>e.manifestPaths.map(t=>({manifestPath:t,newVersion:e.newVersion})));if(p.length>0){const e=await F({entries:p,pending:o,workspaceRoot:s});w.push(...e.warnings);for(const t of e.writes)u.add(t.path)}return{touched:u,warnings:w}};export{W as nextRequirement,X as planCargoWorkspace,H as rewriteCargoRequirements};