sourcey 3.3.8 → 3.3.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/dist/cli.js CHANGED
@@ -1,13 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { defineCommand, runMain } from "citty";
3
- import { readFileSync } from "node:fs";
4
- import { dirname, join } from "node:path";
5
- import { fileURLToPath } from "node:url";
6
3
  import { buildDocs, buildSiteDocs } from "./index.js";
7
4
  import { loadConfig } from "./config.js";
8
5
  import { init } from "./init.js";
9
- const __dirname = dirname(fileURLToPath(import.meta.url));
10
- const pkg = JSON.parse(readFileSync(join(__dirname, "..", "package.json"), "utf8"));
6
+ import pkg from "../package.json" with { type: "json" };
11
7
  const build = defineCommand({
12
8
  meta: {
13
9
  name: "build",
@@ -1 +1 @@
1
- {"version":3,"file":"Head.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Head.tsx"],"names":[],"mappings":"AAIA,wBAAgB,IAAI,iCA6EnB"}
1
+ {"version":3,"file":"Head.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Head.tsx"],"names":[],"mappings":"AAKA,wBAAgB,IAAI,iCA8EnB"}
@@ -2,6 +2,7 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "preact/jsx-ru
2
2
  import { useContext } from "preact/hooks";
3
3
  import { SpecContext, OptionsContext, PageContext, SiteContext, NavigationContext } from "../../renderer/context.js";
4
4
  import { langIconCSS } from "../../utils/lang-icons.js";
5
+ import pkg from "../../../package.json" with { type: "json" };
5
6
  export function Head() {
6
7
  const site = useContext(SiteContext);
7
8
  const spec = useContext(SpecContext);
@@ -51,5 +52,5 @@ export function Head() {
51
52
  body { margin: 0; background: rgb(var(--color-background-light)); }
52
53
  .dark body { background: rgb(var(--color-background-dark)); }
53
54
  `;
54
- return (_jsxs("head", { children: [_jsx("meta", { charset: "utf-8" }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1" }), _jsx("title", { children: pageTitle }), _jsx("meta", { name: "description", content: pageDescription }), _jsx("meta", { name: "sourcey-search", content: `${options.assetBase}search-index.json` }), _jsx("style", { dangerouslySetInnerHTML: { __html: themeCSS } }), _jsx("style", { dangerouslySetInnerHTML: { __html: langIconCSS() } }), site.customCSS && _jsx("style", { dangerouslySetInnerHTML: { __html: site.customCSS } }), _jsx("script", { dangerouslySetInnerHTML: { __html: `(function(){var t=localStorage.getItem('sourcey-theme');if(t==='dark')document.documentElement.classList.add('dark')})()` } }), googleFontsUrl && (_jsxs(_Fragment, { children: [_jsx("link", { rel: "preconnect", href: "https://fonts.googleapis.com" }), _jsx("link", { rel: "preconnect", href: "https://fonts.gstatic.com", crossOrigin: "anonymous" }), _jsx("link", { rel: "stylesheet", href: googleFontsUrl })] })), _jsx("link", { rel: "stylesheet", href: `${options.assetBase}sourcey.css` }), site.favicon && _jsx("link", { rel: "icon", href: site.favicon })] }));
55
+ return (_jsxs("head", { children: [_jsx("meta", { charset: "utf-8" }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1" }), _jsx("title", { children: pageTitle }), _jsx("meta", { name: "description", content: pageDescription }), _jsx("meta", { name: "generator", content: `Sourcey ${pkg.version}` }), _jsx("meta", { name: "sourcey-search", content: `${options.assetBase}search-index.json` }), _jsx("style", { dangerouslySetInnerHTML: { __html: themeCSS } }), _jsx("style", { dangerouslySetInnerHTML: { __html: langIconCSS() } }), site.customCSS && _jsx("style", { dangerouslySetInnerHTML: { __html: site.customCSS } }), _jsx("script", { dangerouslySetInnerHTML: { __html: `(function(){var t=localStorage.getItem('sourcey-theme');if(t==='dark')document.documentElement.classList.add('dark')})()` } }), googleFontsUrl && (_jsxs(_Fragment, { children: [_jsx("link", { rel: "preconnect", href: "https://fonts.googleapis.com" }), _jsx("link", { rel: "preconnect", href: "https://fonts.gstatic.com", crossOrigin: "anonymous" }), _jsx("link", { rel: "stylesheet", href: googleFontsUrl })] })), _jsx("link", { rel: "stylesheet", href: `${options.assetBase}sourcey.css` }), site.favicon && _jsx("link", { rel: "icon", href: site.favicon })] }));
55
56
  }
package/dist/config.d.ts CHANGED
@@ -147,9 +147,15 @@ export interface ResolvedTab {
147
147
  groups?: ResolvedGroup[];
148
148
  doxygen?: ResolvedDoxygenConfig;
149
149
  }
150
+ export interface ResolvedPage {
151
+ /** Original config slug (e.g. "run/index") */
152
+ slug: string;
153
+ /** Absolute filesystem path to the .md/.mdx file */
154
+ file: string;
155
+ }
150
156
  export interface ResolvedGroup {
151
157
  label: string;
152
- pages: string[];
158
+ pages: ResolvedPage[];
153
159
  }
154
160
  export declare function loadConfig(cwd?: string): Promise<ResolvedConfig>;
155
161
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/config.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { access, readdir } from "node:fs/promises";
2
- import { resolve, dirname, basename, extname } from "node:path";
2
+ import { resolve, relative, dirname, basename, extname } from "node:path";
3
3
  import { createJiti } from "jiti";
4
4
  export function defineConfig(config) {
5
5
  return config;
@@ -181,11 +181,14 @@ async function resolveGroups(groups, tabName, configDir) {
181
181
  for (const pageSlug of group.pages) {
182
182
  if (pageSlug.includes("*")) {
183
183
  const expanded = await expandGlob(pageSlug, configDir);
184
- pages.push(...expanded);
184
+ for (const file of expanded) {
185
+ const rel = relative(configDir, file).replace(/\.[^.]+$/, "");
186
+ pages.push({ slug: rel, file });
187
+ }
185
188
  }
186
189
  else {
187
190
  const absPath = await resolvePagePath(pageSlug, configDir);
188
- pages.push(absPath);
191
+ pages.push({ slug: pageSlug, file: absPath });
189
192
  }
190
193
  }
191
194
  resolved.push({ label: group.group, pages });
@@ -108,18 +108,18 @@ function resolveIndexStyle(configured, groupMap, pages) {
108
108
  /**
109
109
  * Build index page HTML using sourcey's existing component markup.
110
110
  */
111
- function buildIndexHtml(style, tabSlug, _tabLabel, groupMap, pages) {
111
+ function buildIndexHtml(style, _tabSlug, _tabLabel, groupMap, pages) {
112
112
  if (style === "rich")
113
- return buildRichIndex(tabSlug, groupMap, pages);
113
+ return buildRichIndex(groupMap, pages);
114
114
  if (style === "structured")
115
- return buildStructuredIndex(tabSlug, groupMap, pages);
116
- return buildFlatIndex(tabSlug, groupMap);
115
+ return buildStructuredIndex(groupMap, pages);
116
+ return buildFlatIndex(groupMap);
117
117
  }
118
118
  /**
119
119
  * Rich: card grid with module name, description, and type count.
120
120
  * Uses sourcey's card-group/card-item CSS.
121
121
  */
122
- function buildRichIndex(tabSlug, groupMap, pages) {
122
+ function buildRichIndex(groupMap, pages) {
123
123
  const cards = [];
124
124
  for (const [, items] of groupMap) {
125
125
  const groupEntry = items.find((i) => i.kind === "group");
@@ -129,7 +129,7 @@ function buildRichIndex(tabSlug, groupMap, pages) {
129
129
  if (!page)
130
130
  continue;
131
131
  const typeCount = items.filter((i) => i.kind !== "group" && i.kind !== "namespace").length;
132
- const href = `${tabSlug}/${groupEntry.slug}.html`;
132
+ const href = `${groupEntry.slug}.html`;
133
133
  const desc = page.description || "";
134
134
  const meta = typeCount > 0
135
135
  ? `<p style="margin:0.5rem 0 0;font-size:0.8rem;opacity:0.5">${typeCount} type${typeCount !== 1 ? "s" : ""}</p>`
@@ -149,7 +149,7 @@ function buildRichIndex(tabSlug, groupMap, pages) {
149
149
  if (typeCount === 0)
150
150
  continue;
151
151
  const firstItem = items[0];
152
- const href = `${tabSlug}/${firstItem.slug}.html`;
152
+ const href = `${firstItem.slug}.html`;
153
153
  cards.push(`<a href="${href}" class="card-item">` +
154
154
  `<div class="card-item-inner">` +
155
155
  `<h3 class="card-item-title">${escHtml(key)}</h3>` +
@@ -165,7 +165,7 @@ function buildRichIndex(tabSlug, groupMap, pages) {
165
165
  * Structured: grouped list of types by module/namespace.
166
166
  * Rendered as markdown headings with link lists.
167
167
  */
168
- function buildStructuredIndex(tabSlug, groupMap, pages) {
168
+ function buildStructuredIndex(groupMap, pages) {
169
169
  const sections = [];
170
170
  for (const [key, items] of groupMap) {
171
171
  const groupEntry = items.find((i) => i.kind === "group");
@@ -175,10 +175,10 @@ function buildStructuredIndex(tabSlug, groupMap, pages) {
175
175
  continue;
176
176
  const links = [];
177
177
  if (groupEntry) {
178
- links.push(`- [Overview](${tabSlug}/${groupEntry.slug}.html)`);
178
+ links.push(`- [Overview](${groupEntry.slug}.html)`);
179
179
  }
180
180
  for (const t of types) {
181
- links.push(`- [${t.title}](${tabSlug}/${t.slug}.html)`);
181
+ links.push(`- [${t.title}](${t.slug}.html)`);
182
182
  }
183
183
  sections.push(`### ${title}\n\n${links.join("\n")}`);
184
184
  }
@@ -187,7 +187,7 @@ function buildStructuredIndex(tabSlug, groupMap, pages) {
187
187
  /**
188
188
  * Flat: alphabetical list categorized by kind.
189
189
  */
190
- function buildFlatIndex(tabSlug, groupMap) {
190
+ function buildFlatIndex(groupMap) {
191
191
  const byKind = new Map();
192
192
  for (const [, items] of groupMap) {
193
193
  for (const item of items) {
@@ -202,7 +202,7 @@ function buildFlatIndex(tabSlug, groupMap) {
202
202
  const sections = [];
203
203
  for (const [label, items] of byKind) {
204
204
  const sorted = items.sort((a, b) => a.title.localeCompare(b.title));
205
- const links = sorted.map((i) => `- [${i.title}](${tabSlug}/${i.slug}.html)`).join("\n");
205
+ const links = sorted.map((i) => `- [${i.title}](${i.slug}.html)`).join("\n");
206
206
  sections.push(`### ${label}\n\n${links}`);
207
207
  }
208
208
  return renderMarkdown(sections.join("\n\n"));
@@ -19,10 +19,10 @@ export type { PageHeading } from "../utils/markdown.js";
19
19
  */
20
20
  export declare function loadMarkdownPage(filePath: string, slug: string): Promise<MarkdownPage>;
21
21
  /**
22
- * Derive a URL slug from a file path.
22
+ * Derive a URL slug from a page path.
23
23
  * Preserves directory structure to avoid collisions:
24
24
  * "getting-started.md" → "getting-started"
25
- * "run/index.md" → "run/index"
25
+ * "run/index" → "run/index"
26
26
  * "run/install.md" → "run/install"
27
27
  */
28
28
  export declare function slugFromPath(filePath: string): string;
@@ -251,10 +251,10 @@ function extractFirstHeading(md) {
251
251
  return match ? match[1].trim() : undefined;
252
252
  }
253
253
  /**
254
- * Derive a URL slug from a file path.
254
+ * Derive a URL slug from a page path.
255
255
  * Preserves directory structure to avoid collisions:
256
256
  * "getting-started.md" → "getting-started"
257
- * "run/index.md" → "run/index"
257
+ * "run/index" → "run/index"
258
258
  * "run/install.md" → "run/install"
259
259
  */
260
260
  export function slugFromPath(filePath) {
@@ -63,8 +63,8 @@ export function buildNavFromPages(tab, pagesByPath) {
63
63
  if (tab.groups) {
64
64
  for (const group of tab.groups) {
65
65
  const items = [];
66
- for (const pagePath of group.pages) {
67
- const page = pagesByPath.get(pagePath);
66
+ for (const rp of group.pages) {
67
+ const page = pagesByPath.get(rp.slug);
68
68
  if (!page)
69
69
  continue;
70
70
  items.push({
@@ -44,8 +44,8 @@ export async function startDevServer(options) {
44
44
  watchPaths.push(tab.doxygen.xml);
45
45
  if (tab.groups) {
46
46
  for (const group of tab.groups) {
47
- for (const pagePath of group.pages) {
48
- watchPaths.push(pagePath);
47
+ for (const rp of group.pages) {
48
+ watchPaths.push(rp.file);
49
49
  }
50
50
  }
51
51
  }
@@ -62,8 +62,8 @@ export async function startDevServer(options) {
62
62
  }
63
63
  if (tab.groups) {
64
64
  for (const group of tab.groups) {
65
- for (const pagePath of group.pages) {
66
- map.set(resolve(pagePath), { kind: "markdown", tabSlug: tab.slug, pagePath });
65
+ for (const rp of group.pages) {
66
+ map.set(resolve(rp.file), { kind: "markdown", tabSlug: tab.slug, pagePath: rp.file, pageSlug: rp.slug });
67
67
  }
68
68
  }
69
69
  }
@@ -121,7 +121,7 @@ export async function startDevServer(options) {
121
121
  const { data } = snapshot;
122
122
  const start = performance.now();
123
123
  if (content.kind === "markdown") {
124
- const slug = slugFromPath(content.pagePath);
124
+ const slug = slugFromPath(content.pageSlug);
125
125
  log(`reloading ${shortPath(content.pagePath)}`);
126
126
  const page = await loadMarkdownPage(content.pagePath, slug);
127
127
  if (cache !== snapshot)
@@ -193,12 +193,12 @@ export async function startDevServer(options) {
193
193
  return;
194
194
  const pagesByPath = new Map();
195
195
  for (const group of tab.groups) {
196
- for (const pagePath of group.pages) {
197
- const slug = slugFromPath(pagePath);
196
+ for (const rp of group.pages) {
197
+ const slug = slugFromPath(rp.slug);
198
198
  const pageKey = tabPath(tab.slug, `${slug}.html`);
199
199
  const entry = data.pageMap.get(pageKey);
200
200
  if (entry?.currentPage.kind === "markdown") {
201
- pagesByPath.set(pagePath, entry.currentPage.markdown);
201
+ pagesByPath.set(rp.slug, entry.currentPage.markdown);
202
202
  }
203
203
  }
204
204
  }
@@ -370,10 +370,10 @@ async function loadSiteData(tabs) {
370
370
  else if (tab.groups) {
371
371
  const pagesByPath = new Map();
372
372
  for (const group of tab.groups) {
373
- for (const pagePath of group.pages) {
374
- const slug = slugFromPath(pagePath);
375
- const page = await loadMarkdownPage(pagePath, slug);
376
- pagesByPath.set(pagePath, page);
373
+ for (const rp of group.pages) {
374
+ const slug = slugFromPath(rp.slug);
375
+ const page = await loadMarkdownPage(rp.file, slug);
376
+ pagesByPath.set(rp.slug, page);
377
377
  pageMap.set(tabPath(tab.slug, `${slug}.html`), {
378
378
  spec: primarySpec,
379
379
  currentPage: { kind: "markdown", markdown: page },
package/dist/index.js CHANGED
@@ -78,10 +78,10 @@ export async function buildSiteDocs(options = {}) {
78
78
  else if (tab.groups) {
79
79
  const pagesByPath = new Map();
80
80
  for (const group of tab.groups) {
81
- for (const pagePath of group.pages) {
82
- const slug = slugFromPath(pagePath);
83
- const page = await loadMarkdownPage(pagePath, slug);
84
- pagesByPath.set(pagePath, page);
81
+ for (const rp of group.pages) {
82
+ const slug = slugFromPath(rp.slug);
83
+ const page = await loadMarkdownPage(rp.file, slug);
84
+ pagesByPath.set(rp.slug, page);
85
85
  sitePages.push({
86
86
  outputPath: tabPath(tab.slug, `${slug}.html`),
87
87
  currentPage: { kind: "markdown", markdown: page },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sourcey",
3
- "version": "3.3.8",
3
+ "version": "3.3.10",
4
4
  "description": "Open source documentation platform. API references, guides, static output.",
5
5
  "type": "module",
6
6
  "engines": {
@@ -63,16 +63,20 @@
63
63
  "api",
64
64
  "documentation",
65
65
  "static-site-generator",
66
- "docs"
66
+ "docs",
67
+ "markdown",
68
+ "api-docs",
69
+ "developer-documentation",
70
+ "doxygen"
67
71
  ],
68
- "author": "Kam Low <auscaster@gmail.com> (https://sourcey.com)",
72
+ "author": "Kam Low <oss@0state.com> (https://sourcey.com)",
69
73
  "license": "AGPL-3.0-only",
70
74
  "repository": {
71
75
  "type": "git",
72
- "url": "git+https://github.com/nilstate/sourcey.git"
76
+ "url": "git+https://github.com/sourcey/sourcey.git"
73
77
  },
74
78
  "bugs": {
75
- "url": "https://github.com/nilstate/sourcey/issues"
79
+ "url": "https://github.com/sourcey/sourcey/issues"
76
80
  },
77
- "homepage": "https://github.com/nilstate/sourcey#readme"
81
+ "homepage": "https://sourcey.com"
78
82
  }