sourcey 3.5.10 → 3.6.1

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 (100) hide show
  1. package/README.md +24 -97
  2. package/dist/adapters/index.d.ts +12 -0
  3. package/dist/adapters/index.d.ts.map +1 -0
  4. package/dist/adapters/index.js +130 -0
  5. package/dist/adapters/mkdocs.d.ts +5 -0
  6. package/dist/adapters/mkdocs.d.ts.map +1 -0
  7. package/dist/adapters/mkdocs.js +367 -0
  8. package/dist/adapters/shared.d.ts +12 -0
  9. package/dist/adapters/shared.d.ts.map +1 -0
  10. package/dist/adapters/shared.js +134 -0
  11. package/dist/adapters/types.d.ts +74 -0
  12. package/dist/adapters/types.d.ts.map +1 -0
  13. package/dist/adapters/types.js +1 -0
  14. package/dist/cli.js +28 -34
  15. package/dist/client/search.js +213 -82
  16. package/dist/client/tabs.js +23 -0
  17. package/dist/components/layout/Head.js +17 -4
  18. package/dist/components/layout/TableOfContents.d.ts.map +1 -1
  19. package/dist/components/layout/TableOfContents.js +4 -2
  20. package/dist/components/openapi/Introduction.d.ts.map +1 -1
  21. package/dist/components/openapi/Introduction.js +16 -1
  22. package/dist/components/openapi/Security.d.ts.map +1 -1
  23. package/dist/components/openapi/Security.js +18 -2
  24. package/dist/config.d.ts +101 -0
  25. package/dist/config.d.ts.map +1 -1
  26. package/dist/config.js +95 -143
  27. package/dist/core/api-rendering.d.ts +47 -0
  28. package/dist/core/api-rendering.d.ts.map +1 -0
  29. package/dist/core/api-rendering.js +76 -0
  30. package/dist/core/doxygen-loader.d.ts.map +1 -1
  31. package/dist/core/doxygen-loader.js +36 -17
  32. package/dist/core/godoc-loader.d.ts.map +1 -1
  33. package/dist/core/godoc-loader.js +17 -6
  34. package/dist/core/markdown-loader.d.ts +14 -0
  35. package/dist/core/markdown-loader.d.ts.map +1 -1
  36. package/dist/core/markdown-loader.js +70 -26
  37. package/dist/core/mcp-normalizer.d.ts.map +1 -1
  38. package/dist/core/mcp-normalizer.js +48 -34
  39. package/dist/core/navigation.d.ts.map +1 -1
  40. package/dist/core/navigation.js +8 -7
  41. package/dist/core/parser.d.ts.map +1 -1
  42. package/dist/core/parser.js +75 -4
  43. package/dist/core/rustdoc-introspector.d.ts +29 -0
  44. package/dist/core/rustdoc-introspector.d.ts.map +1 -0
  45. package/dist/core/rustdoc-introspector.js +236 -0
  46. package/dist/core/rustdoc-loader.d.ts +25 -0
  47. package/dist/core/rustdoc-loader.d.ts.map +1 -0
  48. package/dist/core/rustdoc-loader.js +469 -0
  49. package/dist/core/rustdoc-render.d.ts +76 -0
  50. package/dist/core/rustdoc-render.d.ts.map +1 -0
  51. package/dist/core/rustdoc-render.js +785 -0
  52. package/dist/core/rustdoc-types.d.ts +314 -0
  53. package/dist/core/rustdoc-types.d.ts.map +1 -0
  54. package/dist/core/rustdoc-types.js +18 -0
  55. package/dist/core/search-indexer.d.ts +10 -0
  56. package/dist/core/search-indexer.d.ts.map +1 -1
  57. package/dist/core/search-indexer.js +6 -1
  58. package/dist/core/sourcey-rustdoc/Cargo.lock +705 -0
  59. package/dist/core/sourcey-rustdoc/Cargo.toml +38 -0
  60. package/dist/core/sourcey-rustdoc/README.md +59 -0
  61. package/dist/core/sourcey-rustdoc/src/diagnostics.rs +42 -0
  62. package/dist/core/sourcey-rustdoc/src/doctest.rs +268 -0
  63. package/dist/core/sourcey-rustdoc/src/extract.rs +492 -0
  64. package/dist/core/sourcey-rustdoc/src/lib.rs +58 -0
  65. package/dist/core/sourcey-rustdoc/src/links.rs +126 -0
  66. package/dist/core/sourcey-rustdoc/src/main.rs +256 -0
  67. package/dist/core/sourcey-rustdoc/src/signature.rs +415 -0
  68. package/dist/core/sourcey-rustdoc/src/spec.rs +390 -0
  69. package/dist/core/sourcey-rustdoc/tests/format_version.rs +45 -0
  70. package/dist/dev-server.d.ts.map +1 -1
  71. package/dist/dev-server.js +109 -33
  72. package/dist/index.d.ts +4 -0
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +26 -14
  75. package/dist/init.d.ts.map +1 -1
  76. package/dist/init.js +21 -16
  77. package/dist/renderer/changelog-feed.d.ts.map +1 -1
  78. package/dist/renderer/changelog-feed.js +27 -19
  79. package/dist/renderer/html-builder.d.ts.map +1 -1
  80. package/dist/renderer/html-builder.js +4 -3
  81. package/dist/renderer/llms.js +57 -2
  82. package/dist/site-assembly.d.ts +5 -0
  83. package/dist/site-assembly.d.ts.map +1 -1
  84. package/dist/site-assembly.js +161 -25
  85. package/dist/themes/default/sourcey.css +300 -0
  86. package/dist/utils/code-samples.d.ts +1 -0
  87. package/dist/utils/code-samples.d.ts.map +1 -1
  88. package/dist/utils/code-samples.js +30 -22
  89. package/dist/utils/html.d.ts +10 -0
  90. package/dist/utils/html.d.ts.map +1 -0
  91. package/dist/utils/html.js +152 -0
  92. package/dist/utils/http.d.ts +0 -2
  93. package/dist/utils/http.d.ts.map +1 -1
  94. package/dist/utils/http.js +19 -34
  95. package/dist/utils/markdown.d.ts.map +1 -1
  96. package/dist/utils/markdown.js +115 -39
  97. package/dist/vite-plugin.d.ts +2 -0
  98. package/dist/vite-plugin.d.ts.map +1 -1
  99. package/dist/vite-plugin.js +71 -1
  100. package/package.json +11 -5
