@meirblachman/azure-pipelines-visualizer 0.1.9 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,76 @@
1
+ # Azure Pipelines Visualizer
2
+
3
+ An interactive visualizer for Azure DevOps pipelines. Paste a pipeline URL and explore its template hierarchy as an expandable diagram with YAML preview and task documentation links.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ npx @meirblachman/azure-pipelines-visualizer
9
+ ```
10
+
11
+ > Requires Node.js ≥ 24 and Azure CLI logged in (`az login`).
12
+
13
+ Open http://localhost:3001. The command bundles both the API server and web UI.
14
+
15
+ ## CLI Options
16
+
17
+ ```
18
+ Usage: apv [options]
19
+
20
+ Options:
21
+ -c, --config <path> Path to apv.config.json
22
+ -p, --port <number> Port to listen on (default: 3001)
23
+ -h, --help Show this help message
24
+ -v, --version Show version number
25
+ ```
26
+
27
+ Examples:
28
+
29
+ ```bash
30
+ # Use a custom config file and port
31
+ npx @meirblachman/azure-pipelines-visualizer --config ./my-config.json --port 8080
32
+
33
+ # Short flags work too
34
+ npx @meirblachman/azure-pipelines-visualizer -c ./my-config.json -p 8080
35
+ ```
36
+
37
+ The `PORT` environment variable is still supported as a fallback when `--port` is not specified.
38
+
39
+ ## Usage
40
+
41
+ 1. Paste an Azure DevOps file URL, e.g.:
42
+ ```
43
+ https://dev.azure.com/{org}/{project}/_git/{repo}?path=/.pipelines/main.yml
44
+ ```
45
+ 2. Click **Load Pipeline** — the root file and its template references appear as a diagram.
46
+ 3. Click any template node to expand it and fetch its contents recursively.
47
+ 4. Click an expanded node to view its YAML and task list in the detail panel.
48
+
49
+ ## Disk Cache
50
+
51
+ Fetched pipeline and template files are cached on disk under `.cache/ado-file-cache` by default, keyed by repo identity, file path, branch, and resolved commit SHA.
52
+
53
+ You can override the cache location and add custom task documentation links in `apv.config.json`:
54
+
55
+ ```jsonc
56
+ {
57
+ "cacheDir": ".cache/ado-file-cache",
58
+ "customTaskDocs": {
59
+ "OneBranch.Pipeline.Build@1": "https://example.com/docs/build-task"
60
+ }
61
+ }
62
+ ```
63
+
64
+ ## Standalone Binary
65
+
66
+ Pre-built binaries for Linux, macOS, and Windows are available on the [Releases](https://github.com/Meir017/azure-pipelines-visualizer/releases) page.
67
+
68
+ ```bash
69
+ # Download the binary for your platform from the latest release, then:
70
+ chmod +x apv-linux-x64 # Linux/macOS only
71
+ ./apv-linux-x64 --config ./apv.config.json --port 8080
72
+ ```
73
+
74
+ ## License
75
+
76
+ See [repository](https://github.com/Meir017/azure-pipelines-visualizer) for details.
package/dist/index.min.js CHANGED
@@ -40,7 +40,7 @@ Options:
40
40
  -p, --port <number> Port to listen on (default: 3001)
41
41
  -h, --help Show this help message
42
42
  -v, --version Show version number
43
- `.trim()),process.exit(0));Ee.version&&(console.log("0.1.9"),process.exit(0));var ja=_a(new URL(".",import.meta.url)),It=Nr(ja,"web"),Na={".html":"text/html; charset=utf-8",".js":"application/javascript",".css":"text/css",".ttf":"font/ttf",".woff":"font/woff",".woff2":"font/woff2",".svg":"image/svg+xml",".png":"image/png",".json":"application/json"};function La(e){let r=Ia(e);return Na[r]??"application/octet-stream"}Ee.config&&kn(Ee.config);M();var S=new O;S.use("/*",wn());S.use("/*",vn({origin:"*"}));S.get("/health",e=>e.json({status:"ok"}));S.get("/api/config/task-docs",e=>{let r=M();return e.json({customTaskDocs:r.customTaskDocs??{}})});S.route("/api",Ce);S.route("/api",ae);S.route("/api",jr);S.all("/api/*",e=>e.json({error:`Not found: ${e.req.path}`},404));S.onError((e,r)=>{if(console.error("Server error:",e.message),e.message.includes("DefaultAzureCredential")||e.message.includes("authentication"))return r.json({error:"Authentication failed. Ensure you are logged in via `az login`.",details:e.message},401);let n=e.message.match(/API error \((\d+)\)/);if(n){let t=Number(n[1]);return r.json({error:e.message},t)}return r.json({error:e.message},500)});S.get("/assets/*",e=>{let r=e.req.path,n=Nr(It,r);if(!Pt(n))return e.notFound();let t=Ot(n);return e.body(t,200,{"Content-Type":La(r),"Cache-Control":"public, immutable, max-age=31536000"})});S.get("*",e=>{let r=Nr(It,"index.html");if(!Pt(r))return e.notFound();let n=Ot(r,"utf-8");return e.html(n)});var Da=Number(Ee.port)||Number(process.env.PORT)||3001;Yr({fetch:S.fetch,port:Da},e=>{console.log(`APV server listening on http://localhost:${e.port}`)});export{S as app};
43
+ `.trim()),process.exit(0));Ee.version&&(console.log("0.1.10"),process.exit(0));var ja=_a(new URL(".",import.meta.url)),It=Nr(ja,"web"),Na={".html":"text/html; charset=utf-8",".js":"application/javascript",".css":"text/css",".ttf":"font/ttf",".woff":"font/woff",".woff2":"font/woff2",".svg":"image/svg+xml",".png":"image/png",".json":"application/json"};function La(e){let r=Ia(e);return Na[r]??"application/octet-stream"}Ee.config&&kn(Ee.config);M();var S=new O;S.use("/*",wn());S.use("/*",vn({origin:"*"}));S.get("/health",e=>e.json({status:"ok"}));S.get("/api/config/task-docs",e=>{let r=M();return e.json({customTaskDocs:r.customTaskDocs??{}})});S.route("/api",Ce);S.route("/api",ae);S.route("/api",jr);S.all("/api/*",e=>e.json({error:`Not found: ${e.req.path}`},404));S.onError((e,r)=>{if(console.error("Server error:",e.message),e.message.includes("DefaultAzureCredential")||e.message.includes("authentication"))return r.json({error:"Authentication failed. Ensure you are logged in via `az login`.",details:e.message},401);let n=e.message.match(/API error \((\d+)\)/);if(n){let t=Number(n[1]);return r.json({error:e.message},t)}return r.json({error:e.message},500)});S.get("/assets/*",e=>{let r=e.req.path,n=Nr(It,r);if(!Pt(n))return e.notFound();let t=Ot(n);return e.body(t,200,{"Content-Type":La(r),"Cache-Control":"public, immutable, max-age=31536000"})});S.get("*",e=>{let r=Nr(It,"index.html");if(!Pt(r))return e.notFound();let n=Ot(r,"utf-8");return e.html(n)});var Da=Number(Ee.port)||Number(process.env.PORT)||3001;Yr({fetch:S.fetch,port:Da},e=>{console.log(`APV server listening on http://localhost:${e.port}`)});export{S as app};
44
44
  /*! Bundled license information:
45
45
 
46
46
  js-yaml/dist/js-yaml.mjs:
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@meirblachman/azure-pipelines-visualizer",
3
- "version": "0.1.9",
3
+ "version": "0.1.10",
4
4
  "description": "Visualize Azure Pipelines template trees as interactive diagrams",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "apv": "dist/index.min.js"
8
8
  },
9
9
  "files": [
10
- "dist/"
10
+ "dist/",
11
+ "README.md"
11
12
  ],
12
13
  "repository": {
13
14
  "type": "git",