sourcey 3.6.4 → 3.6.6

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 (64) hide show
  1. package/README.md +38 -5
  2. package/dist/adapters/shared.js +1 -1
  3. package/dist/astro/index.d.ts +89 -0
  4. package/dist/astro/index.d.ts.map +1 -0
  5. package/dist/astro/index.js +299 -0
  6. package/dist/cli.js +8 -0
  7. package/dist/client/reader-controls.js +81 -0
  8. package/dist/client/reader.d.ts +5 -0
  9. package/dist/client/reader.d.ts.map +1 -0
  10. package/dist/client/reader.js +5 -0
  11. package/dist/client/tabs.js +144 -95
  12. package/dist/components/App.d.ts.map +1 -1
  13. package/dist/components/App.js +1 -1
  14. package/dist/components/layout/Head.d.ts.map +1 -1
  15. package/dist/components/layout/Head.js +6 -4
  16. package/dist/components/layout/Page.d.ts.map +1 -1
  17. package/dist/components/layout/Page.js +20 -14
  18. package/dist/components/layout/Reader.d.ts +5 -0
  19. package/dist/components/layout/Reader.d.ts.map +1 -0
  20. package/dist/components/layout/Reader.js +64 -0
  21. package/dist/components/layout/SearchDialog.d.ts +2 -0
  22. package/dist/components/layout/SearchDialog.d.ts.map +1 -0
  23. package/dist/components/layout/SearchDialog.js +4 -0
  24. package/dist/components/openapi/Operation.d.ts.map +1 -1
  25. package/dist/components/openapi/Operation.js +2 -2
  26. package/dist/components/openapi/Tags.js +1 -1
  27. package/dist/config.d.ts +56 -4
  28. package/dist/config.d.ts.map +1 -1
  29. package/dist/config.js +18 -10
  30. package/dist/core/doxygen-loader.js +1 -1
  31. package/dist/core/loader.js +2 -2
  32. package/dist/core/markdown-loader.d.ts +2 -0
  33. package/dist/core/markdown-loader.d.ts.map +1 -1
  34. package/dist/core/markdown-loader.js +1 -0
  35. package/dist/core/navigation.js +1 -1
  36. package/dist/core/parser.js +1 -1
  37. package/dist/dev-server.d.ts.map +1 -1
  38. package/dist/dev-server.js +3 -4
  39. package/dist/index.d.ts +4 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +16 -112
  42. package/dist/init.js +4 -4
  43. package/dist/renderer/html-builder.d.ts.map +1 -1
  44. package/dist/renderer/html-builder.js +6 -27
  45. package/dist/renderer/static-files.d.ts +6 -0
  46. package/dist/renderer/static-files.d.ts.map +1 -0
  47. package/dist/renderer/static-files.js +78 -0
  48. package/dist/site.d.ts +38 -0
  49. package/dist/site.d.ts.map +1 -0
  50. package/dist/site.js +159 -0
  51. package/dist/themes/assets.d.ts +8 -0
  52. package/dist/themes/assets.d.ts.map +1 -0
  53. package/dist/themes/assets.js +16 -0
  54. package/dist/themes/default/sourcey.css +305 -60
  55. package/dist/themes/reader/sourcey.css +1024 -0
  56. package/dist/themes/registry.d.ts +20 -0
  57. package/dist/themes/registry.d.ts.map +1 -0
  58. package/dist/themes/registry.js +8 -0
  59. package/dist/utils/server-warnings.d.ts +4 -0
  60. package/dist/utils/server-warnings.d.ts.map +1 -0
  61. package/dist/utils/server-warnings.js +41 -0
  62. package/dist/vite-plugin.d.ts.map +1 -1
  63. package/dist/vite-plugin.js +1 -53
  64. package/package.json +9 -4
