@visulima/vis 4.0.1 → 4.1.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.
- package/CHANGELOG.md +46 -0
- package/LICENSE.md +403 -921
- package/README.md +2 -2
- package/dashboard/dist/index.html +12 -12
- package/dist/bin.js +1 -1
- package/dist/binx.js +1 -1
- package/dist/packem_chunks/bloom-status.js +1 -1
- package/dist/packem_chunks/bloom-sync.js +1 -1
- package/dist/packem_chunks/catalog.js +34 -34
- package/dist/packem_chunks/cli-exec.js +1 -1
- package/dist/packem_chunks/cli-main.js +157 -157
- package/dist/packem_chunks/doctor-probe.js +1 -1
- package/dist/packem_chunks/fix.js +1 -1
- package/dist/packem_chunks/git.js +4 -3
- package/dist/packem_chunks/handler13.js +1 -1
- package/dist/packem_chunks/handler14.js +1 -1
- package/dist/packem_chunks/handler15.js +1 -1
- package/dist/packem_chunks/handler2.js +1 -1
- package/dist/packem_chunks/handler20.js +1 -1
- package/dist/packem_chunks/handler23.js +1 -1
- package/dist/packem_chunks/handler24.js +1 -1
- package/dist/packem_chunks/handler26.js +1 -1
- package/dist/packem_chunks/handler28.js +1 -1
- package/dist/packem_chunks/handler3.js +1 -1
- package/dist/packem_chunks/handler39.js +6 -6
- package/dist/packem_chunks/handler40.js +1 -75
- package/dist/packem_chunks/handler50.js +1 -1
- package/dist/packem_chunks/handler53.js +1 -1
- package/dist/packem_chunks/handler54.js +1 -1
- package/dist/packem_chunks/handler56.js +6 -6
- package/dist/packem_chunks/handler59.js +73 -9
- package/dist/packem_chunks/handler6.js +1 -1
- package/dist/packem_chunks/handler60.js +11 -3
- package/dist/packem_chunks/handler61.js +3 -22
- package/dist/packem_chunks/handler62.js +21 -60
- package/dist/packem_chunks/handler63.js +61 -3
- package/dist/packem_chunks/handler64.js +3 -6
- package/dist/packem_chunks/handler65.js +6 -9
- package/dist/packem_chunks/handler66.js +1 -1
- package/dist/packem_chunks/handler67.js +1 -1
- package/dist/packem_chunks/handler68.js +1 -1
- package/dist/packem_chunks/handler69.js +1 -1
- package/dist/packem_chunks/handler70.js +1 -1
- package/dist/packem_chunks/handler72.js +1 -1
- package/dist/packem_chunks/handler73.js +1 -1
- package/dist/packem_chunks/handler74.js +1 -1
- package/dist/packem_chunks/handler75.js +1 -1
- package/dist/packem_chunks/handler76.js +1 -1
- package/dist/packem_chunks/handler78.js +1 -1
- package/dist/packem_chunks/heal.js +1 -1
- package/dist/packem_chunks/help-command.js +5 -5
- package/dist/packem_chunks/index6.js +7 -21
- package/dist/packem_chunks/index7.js +47 -47
- package/dist/packem_chunks/prompts.js +1 -1
- package/dist/packem_chunks/resolveFormatter.js +7 -5
- package/dist/packem_chunks/root-handler.js +1 -0
- package/dist/packem_chunks/shell-runner.js +1 -1
- package/dist/packem_chunks/status.js +1 -1
- package/dist/packem_chunks/sync.js +1 -1
- package/dist/packem_chunks/version-resolver.js +3 -2
- package/dist/packem_shared/DEFAULT_BREAKING_SECTION-DUAcKVLD.js +1 -0
- package/dist/packem_shared/DEFAULT_CONVENTIONAL_HEADING-D7oNGUcP.js +1 -0
- package/dist/packem_shared/{affected-selection-DLrq50Mz.js → affected-selection-DP4GM66N.js} +1 -1
- package/dist/packem_shared/{api.d-BPftyU9r.d.ts → api.d-C10vHKJZ.d.ts} +1 -1
- package/dist/packem_shared/{bin-As0Wq5ZN.js → bin-BO1M68aW.js} +1 -1
- package/dist/packem_shared/buildCompareUrl-BLaukjgu.js +1 -0
- package/dist/packem_shared/conventional-CGiOOEq1.js +4 -0
- package/dist/packem_shared/{cyclonedx-B1vzerwP.js → cyclonedx-CX2fFvDi.js} +1 -1
- package/dist/packem_shared/docker-Dy-X_BuM.js +59 -0
- package/dist/packem_shared/hasBulletMarker-BX2KwzI5.js +1 -0
- package/dist/packem_shared/{index-CcVv0V1y.js → index-rcfHhvVo.js} +1 -1
- package/dist/packem_shared/index.server-sXNQYpsl.js +2 -0
- package/dist/packem_shared/main-CgDAlZkm.js +1 -0
- package/dist/packem_shared/{package-version-BFsJ8iyZ.js → package-version-BO37_qsn.js} +1 -1
- package/dist/packem_shared/{project-name-filter-DdXd3P3a.js → project-name-filter-C_mppI1h.js} +1 -1
- package/dist/packem_shared/release-heading-DRpkhETz.js +1 -0
- package/dist/packem_shared/{resolve-explicit-ZZEPWdpP.js → resolve-explicit-CsTmALmE.js} +1 -1
- package/dist/packem_shared/run-D-uVGHQ4.js +10 -0
- package/dist/packem_shared/{s1ngularity-R-zLjQjp.js → s1ngularity-BRk_GMUj.js} +1 -1
- package/dist/packem_shared/{scan-progress-5uTRdC1G.js → scan-progress-DRIGQRMr.js} +1 -1
- package/dist/packem_shared/{typosquats-Cdsnf6aN.js → typosquats-CSkIFgF5.js} +1 -1
- package/dist/packem_shared/{vis-user-error-DJvfOpBX.js → vis-user-error-YIyfYNBK.js} +1 -1
- package/dist/release/core/changelog/index.d.ts +274 -31
- package/dist/release/core/changelog/index.js +1 -1
- package/dist/release/plugin-sdk.d.ts +2 -2
- package/dist/release/types.d.ts +44 -2
- package/index.js +52 -52
- package/package.json +11 -11
- package/schemas/vis-config.schema.json +19 -1
- package/schemas/vis-release-config.schema.json +19 -1
- package/dist/packem_shared/docker-Bex05Qcn.js +0 -59
- package/dist/packem_shared/index.server-BAjDJSEu.js +0 -2
- package/dist/packem_shared/main-BP-w-K-6.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{createRequire as p}from"node:module";import{F as i}from"../packem_shared/index.server-
|
|
1
|
+
import{createRequire as p}from"node:module";import{F as i}from"../packem_shared/index.server-sXNQYpsl.js";let m;const d=r=>(m??=p(import.meta.url))(r),c=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,w=r=>{if(typeof c<"u"&&c.versions&&c.versions.node){const[e,t]=c.versions.node.split(".").map(Number);if(e>22||e===22&&t>=3||e===20&&t>=16)return c.getBuiltinModule(r)}return d(r)},{createInterface:a}=w("node:readline"),l=(r,e)=>new Promise(t=>{r.question(e,n=>{t(n.trim())})}),y=async(r,e=!0)=>{const t=a({input:process.stdin,output:process.stdout});try{const s=await l(t,`${r} ${i(e?"[Y/n]":"[y/N]")} `);return s===""?e:/^y(?:es)?$/i.test(s)}finally{t.close()}},$=async(r,e="")=>{const t=a({input:process.stdin,output:process.stdout});try{const n=e?` ${i(`(${e})`)}`:"",s=await l(t,`${r}${n} `);return s===""?e:s}finally{t.close()}},_=async(r,e)=>{if(e.length===0)throw new Error("selectPrompt called with no options.");const t=a({input:process.stdin,output:process.stdout});try{process.stdout.write(`${r}
|
|
2
2
|
`);for(const[n,s]of e.entries())process.stdout.write(` ${n+1}) ${s.label}
|
|
3
3
|
`);for(;;){const n=await l(t,i(` [1-${e.length}] `)),s=Number.parseInt(n,10);if(!Number.isNaN(s)&&s>=1&&s<=e.length)return e[s-1].value;process.stdout.write(i(` Please enter a number between 1 and ${e.length}.
|
|
4
4
|
`))}}finally{t.close()}},b=async(r,e)=>{if(e.length===0)throw new Error("multiSelectPrompt called with no options.");const t=a({input:process.stdin,output:process.stdout});try{process.stdout.write(`${r}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import{createRequire as
|
|
1
|
+
import{createRequire as U}from"node:module";import{d as M,l as q,s as z,c as S}from"../packem_shared/conventional-CGiOOEq1.js";import{b as R,r as V,a as H}from"../packem_shared/release-heading-DRpkhETz.js";import{renderGroupedEntries as F,withBullet as k,DEFAULT_CONVENTIONAL_TYPES as K}from"../packem_shared/DEFAULT_BREAKING_SECTION-DUAcKVLD.js";import{createShellRunner as W}from"./shell-runner.js";let D;const G=e=>(D??=U(import.meta.url))(e),$=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,j=e=>{if(typeof $<"u"&&$.versions&&$.versions.node){const[o,n]=$.versions.node.split(".").map(Number);if(o>22||o===22&&n>=3||o===20&&n>=16)return $.getBuiltinModule(e)}return G(e)},{pathToFileURL:O}=j("node:url"),T="breaking",X="Miscellaneous",L="-",Y=[{section:"Breaking Changes",type:T},{section:"Features",type:"feat"},{section:"Bug Fixes",type:"fix"},{section:"Performance Improvements",type:"perf"},{section:"Reverts",type:"revert"},{section:"Documentation",type:"docs"},{hidden:!0,section:"Styles",type:"style"},{hidden:!0,section:"Code Refactoring",type:"refactor"},{hidden:!0,section:"Tests",type:"test"},{hidden:!0,section:"Build System",type:"build"},{hidden:!0,section:"Continuous Integration",type:"ci"},{hidden:!0,section:"Miscellaneous Chores",type:"chore"}],J=e=>`(${e.startsWith("@")?e:`@${e}`})`,Q=(e,o)=>{for(const n of o)e.push(`${k(n.line,L)}${n.suffix??""}`)},P=(e={})=>o=>{const{changeFiles:n,date:i,release:t,target:p}=o,c=[];if(p!=="github-release")if(e.heading===void 0)c.push(`## ${t.newVersion}`),c.push(`<sub>${i}</sub>`),c.push("");else{const s=R({compareUrlPrefix:e.compareUrlPrefix,name:t.name,newVersion:t.newVersion,oldVersion:t.oldVersion,repo:e.repo,tagPattern:e.tagPattern});c.push(V(e.heading,{compareUrl:s,date:i,name:t.name,version:t.newVersion}),"")}const u=[];for(const s of n){const r=s.body.trim();if(!r)continue;const d=e.authorCredit?s.meta?.author:void 0,l=d?` ${J(d)}`:"";for(const v of r.split(/\r?\n/)){const m=v.trim();m&&u.push({line:m,suffix:l})}}const a=e.sections===void 0?void 0:e.sections.length===0?Y:e.sections;if(a?c.push(...F(u,{breakingSection:!1,breakingType:T,bullet:L,entryStyle:"verbatim",types:a,uncategorizedSection:X})):Q(c,u),t.isCascadeBump||t.isGroupBump)for(const s of t.sources){const r=t.isCascadeBump?"Cascade from":"Group bump with";c.push(`- ${r} ${s.name}@${s.newVersion}`)}else if(t.isDependencyBump&&n.length===0)for(const s of t.sources)s.newVersion===""?c.push(`- Removed dependency ${s.name}`):c.push(`- Updated dependency ${s.name}@${s.newVersion}`);return c.join(`
|
|
2
2
|
`).replaceAll(/\n{3,}/g,`
|
|
3
3
|
|
|
4
|
-
`).trim()},
|
|
5
|
-
`)[0]?.trim()||void 0},
|
|
6
|
-
`)
|
|
4
|
+
`).trim()},Z=P(),ee={includeCommitLink:!0,internalAuthors:[],thankContributors:!0},te=async(e,o,n)=>{const i=await e.run("git",["log","--diff-filter=A","--pretty=format:%aN%n%aE","--",n],{cwd:o,silent:!0});return i.exitCode!==0?void 0:i.stdout.split(`
|
|
5
|
+
`)[0]?.trim()||void 0},_=(e={})=>{const o={...ee,...e},n=e.runner??W();let i;return async p=>{const{changeFiles:c,date:u,release:a,target:s}=p,r=[],d=[],l=new Set,v=process.cwd();i||(i=M(e.repo,n,v));const m=await i,C=m.slug===void 0?void 0:H(m.provider,m.slug);if(s!=="github-release")if(e.heading===void 0)r.push(`## ${a.newVersion}`),r.push(`<sub>${u}</sub>`),r.push("");else{const f=R({name:a.name,newVersion:a.newVersion,oldVersion:a.oldVersion,provider:m.provider,repo:m.slug,tagPattern:e.tagPattern});r.push(V(e.heading,{compareUrl:f,date:u,name:a.name,version:a.newVersion}),"")}for(const f of c){const b=f.body.trim(),h=f.meta??{},g=h.author??await te(n,v,f.path);g&&o.thankContributors&&!o.internalAuthors.includes(g.replace(/^@/,""))&&l.add(g.startsWith("@")?g:`@${g}`);const y=[];if(h.pr&&C?y.push(`[#${h.pr}](${C.pullRequest(String(h.pr))})`):h.pr&&y.push(`#${h.pr}`),h.commit&&o.includeCommitLink&&C){const w=h.commit.slice(0,7);y.push(`[\`${w}\`](${C.commit(h.commit)})`)}const N=y.length>0?` (${y.join(", ")})`:"";if(b)for(const w of b.split(/\r?\n/)){const A=w.trim();A&&d.push({line:q(A,m),suffix:N})}}if(e.types===void 0){for(const f of d)r.push(`${k(f.line,"-")}${f.suffix??""}`);if(a.isCascadeBump||a.isGroupBump)for(const f of a.sources){const b=a.isCascadeBump?"Cascade from":"Group bump with";r.push(`- ${b} ${f.name}@${f.newVersion}`)}else if(a.isDependencyBump&&c.length===0)for(const f of a.sources)f.newVersion===""?r.push(`- Removed dependency ${f.name}`):r.push(`- Updated dependency ${f.name}@${f.newVersion}`)}else d.push(...z(p)),r.push(...F(d,{breakingSection:e.breakingSection,types:e.types.length===0?K:e.types}));o.thankContributors&&l.size>0&&(r.push(""),r.push(`Thanks ${[...l].join(", ")}!`));const E=r.join(`
|
|
6
|
+
`);return e.types===void 0?E:E.replaceAll(/\n{3,}/g,`
|
|
7
|
+
|
|
8
|
+
`).trimEnd()}},I=["Added","Changed","Deprecated","Removed","Fixed","Security"],ne=e=>{const o=e.toLowerCase();return I.find(n=>n.toLowerCase()===o)},re={add:"Added",bugfix:"Fixed",change:"Changed",changed:"Changed",chore:"Changed",deprecate:"Deprecated",deprecated:"Deprecated",feat:"Added",feature:"Added",fix:"Fixed",perf:"Changed",refactor:"Changed",remove:"Removed",removed:"Removed",sec:"Security",security:"Security"},oe=/^\s*\[(added|changed|deprecated|removed|fixed|security)\]\s*:?\s*(.*)$/i,se=e=>e.replace(/^[-*]\s+/,"").trim(),ie=e=>{const o=/^([a-z]+)(?:\([^)]+\))?!?\s*:\s*(.*)$/i.exec(e.trim());if(!o)return;const n=o[1].toLowerCase(),i=re[n];if(i)return{rest:o[2].trim(),section:i}},ce=e=>e==="major"?"Changed":e==="minor"?"Added":"Fixed",x=(e,o)=>/\bBREAKING(?:\s+CHANGE)?\b/.test(e)||/^\s*[a-z]+(?:\([^)]+\))?!\s*:/i.test(e)||o==="major",ae=(e,o,n,i)=>{const t=se(e);if(!t)return;const p=oe.exec(t);if(p){const u=ne(p[1]);if(u){n[u].push(`- ${p[2].trim()}`);return}}const c=ie(t);if(c){x(t,o)&&i.push(`- ${c.rest||t}`),n[c.section].push(`- ${c.rest||t}`);return}x(t,o)&&i.push(`- ${t}`),n[ce(o)].push(`- ${t}`)},ue=(e,o,n,i,t)=>{if(o)return`${o}/compare/${i}...${t}`;if(e)return`https://github.com/${e}/compare/${i}...${t}`},B=(e={})=>o=>{const{changeFiles:n,date:i,release:t,target:p}=o,c={Added:[],Changed:[],Deprecated:[],Fixed:[],Removed:[],Security:[]},u=[],a=t.type;for(const r of n)for(const d of r.body.trim().split(/\r?\n/))d.trim()&&ae(d,a,c,u);if(t.isCascadeBump||t.isGroupBump)for(const r of t.sources){const d=t.isCascadeBump?"Cascade from":"Group bump with";c.Changed.push(`- ${d} \`${r.name}\`@${r.newVersion}`)}else if(t.isDependencyBump&&n.length===0)for(const r of t.sources)r.newVersion===""?c.Removed.push(`- Removed dependency \`${r.name}\``):c.Changed.push(`- Updated dependency \`${r.name}\`@${r.newVersion}`);const s=[];if(p!=="github-release"&&(s.push(`## [${t.newVersion}] - ${i}`),s.push("")),u.length>0){s.push("### ⚠ BREAKING CHANGES"),s.push("");for(const r of u)s.push(r);s.push("")}for(const r of I){const d=c[r];if(d.length!==0){s.push(`### ${r}`),s.push("");for(const l of d)s.push(l);s.push("")}}if(p!=="github-release"){const r=`${t.name}@${t.oldVersion}`,d=`${t.name}@${t.newVersion}`,l=ue(e.repo,e.compareUrlPrefix,t.name,r,d);l&&s.push(`[${t.newVersion}]: ${l}`)}return s.join(`
|
|
7
9
|
`).replaceAll(/\n{3,}/g,`
|
|
8
10
|
|
|
9
|
-
`).trimEnd()},
|
|
11
|
+
`).trimEnd()},he=async(e,o)=>{if(e===!1)return()=>"";if(e===void 0||e==="default")return Z;if(e==="github")return _();if(e==="keep-a-changelog"||e==="keepachangelog")return B();if(e==="conventional"||e==="conventionalcommits")return S();let n,i={};if(Array.isArray(e)?[n,i={}]=e:n=e,n==="default")return P(i);if(n==="github")return _(i);if(n==="keep-a-changelog"||n==="keepachangelog")return B(i);if(n==="conventional"||n==="conventionalcommits")return S(i);const t=n.startsWith(".")?`${o}/${n}`:n,p=O(t).href,{dynamicEsmImport:c}=await import("./dynamic-import.js"),u=await c(p),a=typeof u=="function"?u:u.default;if(typeof a!="function")throw new TypeError(`Custom changelog formatter at ${n} did not export a default function or a callable module.`);if(Array.isArray(e))try{const s=a(i);if(typeof s=="function")return s}catch{}return a};export{he as resolveFormatter};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const t=async e=>{const a=e.runtime.getCommands().get("help");if(typeof a?.execute!="function"){e.logger.info('Run "vis release <subcommand> --help" — for example "vis release status --help".');return}await a.execute({...e,argument:["release"],commandName:"help"})};export{t as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{x as i}from"../packem_shared/main-
|
|
1
|
+
import{x as i}from"../packem_shared/main-CgDAlZkm.js";import{redactTokens as s}from"./security.js";const f=()=>({run:async(o,t,r)=>{try{const e=await i(o,[...t],{nodeOptions:{cwd:r.cwd,env:{...process.env,COREPACK_ENABLE_DOWNLOAD_PROMPT:"0",...r.env},stdio:r.silent?["ignore","pipe","pipe"]:"inherit"},throwOnError:!1});return{exitCode:typeof e.exitCode=="number"?e.exitCode:-1,stderr:s(e.stderr??""),stdout:s(e.stdout??"")}}catch(e){return{exitCode:-1,stderr:s(e.message),stdout:""}}}}),m=()=>new a;class a{handlers=[];on(t,r,e){this.handlers.push({argsPrefix:r,command:t,respond:e})}async run(t,r,e){for(const n of this.handlers){if(n.command!==t||r.length<n.argsPrefix.length)continue;if(n.argsPrefix.every((d,c)=>d===r[c]))return n.respond(e.cwd)}return{exitCode:0,stderr:"",stdout:""}}}export{a as MockRunner,m as createMockRunner,f as createShellRunner};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{b as d,F as i,J as l}from"../packem_shared/index.server-
|
|
1
|
+
import{b as d,F as i,J as l}from"../packem_shared/index.server-sXNQYpsl.js";import{p as a}from"./cli-main.js";import{r as y,g}from"../packem_shared/advisories-0ScpWAHV.js";const h=n=>{if(n===0)return"0 B";const r=["B","KB","MB","GB"],o=Math.min(Math.floor(Math.log(n)/Math.log(1024)),r.length-1),s=n/1024**o;return`${s.toFixed(s<10&&o>0?1:0)} ${r[o]}`},v=n=>{if(!n)return"never";const r=Date.parse(n);if(Number.isNaN(r))return n;const o=Date.now()-r;if(o<0)return n;const s=Math.floor(o/6e4);if(s<1)return"just now";if(s<60)return`${s}m ago`;const t=Math.floor(s/60);return t<24?`${t}h ago`:`${Math.floor(t/24)}d ago`},$=async({logger:n,options:r,workspaceRoot:o})=>{if(!o)throw new Error("Could not determine workspace root. Run this command inside a workspace.");const s=r.db??y(o),t=await g(o,s);if(r.format==="json"){process.stdout.write(`${JSON.stringify({dbPath:s,ecosystems:t.ecosystems.map(e=>({advisoryCount:e.advisoryCount,lastSyncIso:e.lastSyncIso,manifestEtag:e.manifestEtag??null,name:e.name})),exists:t.exists,schemaVersion:t.schemaVersion,sizeBytes:t.sizeBytes},void 0,2)}
|
|
2
2
|
`);return}if(a.info(`DB: ${s}`),!t.exists){a.warn(`No advisory DB yet. Run ${d("vis advisories sync")} to populate.`);return}if(a.info(`Schema: v${t.schemaVersion} Size: ${h(t.sizeBytes)}`),t.ecosystems.length===0){a.warn("DB exists but contains no ecosystems. Run `vis advisories sync`.");return}a.info(""),a.info("Ecosystem Advisories Last sync ETag"),a.info(i("────────── ────────── ───────────────── ──────"));for(const e of t.ecosystems){const c=e.name.padEnd(10),u=e.advisoryCount.toLocaleString().padStart(10),m=`${e.lastSyncIso||"never"} (${v(e.lastSyncIso)})`.padEnd(19),f=e.manifestEtag??i("—");a.info(`${l(c)} ${u} ${m} ${f}`)}},E=$;export{E as advisoriesStatusExecute};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{F as p}from"../packem_shared/index.server-
|
|
1
|
+
import{F as p}from"../packem_shared/index.server-sXNQYpsl.js";import{p as c}from"./cli-main.js";import{s as v}from"../packem_shared/scan-progress-DRIGQRMr.js";import{D as $,s as D}from"../packem_shared/advisories-0ScpWAHV.js";const S=o=>o?.security?.audit?.advisories??{},w=o=>o?o.split(",").map(r=>r.trim()).filter(r=>r.length>0):["npm"],b=async({logger:o,options:r,visConfig:y,workspaceRoot:l})=>{if(!l)throw new Error("Could not determine workspace root. Run this command inside a workspace.");const d=r.format==="json",u=S(y),f=r.source??u.source??$,m=w(r.ecosystem),h=m.map(s=>({id:s,label:`Sync ${s} advisories`})),a=v(h,{live:!d}),i=[];try{for(const s of m){a.start(s);const e=Date.now();try{const t=await D({allowedHosts:u.allowedHosts,dbPath:r.db,ecosystem:s,force:!!r.force,source:f,workspaceRoot:l});i.push({ecosystem:s,result:t}),t.upToDate?a.finish(s,"ok",`up to date · ${g(Date.now()-e)}`):a.finish(s,"ok",`${t.advisoriesIngested.toLocaleString()} advisories · ${g(t.durationMs)}`)}catch(t){const n=t instanceof Error?t.message:String(t);i.push({ecosystem:s,error:n}),a.finish(s,"error",n)}}}finally{a.stop()}if(d){const s={ecosystems:i.map(e=>({advisoriesIngested:e.result?.advisoriesIngested??0,dbPath:e.result?.dbPath??null,durationMs:e.result?.durationMs??0,ecosystem:e.ecosystem,error:e.error??null,upToDate:e.result?.upToDate??!1})),source:f};process.stdout.write(`${JSON.stringify(s,void 0,2)}
|
|
2
2
|
`)}else{const s=i.filter(n=>n.error),e=i.filter(n=>n.result),t=e[0];t?.result?.dbPath&&c.info(p(`DB: ${t.result.dbPath}`)),s.length===0?c.success(`Synced ${e.length} ecosystem${e.length===1?"":"s"}.`):c.error(`${s.length} ecosystem${s.length===1?"":"s"} failed to sync.`)}i.some(s=>s.error)&&(process.exitCode=1)},g=o=>o>=1e3?`${(o/1e3).toFixed(1)}s`:`${Math.round(o)}ms`,C=b;export{C as advisoriesSyncExecute};
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import{a as h}from"../packem_shared/index-B4AjSxHU.js";import{b}from"./index2.js";import{r as
|
|
2
|
-
`).map(c=>c.trim()).filter(Boolean);if(d.length===0)return{fallbackReason:`no git tag matched pattern "${n}" for ${e.name}; falling back to manifest version ${e.version}. (Pass --first-release to bootstrap.)`,resolvedFrom:"disk",version:e.version};const f
|
|
1
|
+
import{a as h}from"../packem_shared/index-B4AjSxHU.js";import{b as R}from"./index2.js";import{r as y}from"./orchestrator.js";const P=e=>{let s=0;const o=[],t=()=>{if(s>=e)return;const n=o.shift();n&&(s+=1,n())};return async n=>new Promise((m,a)=>{const d=()=>{s-=1,t()},f=()=>{n().then(m,a).finally(d)};o.push(f),t()})},x=4,g=new Map,$=(e,s)=>{const o=d=>d.replaceAll(/[$()*+.?[\\\]^{|}]/g,String.raw`\$&`);let t="^",n=0;const m=/\{(name|unscopedName|version|major|minor|patch|date|channel)\}/g;let a;for(;(a=m.exec(e))!==null;){switch(t+=o(e.slice(n,a.index)),a[1]){case"name":{t+=o(s.name);break}case"unscopedName":{t+=o(s.name.replace(/^@[^/]+\//,""));break}case"version":{t+=String.raw`(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)`;break}default:t+="[^/]+"}n=a.index+a[0].length}return t+=`${o(e.slice(n))}$`,new RegExp(t)},p="{name}@{version}",w=(e,s)=>e.replaceAll(/\{(name|unscopedName|version|major|minor|patch|date|channel)\}/g,(o,t)=>t==="name"?s.name:t==="unscopedName"?s.name.replace(/^@[^/]+\//,""):"*"),C=async(e,s,o,t)=>{if(s==="disk")return{resolvedFrom:"disk",version:e.version};if(s==="registry"){const c=y(e,t.perPackageConfig??{}),r=await R(c).readPublishedVersion({pkg:e,pm:t.pm,workspaceConfig:t.workspaceConfig});return r&&h.valid(r)?{resolvedFrom:"registry",version:r}:{fallbackReason:r===void 0?`registry returned no version for ${e.name} (likely a 404 / not-yet-published); falling back to manifest version ${e.version}.`:`registry returned an invalid semver "${r}" for ${e.name}; falling back to manifest version ${e.version}.`,resolvedFrom:"disk",version:e.version}}const n=t.perPackageConfig?.releaseTagPattern??t.workspaceConfig?.releaseTagPattern??p,m=w(n,e),a=await t.runner.run("git",["tag","--list",m,"--sort=-v:refname"],{cwd:t.cwd,silent:!0});if(a.exitCode!==0)return{fallbackReason:`git tag --list ${m} failed (exit ${a.exitCode}); falling back to manifest version ${e.version}.`,resolvedFrom:"disk",version:e.version};const d=a.stdout.split(`
|
|
2
|
+
`).map(c=>c.trim()).filter(Boolean);if(d.length===0)return{fallbackReason:`no git tag matched pattern "${n}" for ${e.name}; falling back to manifest version ${e.version}. (Pass --first-release to bootstrap.)`,resolvedFrom:"disk",version:e.version};const f=$(n,e),i=[];for(const c of d){const u=f.exec(c);u?.[1]&&h.valid(u[1])&&i.push(u[1])}return i.length===0?{fallbackReason:`git tag pattern "${n}" matched tags but none yielded a valid semver for ${e.name}; falling back to manifest version ${e.version}.`,resolvedFrom:"disk",version:e.version}:(i.sort(h.rcompare),{resolvedFrom:"git-tag",version:i[0]})},A=(e,s,o)=>o?"disk":s?.currentVersionResolver??e?.currentVersionResolver??"disk",M=async(e,s,o,t,n)=>{const m=new Map,a=[],d=P(x),f=await Promise.all(e.map(async i=>d(async()=>{const c=t.get(i.name),u=A(o,c,n.firstRelease),r=n.skipRegistryLookup?"disk":u,l=`${i.name}@${r}@${i.version}`,b=g.get(l);if(b)return{mode:r,pkg:i,result:await b};const v=C(i,r,s,{...n,perPackageConfig:c,workspaceConfig:o});return g.set(l,v),v.catch(()=>{g.get(l)===v&&g.delete(l)}),{mode:r,pkg:i,result:await v}})));for(const{mode:i,pkg:c,result:u}of f)m.set(c.name,u.version),u.fallbackReason&&i!=="disk"&&a.push(`currentVersionResolver (${i}): ${u.fallbackReason}`);return{versions:m,warnings:a}},V=async e=>{const{cwd:s,packages:o,perPackageConfig:t,runner:n,workspaceConfig:m}=e,a=new Set,d=new Map;for(const r of o){const l=t?.get(r.name)?.releaseTagPattern??m?.releaseTagPattern??p;d.set(r.name,l),a.add(w(l,r))}const f=async r=>{const l=await n.run("git",["rev-list","--max-parents=0","HEAD"],{cwd:s,silent:!0}),v=(l.exitCode===0?l.stdout.split(`
|
|
3
|
+
`).map(k=>k.trim()).filter(Boolean):[]).at(-1);return v?{kind:"root-commit",reason:`${r}; the only remaining boundary is the repository root commit (${v.slice(0,7)}) — the whole history`,ref:v}:{kind:"unresolved",reason:`${r} and the repository root commit could not be resolved`}};if(a.size===0)return f("no workspace packages to derive a release tag pattern from");const i=await n.run("git",["describe","--tags","--abbrev=0",...[...a].flatMap(r=>["--match",r]),"HEAD"],{cwd:s,silent:!0}),c=i.exitCode===0?i.stdout.trim():"";return c?o.some(r=>{const l=$(d.get(r.name)??p,r).exec(c);return l?.[1]!==void 0&&h.valid(l[1])!==null})?{kind:"tag",reason:`resolved the last release boundary to tag "${c}"`,ref:c,tag:c}:f(`the nearest matching tag "${c}" did not parse as a release tag`):f("no git tag matching the configured releaseTagPattern is reachable from HEAD")};export{p as DEFAULT_RELEASE_TAG_PATTERN,x as REGISTRY_LOOKUP_CONCURRENCY,$ as compileReleaseTagRegex,w as releaseTagListGlob,C as resolveCurrentVersion,M as resolveCurrentVersionsForWorkspace,V as resolveLastReleaseRef,A as resolveModeForPackage};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{parseConventionalHeader as b,isBreakingChange as w,hasBulletMarker as v,stripBulletMarker as I}from"./hasBulletMarker-BX2KwzI5.js";const i="other",N="⚠ BREAKING CHANGES",S="Other Changes",m=[{section:"Features",type:"feat"},{section:"Features",type:"feature"},{section:"Bug Fixes",type:"fix"},{section:"Performance Improvements",type:"perf"},{section:"Reverts",type:"revert"},{hidden:!0,section:"Documentation",type:"docs"},{hidden:!0,section:"Styles",type:"style"},{hidden:!0,section:"Code Refactoring",type:"refactor"},{hidden:!0,section:"Tests",type:"test"},{hidden:!0,section:"Build System",type:"build"},{hidden:!0,section:"Continuous Integration",type:"ci"},{hidden:!0,section:"Miscellaneous Chores",type:"chore"},{section:"Dependencies",type:"deps"},{hidden:!0,section:"Developer Experience",type:"dx"},{hidden:!0,section:"Types",type:"types"},{hidden:!0,section:"Work In Progress",type:"wip"},{hidden:!0,section:"Releases",type:"release"},{hidden:!0,section:"Workflow",type:"workflow"},{section:S,type:i}],A=(o,e)=>v(o)?o:`${e} ${o}`,B=(o,e,s,p)=>{const c=o.suffix??"";return p==="verbatim"?`${A(o.line,s)}${c}`:e?e.scope?`${s} **${e.scope}:** ${e.subject}${c}`:`${s} ${e.subject}${c}`:`${s} ${I(o.line)}${c}`},l=(o,e,s,p)=>{s.length!==0&&(o.push(`### ${e}`,""),o.push(...s),p&&o.push(""))},D=(o,e={})=>{const s=e.bullet??"*",p=e.entryStyle??"scope",c=e.types??m,g=e.breakingSection===void 0?N:e.breakingSection,$=e.uncategorizedSection??S,T=e.breakingType?.toLowerCase(),a=new Map,E=[];for(const n of c){const t=n.type.toLowerCase();a.has(t)||(a.set(t,n),E.push(n))}const h=new Map,k=[];for(const n of o){const t=b(n.line),r=t===void 0?i:T!==void 0&&t.breakingMarker?T:t.type,u=B(n,a.has(r)?t:void 0,s,p);g!==!1&&t!==void 0&&w(t)&&k.push(u);const d=h.get(r)??[];d.push(u),h.set(r,d)}const C=()=>{const n=[];for(const[t,r]of h)t!==i&&a.has(t)||n.push(...r);return n},y=[];g!==!1&&l(y,g,k,!0);const f=new Set;for(const n of E){const t=n.type.toLowerCase();if(n.hidden||f.has(t))continue;if(f.add(t),t===i){l(y,n.section,C(),!0);continue}const r=[];for(const u of E){const d=u.type.toLowerCase();u.hidden||d===i||u.section!==n.section||(f.add(d),r.push(...h.get(d)??[]))}l(y,n.section,r,!0)}return!f.has(i)&&a.get(i)?.hidden!==!0&&l(y,$,C(),!1),y};export{N as DEFAULT_BREAKING_SECTION,m as DEFAULT_CONVENTIONAL_TYPES,S as DEFAULT_UNCATEGORIZED_SECTION,i as UNCATEGORIZED_TYPE,D as renderGroupedEntries,A as withBullet};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"../packem_chunks/shell-runner.js";import"./release-heading-DRpkhETz.js";import{D as m,c as i}from"./conventional-CGiOOEq1.js";import"./DEFAULT_BREAKING_SECTION-DUAcKVLD.js";export{m as DEFAULT_CONVENTIONAL_HEADING,i as createConventionalFormatter};
|
package/dist/packem_shared/{affected-selection-DLrq50Mz.js → affected-selection-DP4GM66N.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createRequire as C}from"node:module";import{getAffectedProjects as S}from"@visulima/task-runner";import{i as W}from"./index-BjdW45xX.js";import{V as j}from"./vis-user-error-
|
|
1
|
+
import{createRequire as C}from"node:module";import{getAffectedProjects as S}from"@visulima/task-runner";import{i as W}from"./index-BjdW45xX.js";import{V as j}from"./vis-user-error-YIyfYNBK.js";import{r as A}from"./affected-shas-Dd0P7fGD.js";let T;const $=e=>(T??=C(import.meta.url))(e),f=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,R=e=>{if(typeof f<"u"&&f.versions&&f.versions.node){const[t,s]=f.versions.node.split(".").map(Number);if(t>22||t===22&&s>=3||t===20&&s>=16)return f.getBuiltinModule(e)}return $(e)},{spawnSync:I}=R("node:child_process"),v=new Set(["deep","direct","none"]),B=e=>{const t=[],s=e.split("\0");for(let n=0;n<s.length;n++){const o=s[n];if(!o||o.length<4)continue;const p=o.slice(0,2),d=o.slice(3);if(d&&t.push(d),p.includes("R")||p.includes("C")){n+=1;const c=s[n];c&&t.push(c)}}return t},P=e=>{const t=I("git",["status","--porcelain","-z"],{cwd:e,encoding:"utf8"});return t.error||t.status!==0||typeof t.stdout!="string"?[]:B(t.stdout)},D=async(e,t,s={})=>{const n=e.downstream??"deep",o=e.upstream??"none";if(!v.has(n))throw new j(`Invalid --downstream value: "${n}". Must be "none", "direct", or "deep".`);if(!v.has(o))throw new j(`Invalid --upstream value: "${o}". Must be "none", "direct", or "deep".`);const{projectGraph:p,projects:d,workspaceRoot:c}=t,u=[];let{base:m}=e,{head:r}=e;if(!m||!r){const l=A({defaultBase:s.defaultBase,workspaceRoot:c});m=m||l.base,r=r||l.head,u.push(`Resolved affected refs from ${l.provider} (${l.notes.join("; ")})`)}const k=s.runningInCi??W,h=r==="HEAD"||r==="",b=e.uncommitted??(!k&&h);let a=[];if(b)if(h){const g=(s.readWorkingTreeChanges??P)(c),y=Object.values(d).map(i=>i.root?.replace(/\/$/,"")).filter(i=>!!i&&i!==".");a=g.filter(i=>y.some(_=>i===_||i.startsWith(`${_}/`)));const w=g.length-a.length;a.length>0&&u.push(`including ${a.length} uncommitted working-tree file(s)`),w>0&&u.push(`ignoring ${w} uncommitted path(s) outside any project (untracked scratch would otherwise mark every project affected)`)}else u.push(`ignoring --uncommitted: --head=${r} pins the comparison to a commit, not the working tree`);return{...await S({additionalChangedFiles:a,base:m,downstream:n,head:r,projectGraph:p,projects:d,upstream:o,workspaceRoot:c}),notes:u,uncommittedFileCount:a.length}};export{D as s};
|
|
@@ -24,4 +24,4 @@ interface ChangeFileMeta {
|
|
|
24
24
|
}
|
|
25
25
|
/** Helper for custom formatters that wrap the default behaviour. */
|
|
26
26
|
declare const defineFormatter: (formatter: ChangelogFormatter) => ChangelogFormatter;
|
|
27
|
-
export { ChangelogFormatter as C,
|
|
27
|
+
export { ChangelogFormatter as C, ChangelogContext as a, ChangelogFormatterModule as b, ChangelogTarget as c, ChangeFileMeta as d, defineFormatter as e };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createRequire as v}from"node:module";import{t as T}from"./compile-cache-DoMHRsRZ.js";import{l as w,i as R,a as j,b as M,c as m,g as S}from"./package-version-
|
|
1
|
+
import{createRequire as v}from"node:module";import{t as T}from"./compile-cache-DoMHRsRZ.js";import{l as w,i as R,a as j,b as M,c as m,g as S}from"./package-version-BO37_qsn.js";import{i as $}from"./index-BjdW45xX.js";let _;const x=s=>(_??=v(import.meta.url))(s),t=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,b=s=>{if(typeof t<"u"&&t.versions&&t.versions.node){const[e,o]=t.versions.node.split(".").map(Number);if(e>22||e===22&&o>=3||e===20&&o>=16)return t.getBuiltinModule(s)}return x(s)},{createRequire:y}=b("node:module");let N;const O=s=>(N??=y(import.meta.url))(s),r=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,f=s=>{if(typeof r<"u"&&r.versions&&r.versions.node){const[e,o]=r.versions.node.split(".").map(Number);if(e>22||e===22&&o>=3||e===20&&o>=16)return r.getBuiltinModule(s)}return O(s)},{execFileSync:C}=f("node:child_process"),{totalmem:I}=f("node:os"),q=/--max-old-space-size=(\d+)/,z=/--max-semi-space-size=(\d+)/,E=s=>Math.floor(I()/1024/1024*s),P=s=>s<=512?4:s<=1024?8:s<=2048?16:s<=4096?32:s<=8192?64:Math.floor(Math.log2(s))*8,d=(s,e)=>{for(const o of e){const n=s.exec(o);if(n)return Number.parseInt(n[1],10)}},B=s=>{const o=[...w()],n=[...R()],a=d(q,o),p=d(z,o);if(a!==void 0&&p!==void 0)return;const l=a??E(.75),g=p??P(l),c=[];if(a===void 0&&c.push(`--max-old-space-size=${String(l)}`),p===void 0&&c.push(`--max-semi-space-size=${String(g)}`),c.length!==0)try{C(j(),[...c,...o,...n.slice(1)],{env:M(),stdio:"inherit"}),m(0)}catch(h){const u=h.status;m(typeof u=="number"?u:1)}},V=()=>{process.env.VIS_VERSION=S()},H=s=>{!process.stdout.isTTY||$||process.env.TERM==="dumb"||process.stdout.write(`\x1B]0;${s}\x07`)},L=new Set(["","--help","--version","-h","-v","completion","dlx","exec","x"]),i=process.argv[2]??"";!L.has(i)&&!process.argv.includes("--help")&&!process.argv.includes("-h")&&B();process.argv.includes("--no-color")&&(process.env.NO_COLOR="1",process.env.FORCE_COLOR="0");V();T();(async()=>{if(i==="__pm-shim"){const{dispatchShim:e}=await import("../packem_chunks/dispatch.js");e(process.argv[3]??"",process.argv.slice(4));return}if(i==="x"){const{runLeanX:e}=await import("../packem_chunks/lean.js");await e(process.argv.slice(3));return}if(i==="exec"||i==="dlx"){const{runExecCli:e}=await import("../packem_chunks/cli-exec.js");await e();return}const{runCli:s}=await import("../packem_chunks/cli-main.js").then(e=>e.ax);await s()})();export{H as s};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"../packem_chunks/git.js";import{b as o,r as d}from"./release-heading-DRpkhETz.js";export{o as buildCompareUrl,d as renderReleaseHeading};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{createShellRunner as v}from"../packem_chunks/shell-runner.js";import{a as w,b as V,r as y}from"./release-heading-DRpkhETz.js";import{DEFAULT_CONVENTIONAL_TYPES as C,renderGroupedEntries as E}from"./DEFAULT_BREAKING_SECTION-DUAcKVLD.js";const U=async(e,t,r)=>{try{const{createRemoteClient:n,detectRemoteProvider:s}=await import("../packem_chunks/detect.js"),a=await s(r,t,void 0);return e?{provider:a,slug:e}:{provider:a,slug:await n(a).detectRepoSlug(r,t)}}catch{return{provider:"github",slug:e}}},$=(e,t)=>{const{slug:r}=t;if(!r)return e;const n=w(t.provider,r);return e.replaceAll(/(?<!\[)#(\d+)/g,(s,a)=>`[#${a}](${n.issue(a)})`)},A=e=>{const{changeFiles:t,release:r}=e;if(r.isCascadeBump||r.isGroupBump){const n=r.isCascadeBump?"cascade bump to":"group bump to";return r.sources.map(s=>({line:`deps(${s.name}): ${n} ${s.newVersion}`}))}return r.isDependencyBump&&t.length===0?r.sources.map(n=>({line:n.newVersion===""?`deps(${n.name}): removed`:`deps(${n.name}): upgraded to ${n.newVersion}`})):[]},P="## {name} [{version}]({compareUrl}) ({date})",D=(e={})=>{const t=e.runner??v(),r=e.heading??P,n=e.types??C;let s;return async u=>{const{changeFiles:g,date:f,release:o,target:h}=u;s??=U(e.repo,t,process.cwd());const i=await s,c=[];for(const m of g){const p=m.body.trim();if(p)for(const b of p.split(/\r?\n/)){const d=b.trim();d&&c.push({line:$(d,i)})}}c.push(...A(u));const l=[];if(h!=="github-release"){const m=V({compareUrlPrefix:e.compareUrlPrefix,name:o.name,newVersion:o.newVersion,oldVersion:o.oldVersion,provider:i.provider,repo:i.slug,tagPattern:e.tagPattern});l.push(y(r,{compareUrl:m,date:f,name:o.name,version:o.newVersion}),"")}return l.push(...E(c,{breakingSection:e.breakingSection,bullet:e.bullet,types:n})),l.join(`
|
|
2
|
+
`).replaceAll(/\n{3,}/g,`
|
|
3
|
+
|
|
4
|
+
`).trim()}};export{P as D,D as c,U as d,$ as l,A as s};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{createRequire as ie}from"node:module";import{e as I,z as ue}from"./index-DHD8wb6Z.js";import{r as fe}from"./docker-
|
|
1
|
+
import{createRequire as ie}from"node:module";import{e as I,z as ue}from"./index-DHD8wb6Z.js";import{r as fe}from"./docker-Dy-X_BuM.js";import{p as oe}from"./readJsonSync-CbryXYxN-B2aSeDpC.js";import{e as me}from"./license-DvlYdo6T.js";import{S as he}from"./lockfile-DhHAaHN5.js";import{a as _e}from"./index-B4AjSxHU.js";let ae;const pe=e=>(ae??=ie(import.meta.url))(e),J=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,se=e=>{if(typeof J<"u"&&J.versions&&J.versions.node){const[t,n]=J.versions.node.split(".").map(Number);if(t>22||t===22&&n>=3||t===20&&n>=16)return J.getBuiltinModule(e)}return pe(e)},{randomUUID:le}=se("node:crypto"),{readdirSync:de}=se("node:fs"),H=e=>e.replaceAll(/[^\w.~-]/g,t=>`%${(t.codePointAt(0)??0).toString(16).toUpperCase().padStart(2,"0")}`),j=(e,t)=>{const n=e.toLowerCase();if(n.startsWith("@")){const s=n.indexOf("/");if(s>0){const c=n.slice(0,s),p=n.slice(s+1);return`pkg:npm/${H(c)}/${H(p)}@${H(t)}`}}return`pkg:npm/${H(n)}@${H(t)}`},d={ARRAY:"array",BOOLEAN:"boolean",DATE:"date",FUNCTION:"function",JSTOXML_OBJECT:"jstoxml-object",NULL:"null",NUMBER:"number",OBJECT:"object",STRING:"string"},ge=[d.STRING,d.NUMBER,d.BOOLEAN],ye='<?xml version="1.0" encoding="UTF-8"?>',ee=["_selfCloseTag","_attrs"],Oe=(e="",t=0)=>e.repeat(t),W=e=>Array.isArray(e)&&d.ARRAY||typeof e===d.OBJECT&&e!==null&&e._name&&d.JSTOXML_OBJECT||e instanceof Date&&d.DATE||e===null&&d.NULL||typeof e,re=e=>e.startsWith("<![CDATA["),ce=(e="",t={},n)=>{let s=e;if(typeof e===d.STRING){if(re(e))return e;const c=new RegExp(`(${Object.keys(t).join("|")})(?!(\\w|#)*;)`,"g");s=String(e).replace(c,(p,m)=>t[m]||"")}return typeof n=="function"?n(s):s},Se=(e={},t,n,s)=>(Array.isArray(e)?e:Object.entries(e).map(([p,m])=>({[p]:m}))).reduce((p,m)=>{const _=Object.keys(m)[0],O=m[_];if(typeof n===d.FUNCTION&&n(_,O))return p;const S=t?ce(O,t):O,v=!s&&S===!0?"":`="${S}"`;return p.push(`${_}${v}`),p},[]),Ce=(e={},t,n,s)=>{const c=Se(e,t,n,s);return c.length===0?"":` ${c.join(" ")}`},Ae=(e={})=>Object.keys(e).map(t=>({_name:t,_content:e[t]})),ve=e=>ge.includes(W(e)),Te=e=>!e.match("<"),Re=({header:e,isOutputStart:t})=>e&&t?typeof e===d.BOOLEAN?ye:e:"",te={"<":"<",">":">","&":"&",'"':"""},B=(e={},t={})=>{const{depth:n=0,indent:s,_isFirstItem:c,_isOutputStart:p=!0,header:m,attributeReplacements:_={},attributeFilter:O,attributeExplicitTrue:S=!1,contentReplacements:v={},contentMap:x,selfCloseTags:L=!0}=t,Y=typeof _=="boolean"&&!_?{}:{...te,..._},k=typeof v=="boolean"&&!v?{}:{...te,...v},U=typeof s=="string",D=Oe(s,n),G=W(e),w=Re({header:m,isOutputStart:p}),b=p&&!w&&c&&n===0,X=U&&!b?`
|
|
2
2
|
`:"";let C="";switch(G){case d.JSTOXML_OBJECT:{const{_name:h,_content:g}=e;if(g===null&&typeof x!="function"){C=`${X}${D}${h}`;break}if(Array.isArray(g)&&g.every(ve))return g.map(F=>B({_name:h,_content:F},{...t,depth:n,_isOutputStart:!1})).join("");if(ee.includes(h))break;const y=B(g,{...t,depth:n+1,_isOutputStart:b}),M=W(y),R=Te(y),r=re(y),o=`${X}${D}`;if(h==="_comment"){C+=`${o}<!-- ${g} -->`;break}const i=M==="undefined"||y==="",a=L,l=e._selfCloseTag,f=typeof l===d.BOOLEAN?i&&l:i&&a,E=f?"/":"",$=Ce(e._attrs,Y,O,S),T=`<${h}${$}${E}>`,A=U&&!R&&!r?`
|
|
3
3
|
${D}`:"",N=f?"":`${y}${A}</${h}>`;C+=`${o}${T}${N}`;break}case d.OBJECT:{const h=Object.keys(e);C=h.map((u,y)=>{const M={...t,_isFirstItem:y===0,_isLastItem:y+1===h.length,_isOutputStart:b},R={_name:u};if(W(e[u])===d.OBJECT&&(ee.forEach(i=>{const a=e[u][i];typeof a<"u"&&(R[i]=a,delete e[u][i])}),typeof e[u]._content<"u"&&Object.keys(e[u]).length>1)){const i=Object.assign({},e[u]);delete i._content,R._content=[...Ae(i),e[u]._content]}return typeof R._content>"u"&&(R._content=e[u]),B(R,M)},t).join("");break}case d.FUNCTION:{const h=e(t);C=B(h,t);break}case d.ARRAY:{C=e.map((g,u)=>{const y={...t,_isFirstItem:u===0,_isLastItem:u+1===e.length,_isOutputStart:b};return B(g,y)}).join("");break}default:{C=ce(e,k,x);break}}return`${w}${C}`},Q=e=>{try{return oe(e)}catch{return}},Ee=e=>{if(e.length===0||e.includes("..")||e.startsWith(".")||e.includes("\0")||e.includes("\\"))return!1;if(e.startsWith("@")){const t=e.indexOf("/");return t>1&&!e.includes("/",t+1)}return!e.includes("/")},$e=e=>e.length>0&&!e.includes("/")&&!e.includes("\\")&&!e.includes("..")&&!e.includes("\0"),be=(e,t,n)=>{const c=`${t.replaceAll("/","+")}@${n}`,p=I(e,"node_modules",".pnpm"),m=Q(I(p,c,"node_modules",t,"package.json"));if(m)return m;let _;try{_=de(p)}catch{return}const O=`${c}_`;for(const S of _){if(!S.startsWith(O))continue;const v=Q(I(p,S,"node_modules",t,"package.json"));if(v)return v}},Ne=(e,t,n)=>{const s=Q(I(e,"node_modules",t,"package.json"));return s?.version===n?s:void 0},xe=(e,t,n)=>{if(!(!Ee(t)||!$e(n)))return be(e,t,n)??Ne(e,t,n)},ke={sha256:"SHA-256",sha384:"SHA-384",sha512:"SHA-512"},De={sha256:64,sha384:96,sha512:128},we=e=>{const t={name:e.name,version:e.version},{integrity:n}=e;return n&&n.hex.length===De[n.algorithm]&&(t.hash={alg:ke[n.algorithm],content:n.hex}),e.dependencies&&(t.dependencies=e.dependencies),e.peerDependencies&&(t.peerDependencies=e.peerDependencies),e.optionalDependencies&&(t.optionalDependencies=e.optionalDependencies),t},je=[{file:"pnpm-lock.yaml",type:"pnpm"},{file:"npm-shrinkwrap.json",type:"npm"},{file:"package-lock.json",type:"npm"},{file:"yarn.lock",type:"yarn"},{file:"bun.lock",type:"bun"}],Ie=e=>{for(const{file:t,type:n}of je){let s;try{s=ue(I(e,t))}catch{continue}const c=new Map;for(const p of he(s,n))c.set(`${p.name}@${p.version}`,we(p));return{packages:c,type:n}}},Le=e=>{const t=e.indexOf(":");return t<=0?e:e.slice(0,t)==="npm"?e.slice(t+1):e},z=(e,t,n)=>{const s=n.get(e);if(!s||s.size===0)return;if(s.has(t))return t;const c=Le(t);if(c!==t&&s.has(c))return c;const p=[...s],m=_e.maxSatisfying(p,c,{includePrerelease:!0});return m||p[0]},Me="1.7",Pe="CycloneDX",Be="http://cyclonedx.org/schema/bom-1.7.schema.json",Ve="@visulima/vis",ne=e=>{try{return oe(e)}catch{return}},Ue=e=>{if(e){if(typeof e=="string")return e;if(typeof e=="object"&&e.name)return e.email?`${e.name} <${e.email}>`:e.name}},Xe=e=>{if(e)return typeof e=="string"?e:e.url},Fe=e=>{if(e)return typeof e=="string"?e:e.url},Je=e=>{const t=[];e.homepage&&t.push({type:"website",url:e.homepage});const n=Xe(e.repository);n&&t.push({type:"vcs",url:n});const s=Fe(e.bugs);return s&&t.push({type:"issue-tracker",url:s}),t.length>0?t:void 0},He=e=>e==="application"||e==="service"||e==="tool"?"application":"library",K=(e,t)=>{if(!t)return;t.description&&(e.description=t.description);const n=Ue(t.author);n&&(e.author=n);const s=me(t);s&&(e.licenses=s);const c=Je(t);c&&(e.externalReferences=c)},nt=e=>{const{focus:t,generatorVersion:n,includeDev:s=!1,now:c=new Date,projectGraph:p,serialNumber:m,workspace:_,workspaceRoot:O}=e,S=t&&t.length>0?[...fe(t,p)].sort():Object.keys(_.projects).sort(),v=new Set(S),x=new Map;for(const r of S){const o=_.projects[r];o&&x.set(r,ne(I(O,o.root,"package.json")))}const L=[],q=new Map;for(const r of S){const o=_.projects[r];if(!o)continue;const i=x.get(r),a=i?.version??"0.0.0",l=j(r,a);q.set(r,l);const f={"bom-ref":l,name:r,purl:l,type:He(o.projectType),version:a};K(f,i),L.push(f)}const Y=Ie(O),V=new Map,k=new Map;if(Y)for(const r of Y.packages.values()){V.set(`${r.name}@${r.version}`,r);let o=k.get(r.name);o||(o=new Set,k.set(r.name,o)),o.add(r.version)}const U=[],D=[],G=new Map;for(const r of S){const o=x.get(r);if(!o)continue;const i=[o.dependencies,o.peerDependencies];s&&i.push(o.devDependencies);const a=new Set,l=(f,E)=>{if(E)for(const[$,T]of Object.entries(E)){if(v.has($)){const N=q.get($);N&&a.add(N);continue}const A=z($,T,k);A&&(a.add(j($,A)),f.push(`${$}@${A}`))}};for(const f of i)l(U,f);l(D,o.optionalDependencies),G.set(r,a)}const w=new Map,b=new Map,X=(r,o)=>{const i=[...r];for(;i.length>0;){const a=i.pop(),l=w.get(a);if(l==="required"||l==="optional"&&o==="optional")continue;w.set(a,o);const f=V.get(a);if(!f)continue;const E=b.get(a)??new Set,$=[f.dependencies,f.peerDependencies];for(const T of $)if(T)for(const[A,N]of Object.entries(T))for(const P of N){const F=z(A,P,k);F&&(E.add(j(A,F)),i.push(`${A}@${F}`))}if(f.optionalDependencies)for(const[T,A]of Object.entries(f.optionalDependencies))for(const N of A){const P=z(T,N,k);P&&(E.add(j(T,P)),D.push(`${T}@${P}`))}E.size>0&&b.set(a,E)}};X(U,"required"),X(D,"optional");const C=[],h=[...w.keys()].sort();for(const r of h){const o=V.get(r);if(!o)continue;const i=j(o.name,o.version),a={"bom-ref":i,name:o.name,purl:i,scope:w.get(r)??"required",type:"library",version:o.version};o.hash&&(a.hashes=[o.hash]),K(a,xe(O,o.name,o.version)),C.push(a)}const g=[];for(const[r,o]of G){const i=q.get(r);if(!i)continue;const a=[...o].sort();g.push(a.length>0?{dependsOn:a,ref:i}:{ref:i})}for(const r of h){const o=V.get(r);if(!o)continue;const i=j(o.name,o.version),a=b.get(r),l=a?[...a].sort():[];g.push(l.length>0?{dependsOn:l,ref:i}:{ref:i})}g.sort((r,o)=>r.ref.localeCompare(o.ref));const u=ne(I(O,"package.json")),y=(()=>{if(t?.length===1){const l=L.find(f=>f.name===t[0]);if(l)return{"bom-ref":l["bom-ref"],name:l.name,purl:l.purl,type:l.type,version:l.version}}const r=u?.name??"workspace",o=u?.version??"0.0.0",i=j(r,o),a={"bom-ref":i,name:r,purl:i,type:"application",version:o};return K(a,u),a})(),M=y["bom-ref"],R=M?L.filter(r=>r["bom-ref"]!==M):L;return{$schema:Be,bomFormat:Pe,components:[...R,...C],dependencies:g,metadata:{component:y,lifecycles:[{phase:"build"}],timestamp:c.toISOString(),tools:{components:[{name:Ve,type:"application",...n?{version:n}:{}}]}},serialNumber:m??`urn:uuid:${le()}`,specVersion:Me,version:1}},st=e=>{const t={version:e.version??1,xmlns:"http://cyclonedx.org/schema/bom/1.7"};e.serialNumber&&(t.serialNumber=e.serialNumber);const n=[];return e.metadata&&n.push(qe(e.metadata)),e.components&&e.components.length>0&&n.push({_content:e.components.map(c=>Z(c)),_name:"components"}),e.dependencies&&e.dependencies.length>0&&n.push({_content:e.dependencies.map(c=>Ge(c)),_name:"dependencies"}),`${B({_attrs:t,_content:n,_name:"bom"},{header:!0,indent:" ",selfCloseTags:!0})}
|
|
4
4
|
`},qe=e=>{const t=[];return e.timestamp&&t.push({timestamp:e.timestamp}),e.lifecycles&&e.lifecycles.length>0&&t.push({_content:e.lifecycles.map(n=>{const s=[];return n.phase&&s.push({phase:n.phase}),n.name&&s.push({name:n.name}),n.description&&s.push({description:n.description}),{_content:s,_name:"lifecycle"}}),_name:"lifecycles"}),e.tools?.components&&t.push({_content:[{_content:e.tools.components.map(n=>Z(n)),_name:"components"}],_name:"tools"}),e.component&&t.push(Z(e.component)),{_content:t,_name:"metadata"}},Z=e=>{const t={type:e.type};e["bom-ref"]&&(t["bom-ref"]=e["bom-ref"]);const n=[];e.group&&n.push({group:e.group}),n.push({name:e.name}),e.version&&n.push({version:e.version}),e.description&&n.push({description:e.description}),e.author&&n.push({author:e.author}),e.hashes&&e.hashes.length>0&&n.push({_content:e.hashes.map(c=>({_attrs:{alg:c.alg},_content:c.content,_name:"hash"})),_name:"hashes"});const s=Ye(e.licenses);return s&&n.push(s),e.purl&&n.push({purl:e.purl}),e.scope&&n.push({scope:e.scope}),e.externalReferences&&e.externalReferences.length>0&&n.push({_content:e.externalReferences.map(c=>({_attrs:{type:c.type},_content:[{url:c.url}],_name:"reference"})),_name:"externalReferences"}),{_attrs:t,_content:n,_name:"component"}},Ye=e=>{if(!e||e.length===0)return;const t=[];for(const n of e){if("expression"in n){t.push({expression:n.expression});continue}const s=[];"id"in n.license&&n.license.id?s.push({id:n.license.id}):"name"in n.license&&n.license.name&&s.push({name:n.license.name}),t.push({_content:s,_name:"license"})}return{_content:t,_name:"licenses"}},Ge=e=>e.dependsOn&&e.dependsOn.length>0?{_attrs:{ref:e.ref},_content:e.dependsOn.map(t=>({_attrs:{ref:t},_name:"dependency"})),_name:"dependency"}:{_attrs:{ref:e.ref},_name:"dependency"};export{nt as b,st as s,j as t};
|