@purestack/ts-common 1.1.25 → 1.1.26

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.
@@ -1,4 +1,4 @@
1
- /*! @purestack/ts-common v1.1.25 | (c) 2026 Ahmed Yasin Koculu | MIT License */
1
+ /*! @purestack/ts-common v1.1.26 | (c) 2026 Ahmed Yasin Koculu | MIT License */
2
2
 
3
3
  import { SemanticTone, ThemeOptions, ThemeOptionsInput, ThemeStylesheetLink } from "@purestack/ts-style";
4
4
  import { DeepPartial } from "@purestack/ts-util";
@@ -450,12 +450,13 @@ interface FrontmatterLayoutOptions {
450
450
  /**
451
451
  * Enables table-of-contents rendering when the page outline contains items.
452
452
  *
453
- * The TOC appears only when this flag is `true` and the page actually has
454
- * extracted headings.
453
+ * `true` shows the TOC when the rendered article has headings. `always`
454
+ * retains the panel and runtime even without headings, for client apps
455
+ * that populate the article and call `window.tsSsgPageToc.refresh()`.
455
456
  *
456
457
  * Defaults to the site-level `pageToc.enabled` setting.
457
458
  */
458
- showToc: boolean;
459
+ showToc: boolean | 'always';
459
460
  /**
460
461
  * Controls whether the generated page navigation menu is rendered.
461
462
  *
@@ -598,7 +599,6 @@ interface PageContext {
598
599
  site: SiteConfig;
599
600
  pageInfo: PageInfo;
600
601
  navigation?: TsSsgNavigation;
601
- outline?: PageOutlineItem[];
602
602
  theme?: ThemeOptions;
603
603
  basePath: string;
604
604
  locale?: string;
@@ -612,7 +612,7 @@ interface PageContext {
612
612
  }
613
613
  //#endregion
614
614
  //#region packages/ts-common/src/isTocEnabled.d.ts
615
- export declare function isTocEnabled(frontmatter: PageFrontmatter, outline: PageOutlineItem[] | undefined): boolean;
615
+ export declare function isTocEnabled(frontmatter: PageFrontmatter, outline: PageOutlineItem[]): boolean;
616
616
  //#endregion
617
617
  //#region packages/ts-common/src/page-template-types.d.ts
618
618
  interface PageInfo {
@@ -641,7 +641,6 @@ interface PageTemplateInput extends PageHeadConfigInput {
641
641
  styleLinks?: ThemeStylesheetLink[];
642
642
  templateName: string;
643
643
  navigation?: PageNavigation;
644
- outline?: PageOutlineItem[];
645
644
  headerHtml?: string;
646
645
  footerHtml?: string;
647
646
  }
@@ -650,6 +649,12 @@ type PageTemplateMap = Record<string, PageTemplate>;
650
649
  /** Composes head markup before the page template receives it. */
651
650
  type PageHeadTemplate = (input: PageTemplateInput) => TSNode<'head'> | Promise<TSNode<'head'>>;
652
651
  //#endregion
652
+ //#region packages/ts-common/src/pageOutline.d.ts
653
+ /** Custom templates can mark their article with data-page-content. */
654
+ export declare function resolvePageContent(document: Document): Element;
655
+ /** One DOM query reserves page IDs; only headings in the article become entries. */
656
+ export declare function collectPageOutline(content: Element): PageOutlineItem[];
657
+ //#endregion
653
658
  //#region packages/ts-common/src/resolvePageContext.d.ts
654
659
  export declare function resolvePageContext(head: unknown): PageContext;
655
660
  export declare function tryResolvePageContext(head: unknown): PageContext | undefined;
@@ -674,7 +679,7 @@ interface PageAssetInput {
674
679
  }
675
680
  /** Each build/session owns its processors; core handles generated files and invalidation. */
676
681
  interface SiteAssets {
677
- /** A unique path segment under /_assets/. */
682
+ /** A unique path segment under /assets/. */
678
683
  namespace: string;
679
684
  /** Ordered within a page; different pages may run concurrently. Input methods expire when this call completes. */
680
685
  processPage: (input: PageAssetInput) => void | Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"ts-common.d.mts","names":[],"sources":["../src/code-highlighter.ts","../src/codeLanguages.ts","../src/consent-types.ts","../src/logo-types.ts","../src/navMenu-types.ts","../src/site-config-types.ts","../src/frontmatter-types.ts","../src/ts-ssg-context.ts","../src/isTocEnabled.ts","../src/page-template-types.ts","../src/resolvePageContext.ts","../src/site-assets.ts","../src/site-search.ts","../src/site-styles.ts"],"mappings":";;;;;UACiB;EACf,aAAa,cAAc,2BAA2B;;EAEtD,qBAAqB;;;;qBCiFV;qBAQA,uBAAuB;wBAMpB,sBAAsB;;;UCnGrB;EACf;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;UAGe;;EAEf;EACA;EACA;EACA;EACA;EACA,SAAS;;UAGM;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YAAY;EACZ,UAAU;;;;KCzCA;KACA;KACA;KACA;KACA;KACA;UAEK;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS;EACT,OAAO;EACP,aAAa;EACb,YAAY;EACZ,gBAAgB;EAChB,QAAQ;EACR,OAAO;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;UAIe;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;UAIe,uBAAuB,YAAY;EAClD;;;;KCtEU;KACA;UAEK;EACf,OAAO;EACP;EACA;EACA;EACA,SAAS;EACT;EACA,OAAO;;EAEP;;EAEA;;UAGe;EACf;EACA;EACA;EACA,WAAW;EACX;EACA;EACA;EACA;EACA,OAAO;;UAGQ;EACf;EACA;;UAGe;EACf,WAAW;EACX,OAAO;;UAGQ;EACf,MAAM;EACN;EACA;EACA,OAAO;EACP,QAAQ;EACR,MAAM;EACN,YAAY;;;;;UCrCG;EACf;EACA;EACA;EACA;EACA;EACA;EACA,MAAM;EACN,YAAY;EACZ,SAAS;EACT,SAAS;EACT,MAAM;EACN,KAAK;;;;;EAKL;;UAGe,mBAAmB;;EAElC,YAAY;EACZ;EACA,OAAO;EACP,YAAY;EACZ,QAAQ;EACR,UAAU;EACV,OAAO;EACP,UAAU;EACV,YAAY;EACZ,WAAW;EACX,UAAU;;;UAIK;GACd;;UAGc;;EAEf;;EAEA;;UAGe;EACf;EACA,MAAM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"}
1
+ {"version":3,"file":"ts-common.d.mts","names":[],"sources":["../src/code-highlighter.ts","../src/codeLanguages.ts","../src/consent-types.ts","../src/logo-types.ts","../src/navMenu-types.ts","../src/site-config-types.ts","../src/frontmatter-types.ts","../src/ts-ssg-context.ts","../src/isTocEnabled.ts","../src/page-template-types.ts","../src/pageOutline.ts","../src/resolvePageContext.ts","../src/site-assets.ts","../src/site-search.ts","../src/site-styles.ts"],"mappings":";;;;;UACiB;EACf,aAAa,cAAc,2BAA2B;;EAEtD,qBAAqB;;;;qBCiFV;qBAQA,uBAAuB;wBAMpB,sBAAsB;;;UCnGrB;EACf;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;UAGe;;EAEf;EACA;EACA;EACA;EACA;EACA,SAAS;;UAGM;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YAAY;EACZ,UAAU;;;;KCzCA;KACA;KACA;KACA;KACA;KACA;UAEK;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS;EACT,OAAO;EACP,aAAa;EACb,YAAY;EACZ,gBAAgB;EAChB,QAAQ;EACR,OAAO;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;UAIe;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;UAIe,uBAAuB,YAAY;EAClD;;;;KCtEU;KACA;UAEK;EACf,OAAO;EACP;EACA;EACA;EACA,SAAS;EACT;EACA,OAAO;;EAEP;;EAEA;;UAGe;EACf;EACA;EACA;EACA,WAAW;EACX;EACA;EACA;EACA;EACA,OAAO;;UAGQ;EACf;EACA;;UAGe;EACf,WAAW;EACX,OAAO;;UAGQ;EACf,MAAM;EACN;EACA;EACA,OAAO;EACP,QAAQ;EACR,MAAM;EACN,YAAY;;;;;UCrCG;EACf;EACA;EACA;EACA;EACA;EACA;EACA,MAAM;EACN,YAAY;EACZ,SAAS;EACT,SAAS;EACT,MAAM;EACN,KAAK;;;;;EAKL;;UAGe,mBAAmB;;EAElC,YAAY;EACZ;EACA,OAAO;EACP,YAAY;EACZ,QAAQ;EACR,UAAU;EACV,OAAO;EACP,UAAU;EACV,YAAY;EACZ,WAAW;EACX,UAAU;;;UAIK;GACd;;UAGc;;EAEf;;EAEA;;UAGe;EACf;EACA,MAAM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"}
@@ -1,4 +1,4 @@
1
- /*! @purestack/ts-common v1.1.25 | (c) 2026 Ahmed Yasin Koculu | MIT License */
1
+ /*! @purestack/ts-common v1.1.26 | (c) 2026 Ahmed Yasin Koculu | MIT License */
2
2
 
3
3
  //#region packages/ts-common/src/codeLanguages.ts
4
4
  const codeLanguages = {
@@ -235,18 +235,70 @@ function normalizeCodeLanguage(value) {
235
235
  }
236
236
 
237
237
  //#endregion
238
- //#region packages/ts-common/src/isTocEnabled.ts
239
- function isTocEnabled(frontmatter, outline) {
240
- return frontmatter.layout.showToc && hasVisibleTocItems(outline ?? []);
238
+ //#region packages/ts-common/src/pageOutline.ts
239
+ /** Custom templates can mark their article with data-page-content. */
240
+ function resolvePageContent(document) {
241
+ return document.querySelector("[data-page-content]") ?? document.querySelector(".doc-main .doc-content") ?? document.querySelector("main") ?? document.body;
242
+ }
243
+ function slugifyHeading(title) {
244
+ return title.toLowerCase().replace(/['"`]/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "") || "section";
245
+ }
246
+ /** One DOM query reserves page IDs; only headings in the article become entries. */
247
+ function collectPageOutline(content) {
248
+ const documentRoot = content.ownerDocument?.documentElement;
249
+ const root = documentRoot?.contains(content) ? documentRoot : content;
250
+ const elements = root.querySelectorAll("h1, h2, h3, [id]");
251
+ const ids = /* @__PURE__ */ new Set();
252
+ if (root.id) ids.add(root.id);
253
+ for (const element of elements) if (element.id) ids.add(element.id);
254
+ const outline = [];
255
+ const ancestors = [];
256
+ const counts = /* @__PURE__ */ new Map();
257
+ for (const element of elements) {
258
+ const tag = element.tagName.toLowerCase();
259
+ if (tag !== "h1" && tag !== "h2" && tag !== "h3") continue;
260
+ if (!content.contains(element)) continue;
261
+ if (element.closest("[data-toc-ignore], .page-toc, pre, template, dialog")) continue;
262
+ const title = element.textContent?.trim() ?? "";
263
+ if (!title) continue;
264
+ if (!element.id) {
265
+ const base = slugifyHeading(title);
266
+ let count = counts.get(base) ?? 1;
267
+ let id = count === 1 ? base : `${base}-${count}`;
268
+ while (ids.has(id)) {
269
+ count += 1;
270
+ id = `${base}-${count}`;
271
+ }
272
+ counts.set(base, count + 1);
273
+ ids.add(id);
274
+ element.id = id;
275
+ }
276
+ const depth = Number(tag[1]);
277
+ const item = {
278
+ id: element.id,
279
+ title,
280
+ depth
281
+ };
282
+ while (ancestors.length && (ancestors.at(-1)?.depth ?? 0) >= depth) ancestors.pop();
283
+ const parent = ancestors.at(-1);
284
+ if (parent) {
285
+ parent.children ??= [];
286
+ parent.children.push(item);
287
+ } else outline.push(item);
288
+ ancestors.push(item);
289
+ }
290
+ return outline;
241
291
  }
242
- function hasVisibleTocItems(outline) {
292
+ function visiblePageOutline(outline) {
243
293
  const [item] = outline;
244
- if (!item) return false;
245
- if (outline.length !== 1 || !isDocumentHeading(item)) return true;
246
- return (item.children?.length ?? 0) > 0;
294
+ return outline.length === 1 && item?.depth === 1 ? item.children ?? [] : outline;
247
295
  }
248
- function isDocumentHeading(item) {
249
- return item.depth === 1;
296
+
297
+ //#endregion
298
+ //#region packages/ts-common/src/isTocEnabled.ts
299
+ function isTocEnabled(frontmatter, outline) {
300
+ const { showToc } = frontmatter.layout;
301
+ return showToc === "always" || showToc && visiblePageOutline(outline).length > 0;
250
302
  }
251
303
 
252
304
  //#endregion
@@ -274,5 +326,5 @@ function tryResolvePageContext(head) {
274
326
  }
275
327
 
276
328
  //#endregion
277
- export { DEFAULT_CODE_LANGUAGES, LANGUAGE_BY_EXTENSION, isTocEnabled, normalizeCodeLanguage, resolvePageContext, tryResolvePageContext };
329
+ export { DEFAULT_CODE_LANGUAGES, LANGUAGE_BY_EXTENSION, collectPageOutline, isTocEnabled, normalizeCodeLanguage, resolvePageContent, resolvePageContext, tryResolvePageContext };
278
330
  //# sourceMappingURL=ts-common.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ts-common.mjs","names":[],"sources":["../src/codeLanguages.ts","../src/isTocEnabled.ts","../src/resolvePageContext.ts"],"sourcesContent":["interface CodeLanguage {\n aliases?: string[]\n extensions?: string[]\n}\n\n// Use Shiki names (including its aliases) as the common language identifiers.\nconst codeLanguages: Record<string, CodeLanguage> = {\n bash: {\n aliases: ['sh', 'shell', 'shellscript', 'zsh'],\n extensions: ['.sh', '.bash', '.zsh'],\n },\n bat: { aliases: ['batch', 'cmd', 'dos'], extensions: ['.bat', '.cmd'] },\n c: { extensions: ['.c', '.h'] },\n cmake: { extensions: ['.cmake'] },\n cpp: {\n aliases: ['c++', 'cc', 'cxx', 'h++', 'hpp', 'hxx'],\n extensions: ['.cc', '.cpp', '.cxx', '.hh', '.hpp', '.hxx'],\n },\n csharp: { aliases: ['c#', 'cs'], extensions: ['.cs', '.csx'] },\n css: { extensions: ['.css'] },\n dart: { extensions: ['.dart'] },\n diff: { aliases: ['patch'], extensions: ['.diff', '.patch'] },\n dockerfile: { aliases: ['docker'], extensions: ['.dockerfile'] },\n elixir: { aliases: ['ex', 'exs'], extensions: ['.ex', '.exs'] },\n erlang: { aliases: ['erl'], extensions: ['.erl', '.hrl'] },\n fsharp: { aliases: ['f#', 'fs'], extensions: ['.fs', '.fsi', '.fsx'] },\n go: { aliases: ['golang'], extensions: ['.go'] },\n graphql: { aliases: ['gql'], extensions: ['.graphql', '.gql'] },\n groovy: { extensions: ['.groovy', '.gradle'] },\n html: { aliases: ['htm'], extensions: ['.html', '.htm'] },\n http: { aliases: ['https'], extensions: ['.http', '.rest'] },\n ini: { aliases: ['properties'], extensions: ['.ini', '.cfg', '.properties'] },\n java: { extensions: ['.java'] },\n javascript: {\n aliases: ['js', 'cjs', 'mjs'],\n extensions: ['.js', '.cjs', '.mjs'],\n },\n json: { extensions: ['.json'] },\n jsonc: { extensions: ['.jsonc'] },\n jsx: { extensions: ['.jsx'] },\n kotlin: { aliases: ['kt', 'kts'], extensions: ['.kt', '.kts'] },\n less: { extensions: ['.less'] },\n lua: { extensions: ['.lua'] },\n makefile: { aliases: ['make', 'mk'], extensions: ['.mk', '.mak'] },\n markdown: {\n aliases: ['md', 'mkd', 'mdown'],\n extensions: ['.md', '.markdown', '.mkd', '.mdown'],\n },\n mdx: { aliases: ['rmdx'], extensions: ['.mdx', '.rmdx'] },\n 'objective-c': { aliases: ['objc', 'objectivec'], extensions: ['.m'] },\n perl: { aliases: ['pl', 'pm'], extensions: ['.pl', '.pm'] },\n php: { extensions: ['.php', '.phtml'] },\n powershell: {\n aliases: ['ps', 'ps1', 'pwsh'],\n extensions: ['.ps1', '.psm1', '.psd1'],\n },\n python: {\n aliases: ['py', 'py3', 'python3'],\n extensions: ['.py', '.pyw', '.pyi'],\n },\n r: { extensions: ['.r'] },\n ruby: {\n aliases: ['rb', 'gemspec'],\n extensions: ['.rb', '.rake', '.gemspec'],\n },\n rust: { aliases: ['rs'], extensions: ['.rs'] },\n scala: { extensions: ['.scala', '.sc'] },\n scss: { extensions: ['.scss'] },\n sql: { extensions: ['.sql'] },\n swift: { extensions: ['.swift'] },\n text: { aliases: ['txt', 'plaintext'], extensions: ['.txt', '.text'] },\n toml: { extensions: ['.toml'] },\n 'ts-tags': { aliases: ['lit'] },\n tsx: { extensions: ['.tsx'] },\n typescript: {\n aliases: ['ts', 'cts', 'mts'],\n extensions: ['.ts', '.cts', '.mts'],\n },\n xml: {\n aliases: ['svg', 'xhtml'],\n extensions: ['.xml', '.svg', '.xhtml', '.xsd', '.xsl', '.xslt'],\n },\n yaml: { aliases: ['yml'], extensions: ['.yaml', '.yml'] },\n}\n\nexport const DEFAULT_CODE_LANGUAGES = Object.keys(codeLanguages)\n\nconst languageAliases = new Map(\n Object.entries(codeLanguages).flatMap(([language, { aliases = [] }]) =>\n aliases.map((alias) => [alias, language] as const),\n ),\n)\n\nexport const LANGUAGE_BY_EXTENSION: Record<string, string> = Object.fromEntries(\n Object.entries(codeLanguages).flatMap(([language, { extensions = [] }]) =>\n extensions.map((extension) => [extension, language]),\n ),\n)\n\nexport function normalizeCodeLanguage(value: string): string {\n const normalized = value.trim().toLowerCase()\n return languageAliases.get(normalized) ?? normalized\n}\n","import type { PageFrontmatter } from './frontmatter-types'\nimport type { PageOutlineItem } from './ts-ssg-context'\n\nexport function isTocEnabled(\n frontmatter: PageFrontmatter,\n outline: PageOutlineItem[] | undefined,\n) {\n return frontmatter.layout.showToc && hasVisibleTocItems(outline ?? [])\n}\n\nfunction hasVisibleTocItems(outline: PageOutlineItem[]) {\n const [item] = outline\n if (!item) return false\n if (outline.length !== 1 || !isDocumentHeading(item)) return true\n return (item.children?.length ?? 0) > 0\n}\n\nfunction isDocumentHeading(item: PageOutlineItem) {\n return item.depth === 1\n}\n","import type { PageContext } from './ts-ssg-context'\n\ntype ContextCarrier = {\n pageContext?: PageContext\n}\n\ntype HeadLike = {\n ctx?: unknown[]\n}\n\nfunction hasPageContext(value: unknown): value is ContextCarrier {\n return typeof value === 'object' && value !== null && 'pageContext' in value\n}\n\nfunction hasContextStack(value: unknown): value is HeadLike {\n return typeof value === 'object' && value !== null && 'ctx' in value\n}\n\nexport function resolvePageContext(head: unknown): PageContext {\n const stack = hasContextStack(head) && Array.isArray(head.ctx) ? head.ctx : []\n for (const ctx of stack) {\n if (!hasPageContext(ctx)) continue\n if (ctx.pageContext) return ctx.pageContext\n }\n throw new Error('pageContext is not available in the Regor context stack.')\n}\n\nexport function tryResolvePageContext(head: unknown): PageContext | undefined {\n const stack = hasContextStack(head) && Array.isArray(head.ctx) ? head.ctx : []\n for (const ctx of stack) {\n if (!hasPageContext(ctx)) continue\n if (ctx.pageContext) return ctx.pageContext\n }\n return undefined\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ts-common.mjs","names":[],"sources":["../src/codeLanguages.ts","../src/pageOutline.ts","../src/isTocEnabled.ts","../src/resolvePageContext.ts"],"sourcesContent":["interface CodeLanguage {\n aliases?: string[]\n extensions?: string[]\n}\n\n// Use Shiki names (including its aliases) as the common language identifiers.\nconst codeLanguages: Record<string, CodeLanguage> = {\n bash: {\n aliases: ['sh', 'shell', 'shellscript', 'zsh'],\n extensions: ['.sh', '.bash', '.zsh'],\n },\n bat: { aliases: ['batch', 'cmd', 'dos'], extensions: ['.bat', '.cmd'] },\n c: { extensions: ['.c', '.h'] },\n cmake: { extensions: ['.cmake'] },\n cpp: {\n aliases: ['c++', 'cc', 'cxx', 'h++', 'hpp', 'hxx'],\n extensions: ['.cc', '.cpp', '.cxx', '.hh', '.hpp', '.hxx'],\n },\n csharp: { aliases: ['c#', 'cs'], extensions: ['.cs', '.csx'] },\n css: { extensions: ['.css'] },\n dart: { extensions: ['.dart'] },\n diff: { aliases: ['patch'], extensions: ['.diff', '.patch'] },\n dockerfile: { aliases: ['docker'], extensions: ['.dockerfile'] },\n elixir: { aliases: ['ex', 'exs'], extensions: ['.ex', '.exs'] },\n erlang: { aliases: ['erl'], extensions: ['.erl', '.hrl'] },\n fsharp: { aliases: ['f#', 'fs'], extensions: ['.fs', '.fsi', '.fsx'] },\n go: { aliases: ['golang'], extensions: ['.go'] },\n graphql: { aliases: ['gql'], extensions: ['.graphql', '.gql'] },\n groovy: { extensions: ['.groovy', '.gradle'] },\n html: { aliases: ['htm'], extensions: ['.html', '.htm'] },\n http: { aliases: ['https'], extensions: ['.http', '.rest'] },\n ini: { aliases: ['properties'], extensions: ['.ini', '.cfg', '.properties'] },\n java: { extensions: ['.java'] },\n javascript: {\n aliases: ['js', 'cjs', 'mjs'],\n extensions: ['.js', '.cjs', '.mjs'],\n },\n json: { extensions: ['.json'] },\n jsonc: { extensions: ['.jsonc'] },\n jsx: { extensions: ['.jsx'] },\n kotlin: { aliases: ['kt', 'kts'], extensions: ['.kt', '.kts'] },\n less: { extensions: ['.less'] },\n lua: { extensions: ['.lua'] },\n makefile: { aliases: ['make', 'mk'], extensions: ['.mk', '.mak'] },\n markdown: {\n aliases: ['md', 'mkd', 'mdown'],\n extensions: ['.md', '.markdown', '.mkd', '.mdown'],\n },\n mdx: { aliases: ['rmdx'], extensions: ['.mdx', '.rmdx'] },\n 'objective-c': { aliases: ['objc', 'objectivec'], extensions: ['.m'] },\n perl: { aliases: ['pl', 'pm'], extensions: ['.pl', '.pm'] },\n php: { extensions: ['.php', '.phtml'] },\n powershell: {\n aliases: ['ps', 'ps1', 'pwsh'],\n extensions: ['.ps1', '.psm1', '.psd1'],\n },\n python: {\n aliases: ['py', 'py3', 'python3'],\n extensions: ['.py', '.pyw', '.pyi'],\n },\n r: { extensions: ['.r'] },\n ruby: {\n aliases: ['rb', 'gemspec'],\n extensions: ['.rb', '.rake', '.gemspec'],\n },\n rust: { aliases: ['rs'], extensions: ['.rs'] },\n scala: { extensions: ['.scala', '.sc'] },\n scss: { extensions: ['.scss'] },\n sql: { extensions: ['.sql'] },\n swift: { extensions: ['.swift'] },\n text: { aliases: ['txt', 'plaintext'], extensions: ['.txt', '.text'] },\n toml: { extensions: ['.toml'] },\n 'ts-tags': { aliases: ['lit'] },\n tsx: { extensions: ['.tsx'] },\n typescript: {\n aliases: ['ts', 'cts', 'mts'],\n extensions: ['.ts', '.cts', '.mts'],\n },\n xml: {\n aliases: ['svg', 'xhtml'],\n extensions: ['.xml', '.svg', '.xhtml', '.xsd', '.xsl', '.xslt'],\n },\n yaml: { aliases: ['yml'], extensions: ['.yaml', '.yml'] },\n}\n\nexport const DEFAULT_CODE_LANGUAGES = Object.keys(codeLanguages)\n\nconst languageAliases = new Map(\n Object.entries(codeLanguages).flatMap(([language, { aliases = [] }]) =>\n aliases.map((alias) => [alias, language] as const),\n ),\n)\n\nexport const LANGUAGE_BY_EXTENSION: Record<string, string> = Object.fromEntries(\n Object.entries(codeLanguages).flatMap(([language, { extensions = [] }]) =>\n extensions.map((extension) => [extension, language]),\n ),\n)\n\nexport function normalizeCodeLanguage(value: string): string {\n const normalized = value.trim().toLowerCase()\n return languageAliases.get(normalized) ?? normalized\n}\n","import type { PageOutlineItem } from './ts-ssg-context'\n\n/** Custom templates can mark their article with data-page-content. */\nexport function resolvePageContent(document: Document) {\n return (\n document.querySelector('[data-page-content]') ??\n document.querySelector('.doc-main .doc-content') ??\n document.querySelector('main') ??\n document.body\n )\n}\n\nfunction slugifyHeading(title: string) {\n return (\n title\n .toLowerCase()\n .replace(/['\"`]/g, '')\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '') || 'section'\n )\n}\n\n/** One DOM query reserves page IDs; only headings in the article become entries. */\nexport function collectPageOutline(content: Element): PageOutlineItem[] {\n const documentRoot = content.ownerDocument?.documentElement\n const root = documentRoot?.contains(content) ? documentRoot : content\n const elements = root.querySelectorAll<HTMLElement>('h1, h2, h3, [id]')\n const ids = new Set<string>()\n if (root.id) ids.add(root.id)\n for (const element of elements) {\n if (element.id) ids.add(element.id)\n }\n const outline: PageOutlineItem[] = []\n const ancestors: PageOutlineItem[] = []\n const counts = new Map<string, number>()\n for (const element of elements) {\n const tag = element.tagName.toLowerCase()\n if (tag !== 'h1' && tag !== 'h2' && tag !== 'h3') continue\n if (!content.contains(element)) continue\n if (element.closest('[data-toc-ignore], .page-toc, pre, template, dialog'))\n continue\n const title = element.textContent?.trim() ?? ''\n if (!title) continue\n if (!element.id) {\n const base = slugifyHeading(title)\n let count = counts.get(base) ?? 1\n let id = count === 1 ? base : `${base}-${count}`\n while (ids.has(id)) {\n count += 1\n id = `${base}-${count}`\n }\n counts.set(base, count + 1)\n ids.add(id)\n element.id = id\n }\n const depth = Number(tag[1])\n const item: PageOutlineItem = { id: element.id, title, depth }\n while (ancestors.length && (ancestors.at(-1)?.depth ?? 0) >= depth) {\n ancestors.pop()\n }\n const parent = ancestors.at(-1)\n if (parent) {\n parent.children ??= []\n parent.children.push(item)\n } else outline.push(item)\n ancestors.push(item)\n }\n return outline\n}\n\nexport function visiblePageOutline(outline: PageOutlineItem[]) {\n const [item] = outline\n return outline.length === 1 && item?.depth === 1\n ? (item.children ?? [])\n : outline\n}\n","import type { PageFrontmatter } from './frontmatter-types'\nimport { visiblePageOutline } from './pageOutline'\nimport type { PageOutlineItem } from './ts-ssg-context'\n\nexport function isTocEnabled(\n frontmatter: PageFrontmatter,\n outline: PageOutlineItem[],\n) {\n const { showToc } = frontmatter.layout\n return (\n showToc === 'always' || (showToc && visiblePageOutline(outline).length > 0)\n )\n}\n","import type { PageContext } from './ts-ssg-context'\n\ntype ContextCarrier = {\n pageContext?: PageContext\n}\n\ntype HeadLike = {\n ctx?: unknown[]\n}\n\nfunction hasPageContext(value: unknown): value is ContextCarrier {\n return typeof value === 'object' && value !== null && 'pageContext' in value\n}\n\nfunction hasContextStack(value: unknown): value is HeadLike {\n return typeof value === 'object' && value !== null && 'ctx' in value\n}\n\nexport function resolvePageContext(head: unknown): PageContext {\n const stack = hasContextStack(head) && Array.isArray(head.ctx) ? head.ctx : []\n for (const ctx of stack) {\n if (!hasPageContext(ctx)) continue\n if (ctx.pageContext) return ctx.pageContext\n }\n throw new Error('pageContext is not available in the Regor context stack.')\n}\n\nexport function tryResolvePageContext(head: unknown): PageContext | undefined {\n const stack = hasContextStack(head) && Array.isArray(head.ctx) ? head.ctx : []\n for (const ctx of stack) {\n if (!hasPageContext(ctx)) continue\n if (ctx.pageContext) return ctx.pageContext\n }\n return undefined\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purestack/ts-common",
3
- "version": "1.1.25",
3
+ "version": "1.1.26",
4
4
  "packageManager": "yarn@4.9.2",
5
5
  "module": "./dist/ts-common.mjs",
6
6
  "types": "./dist/ts-common.d.mts",
@@ -25,9 +25,9 @@
25
25
  }
26
26
  },
27
27
  "dependencies": {
28
- "@purestack/ts-html": "^1.1.25",
29
- "@purestack/ts-style": "^1.1.25",
30
- "@purestack/ts-util": "^1.1.25"
28
+ "@purestack/ts-html": "^1.1.26",
29
+ "@purestack/ts-style": "^1.1.26",
30
+ "@purestack/ts-util": "^1.1.26"
31
31
  },
32
32
  "license": "MIT",
33
33
  "files": [