@@ -0,0 +1,20 @@
1
+ export declare const themeDefinitions: {
2
+ readonly default: {
3
+ client: string;
4
+ css: string[];
5
+ };
6
+ readonly minimal: {
7
+ client: string;
8
+ css: string[];
9
+ };
10
+ readonly "api-first": {
11
+ client: string;
12
+ css: string[];
13
+ };
14
+ readonly reader: {
15
+ readonly client: "reader";
16
+ readonly css: readonly ["default/sourcey.css", "reader/sourcey.css"];
17
+ };
18
+ };
19
+ export type ThemeName = keyof typeof themeDefinitions;
20
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/themes/registry.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;CAKnB,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** Built-in themes and their packaged assets. Themes may deliberately share a foundation. */
2
+ const foundation = { client: "index", css: ["default/sourcey.css"] };
3
+ export const themeDefinitions = {
4
+ default: foundation,
5
+ minimal: foundation,
6
+ "api-first": foundation,
7
+ reader: { client: "reader", css: ["default/sourcey.css", "reader/sourcey.css"] },
8
+ };
@@ -0,0 +1,4 @@
1
+ import type { NormalizedSpec } from "../core/types.js";
2
+ export declare function findPlaceholderServerUrls(spec: Pick<NormalizedSpec, "servers">): string[];
3
+ export declare function isPlaceholderServerUrl(serverUrl: string): boolean;
4
+ //# sourceMappingURL=server-warnings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-warnings.d.ts","sourceRoot":"","sources":["../../src/utils/server-warnings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAWvD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG,MAAM,EAAE,CAQzF;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAajE"}
@@ -0,0 +1,41 @@
1
+ const PLACEHOLDER_HOSTS = new Set([
2
+ "localhost",
3
+ "0.0.0.0",
4
+ "::1",
5
+ "example.com",
6
+ "example.org",
7
+ "example.net",
8
+ ]);
9
+ export function findPlaceholderServerUrls(spec) {
10
+ const urls = new Set();
11
+ for (const server of spec.servers) {
12
+ if (isPlaceholderServerUrl(server.url))
13
+ urls.add(server.url);
14
+ }
15
+ return [...urls];
16
+ }
17
+ export function isPlaceholderServerUrl(serverUrl) {
18
+ const hostname = extractHostname(serverUrl);
19
+ if (!hostname)
20
+ return false;
21
+ const normalized = hostname.toLowerCase().replace(/^\[|\]$/g, "");
22
+ if (PLACEHOLDER_HOSTS.has(normalized))
23
+ return true;
24
+ if (/^127(?:\.\d{1,3}){3}$/.test(normalized))
25
+ return true;
26
+ return (normalized.endsWith(".example.com") ||
27
+ normalized.endsWith(".example.org") ||
28
+ normalized.endsWith(".example.net"));
29
+ }
30
+ function extractHostname(serverUrl) {
31
+ const trimmed = serverUrl.trim();
32
+ if (!trimmed || trimmed.startsWith("/") || trimmed.startsWith("{"))
33
+ return null;
34
+ const candidate = /^[a-z][a-z\d+.-]*:\/\//i.test(trimmed) ? trimmed : `http://${trimmed}`;
35
+ try {
36
+ return new URL(candidate).hostname || null;
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAKlD,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC;IACvB,iEAAiE;IACjE,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChD,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,2FAA2F;IAC3F,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CA6HnE"}
1
+ {"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAMlD,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC;IACvB,iEAAiE;IACjE,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChD,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,2FAA2F;IAC3F,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CA6HnE"}
@@ -1,5 +1,6 @@
1
1
  import { resolve, extname } from "node:path";
2
2
  import { normalizeBaseUrl } from "./site-url.js";
3
+ import { contentTypeForPath, outputPathFromRequestPath } from "./renderer/static-files.js";
3
4
  /**
4
5
  * Vite plugin for Sourcey.
5
6
  * - Injects SSR middleware that renders pages on the fly
@@ -116,56 +117,3 @@ export function sourceyPlugin(options) {
116
117
  },
117
118
  };
118
119
  }
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,6 +1,6 @@
1
1
  {
2
2
  "name": "sourcey",
3
- "version": "3.6.4",
3
+ "version": "3.6.6",
4
4
  "description": "Precision documentation from OpenAPI, MCP, Doxygen, godoc, rustdoc, and Markdown. Static HTML you own.",
5
5
  "type": "module",
6
6
  "engines": {
@@ -13,6 +13,10 @@
13
13
  ".": {
14
14
  "types": "./dist/index.d.ts",
15
15
  "import": "./dist/index.js"
16
+ },
17
+ "./astro": {
18
+ "types": "./dist/astro/index.d.ts",
19
+ "import": "./dist/astro/index.js"
16
20
  }
17
21
  },
18
22
  "files": [
@@ -20,8 +24,9 @@
20
24
  "LICENSE"
21
25
  ],
22
26
  "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/ && 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/",
27
+ "build": "rm -rf dist && tsc && node scripts/copy-theme-assets.mjs && 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
28
  "watch": "npm run build && tsc --watch --preserveWatchOutput",
29
+ "pretest": "npm run build",
25
30
  "test": "vitest run",
26
31
  "test:watch": "vitest",
27
32
  "lint": "eslint src/ test/",
@@ -46,7 +51,7 @@
46
51
  "js-yaml": "^4.1.0",
47
52
  "marked": "^15.0.0",
48
53
  "mcp-parser": "^0.4.0",
49
- "moxygen": "^2.1.10",
54
+ "moxygen": "^2.1.12",
50
55
  "preact": "^10.28.4",
51
56
  "preact-render-to-string": "^6.6.6",
52
57
  "sanitize-html": "^2.17.4",
@@ -66,7 +71,7 @@
66
71
  "prettier": "^3.4.0",
67
72
  "typescript": "^5.7.0",
68
73
  "typescript-eslint": "^8.0.0",
69
- "vitest": "^3.0.0"
74
+ "vitest": "^4.1.9"
70
75
  },
71
76
  "keywords": [
72
77
  "openapi",