@@ -6,7 +6,7 @@ import { normalizeBaseUrl } from "./site-url.js";
6
6
  * - Watches spec and markdown files; triggers full reload on change
7
7
  */
8
8
  export function sourceyPlugin(options) {
9
- const { watchPaths, baseUrl, render, searchIndex } = options;
9
+ const { watchPaths, baseUrl, render, searchIndex, extraFile } = options;
10
10
  const watchSet = new Set(watchPaths.map((p) => resolve(p)));
11
11
  return {
12
12
  name: "sourcey",
@@ -63,6 +63,23 @@ export function sourceyPlugin(options) {
63
63
  return next();
64
64
  }
65
65
  }
66
+ if (extraFile) {
67
+ try {
68
+ const outputPath = outputPathFromRequestPath(pathname, currentBaseUrl);
69
+ const data = outputPath ? await extraFile(outputPath) : undefined;
70
+ if (data !== undefined) {
71
+ res.writeHead(200, {
72
+ "Content-Type": contentTypeForPath(outputPath),
73
+ "Cache-Control": "no-cache",
74
+ });
75
+ res.end(data);
76
+ return;
77
+ }
78
+ }
79
+ catch {
80
+ return next();
81
+ }
82
+ }
66
83
  // Only handle HTML page requests (no extension, or .html)
67
84
  const ext = extname(url);
68
85
  if (ext && ext !== ".html") {
@@ -99,3 +116,56 @@ export function sourceyPlugin(options) {
99
116
  },
100
117
  };
101
118
  }
119
+ function outputPathFromRequestPath(pathname, baseUrl) {
120
+ let path = pathname;
121
+ if (baseUrl && path.startsWith(baseUrl)) {
122
+ path = path.slice(baseUrl.length);
123
+ }
124
+ try {
125
+ path = decodeURIComponent(path);
126
+ }
127
+ catch {
128
+ // Keep the raw path; a malformed escape cannot match generated output.
129
+ }
130
+ return path.replace(/^\/+/, "");
131
+ }
132
+ function contentTypeForPath(path) {
133
+ switch (extname(path).toLowerCase()) {
134
+ case ".css":
135
+ return "text/css; charset=utf-8";
136
+ case ".js":
137
+ case ".mjs":
138
+ return "text/javascript; charset=utf-8";
139
+ case ".json":
140
+ return "application/json; charset=utf-8";
141
+ case ".svg":
142
+ return "image/svg+xml";
143
+ case ".png":
144
+ return "image/png";
145
+ case ".jpg":
146
+ case ".jpeg":
147
+ return "image/jpeg";
148
+ case ".gif":
149
+ return "image/gif";
150
+ case ".webp":
151
+ return "image/webp";
152
+ case ".avif":
153
+ return "image/avif";
154
+ case ".ico":
155
+ return "image/x-icon";
156
+ case ".txt":
157
+ return "text/plain; charset=utf-8";
158
+ case ".pdf":
159
+ return "application/pdf";
160
+ case ".woff":
161
+ return "font/woff";
162
+ case ".woff2":
163
+ return "font/woff2";
164
+ case ".mp4":
165
+ return "video/mp4";
166
+ case ".webm":
167
+ return "video/webm";
168
+ default:
169
+ return "application/octet-stream";
170
+ }
171
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sourcey",
3
- "version": "3.5.10",
4
- "description": "Precision documentation from OpenAPI, MCP, Doxygen, godoc, and Markdown. Static HTML you own.",
3
+ "version": "3.6.1",
4
+ "description": "Precision documentation from OpenAPI, MCP, Doxygen, godoc, rustdoc, and Markdown. Static HTML you own.",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "node": ">=20"
@@ -20,7 +20,7 @@
20
20
  "LICENSE"
21
21
  ],
22
22
  "scripts": {
23
- "build": "tsc && cp -r src/themes dist/ && cp src/client/*.js dist/client/ && cp -r src/og/fonts dist/og/ && rm -rf dist/core/sourcey-godoc dist/core/godoc-introspect && mkdir -p dist/core/sourcey-godoc && cp -R go/sourcey-godoc/go.mod go/sourcey-godoc/doc.go go/sourcey-godoc/cmd dist/core/sourcey-godoc/",
23
+ "build": "tsc && cp -r src/themes dist/ && cp src/client/*.js dist/client/ && cp -r src/og/fonts dist/og/ && rm -rf dist/core/sourcey-godoc dist/core/godoc-introspect && mkdir -p dist/core/sourcey-godoc && cp -R go/sourcey-godoc/go.mod go/sourcey-godoc/doc.go go/sourcey-godoc/cmd dist/core/sourcey-godoc/ && rm -rf dist/core/sourcey-rustdoc && mkdir -p dist/core/sourcey-rustdoc && cp -R rust/sourcey-rustdoc/Cargo.toml rust/sourcey-rustdoc/Cargo.lock rust/sourcey-rustdoc/README.md rust/sourcey-rustdoc/src rust/sourcey-rustdoc/tests dist/core/sourcey-rustdoc/",
24
24
  "watch": "npm run build && tsc --watch --preserveWatchOutput",
25
25
  "test": "vitest run",
26
26
  "test:watch": "vitest",
@@ -30,13 +30,13 @@
30
30
  "godoc:go:test": "cd go/sourcey-godoc && go test ./...",
31
31
  "godoc:go:vet": "cd go/sourcey-godoc && go vet ./...",
32
32
  "godoc:packages:test": "packaging/sourcey-godoc/render-package-managers.test.sh",
33
+ "cpp:release-gate": "node scripts/check-cpp-reference-quality.mjs",
33
34
  "typecheck": "tsc --noEmit",
34
35
  "prepublishOnly": "npm run build"
35
36
  },
36
37
  "dependencies": {
37
38
  "@apidevtools/json-schema-ref-parser": "^13.0.5",
38
39
  "@preact/preset-vite": "^2.10.4",
39
- "@readme/openapi-parser": "^4.0.0",
40
40
  "@resvg/resvg-js": "^2.6.2",
41
41
  "@tailwindcss/typography": "^0.5.19",
42
42
  "@tailwindcss/vite": "^4.2.2",
@@ -46,9 +46,10 @@
46
46
  "js-yaml": "^4.1.0",
47
47
  "marked": "^15.0.0",
48
48
  "mcp-parser": "^0.4.0",
49
- "moxygen": "^2.1.1",
49
+ "moxygen": "^2.1.8",
50
50
  "preact": "^10.28.4",
51
51
  "preact-render-to-string": "^6.6.6",
52
+ "sanitize-html": "^2.17.4",
52
53
  "satori": "^0.26.0",
53
54
  "shiki": "^4.0.2",
54
55
  "swagger2openapi": "^7.0.8",
@@ -56,8 +57,10 @@
56
57
  "vite": "^8.0.9"
57
58
  },
58
59
  "devDependencies": {
60
+ "@eslint/js": "^9.39.4",
59
61
  "@types/js-yaml": "^4.0.9",
60
62
  "@types/node": "^22.19.15",
63
+ "@types/sanitize-html": "^2.16.1",
61
64
  "eslint": "^9.0.0",
62
65
  "eslint-config-prettier": "^10.0.0",
63
66
  "prettier": "^3.4.0",
@@ -77,9 +80,12 @@
77
80
  "developer-documentation",
78
81
  "doxygen",
79
82
  "godoc",
83
+ "rustdoc",
80
84
  "golang",
85
+ "rust",
81
86
  "go-docs",
82
87
  "go-documentation",
88
+ "rust-docs",
83
89
  "mcp",
84
90
  "llms-txt",
85
91
  "static-docs"