@purestack/ts-common 1.1.32 → 1.1.33

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,22 +1,17 @@
1
- /*! @purestack/ts-common v1.1.32 | (c) 2026 Ahmed Yasin Koculu | MIT License */
1
+ /*! @purestack/ts-common v1.1.33 | (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";
5
5
  import { BasicHeadConfig, TSNode } from "@purestack/ts-html";
6
- //#region packages/ts-common/src/code-highlighter.d.ts
7
6
  /** Converts source code to highlighted pre/code HTML. */
8
7
  interface MdxCodeHighlighter {
9
8
  codeToHtml: (code: string, lang?: string) => string | Promise<string>;
10
9
  /** Persist buffered computation results after a render batch. Await producers before calling. */
11
10
  flush?: () => void | Promise<void>;
12
11
  }
13
- //#endregion
14
- //#region packages/ts-common/src/codeLanguages.d.ts
15
12
  export declare const DEFAULT_CODE_LANGUAGES: string[];
16
13
  export declare const LANGUAGE_BY_EXTENSION: Record<string, string>;
17
14
  export declare function normalizeCodeLanguage(value: string): string;
18
- //#endregion
19
- //#region packages/ts-common/src/consent-types.d.ts
20
15
  interface ConsentCategory {
21
16
  id: string;
22
17
  label: string;
@@ -59,8 +54,6 @@ interface ConsentConfig {
59
54
  categories: ConsentCategory[];
60
55
  services: ConsentService[];
61
56
  }
62
- //#endregion
63
- //#region packages/ts-common/src/logo-types.d.ts
64
57
  type LogoLayout = 'horizontal' | 'stacked' | 'wordmark' | 'mark';
65
58
  type LogoSize = 'sm' | 'md' | 'lg' | 'xl';
66
59
  type LogoAppearance = 'plain' | 'badge' | 'outline';
@@ -130,8 +123,6 @@ interface ClassicLogoConfig {
130
123
  interface SiteLogoConfig extends LogoConfig, ClassicLogoConfig {
131
124
  component?: string;
132
125
  }
133
- //#endregion
134
- //#region packages/ts-common/src/navMenu-types.d.ts
135
126
  type NavigationMode = 'auto' | 'custom' | 'hybrid' | 'none';
136
127
  type NavigationSort = 'order' | 'title' | 'path';
137
128
  interface NavigationConfig {
@@ -175,8 +166,6 @@ interface PageNavigation {
175
166
  tone: SemanticTone;
176
167
  pageLinks?: PageNavigationLinks;
177
168
  }
178
- //#endregion
179
- //#region packages/ts-common/src/site-config-types.d.ts
180
169
  /** Settings normalized by the builder before plugin configuration runs. */
181
170
  interface CoreSiteConfig {
182
171
  rootDir: string;
@@ -236,10 +225,18 @@ interface AuthConfig {
236
225
  }
237
226
  interface SiteScriptsConfig {
238
227
  cacheBusting: boolean;
228
+ /** Include the runtime that adds copy buttons to code blocks. */
229
+ codeCopy: boolean;
230
+ /** Include the runtime for dropdown menu positioning and dismissal. */
231
+ menuRuntime: boolean;
232
+ /** Include theme startup and its CSS visibility gate. */
233
+ themeSwitch: boolean;
239
234
  /** Package import specifiers emitted as shared browser modules. Regor is always included. */
240
235
  sharedLibraries: string[];
241
236
  }
242
237
  interface SiteStyleConfig {
238
+ /** Generate and inject theme CSS and initialize theme switching. */
239
+ enabled: boolean;
243
240
  fileName: string;
244
241
  href: string;
245
242
  themes: string[];
@@ -333,8 +330,6 @@ interface SiteConfigContributions {
333
330
  normalize?: SiteConfigResolver;
334
331
  finalize?: SiteConfigFinalizer;
335
332
  }
336
- //#endregion
337
- //#region packages/ts-common/src/frontmatter-types.d.ts
338
333
  /**
339
334
  * Normalized frontmatter for a content page.
340
335
  *
@@ -578,8 +573,6 @@ interface ParsedFrontmatterSource {
578
573
  */
579
574
  frontmatter: PageFrontmatter;
580
575
  }
581
- //#endregion
582
- //#region packages/ts-common/src/ts-ssg-context.d.ts
583
576
  interface PageOutlineItem {
584
577
  id: string;
585
578
  title: string;
@@ -610,11 +603,7 @@ interface PageContext {
610
603
  resolveScriptPublicPath?: (sourceRelPath: string) => string;
611
604
  recordRuntimeEmbed: (name: string, position: RuntimeEmbedPosition) => void;
612
605
  }
613
- //#endregion
614
- //#region packages/ts-common/src/isTocEnabled.d.ts
615
606
  export declare function isTocEnabled(frontmatter: PageFrontmatter, outline: PageOutlineItem[]): boolean;
616
- //#endregion
617
- //#region packages/ts-common/src/page-template-types.d.ts
618
607
  interface PageInfo {
619
608
  relPath: string;
620
609
  urlPath: string;
@@ -648,18 +637,12 @@ type PageTemplate = (input: PageTemplateInput) => TSNode<'html'> | Promise<TSNod
648
637
  type PageTemplateMap = Record<string, PageTemplate>;
649
638
  /** Composes head markup before the page template receives it. */
650
639
  type PageHeadTemplate = (input: PageTemplateInput) => TSNode<'head'> | Promise<TSNode<'head'>>;
651
- //#endregion
652
- //#region packages/ts-common/src/pageOutline.d.ts
653
640
  /** Custom templates can mark their article with data-page-content. */
654
641
  export declare function resolvePageContent(document: Document): Element;
655
642
  /** One DOM query reserves page IDs; only headings in the article become entries. */
656
643
  export declare function collectPageOutline(content: Element): PageOutlineItem[];
657
- //#endregion
658
- //#region packages/ts-common/src/resolvePageContext.d.ts
659
644
  export declare function resolvePageContext(head: unknown): PageContext;
660
645
  export declare function tryResolvePageContext(head: unknown): PageContext | undefined;
661
- //#endregion
662
- //#region packages/ts-common/src/site-assets.d.ts
663
646
  /** A local source selected through the site's URL and locale resolution rules. */
664
647
  interface AssetSource {
665
648
  relPath: string;
@@ -684,8 +667,6 @@ interface SiteAssets {
684
667
  /** Ordered within a page; different pages may run concurrently. Input methods expire when this call completes. */
685
668
  processPage: (input: PageAssetInput) => void | Promise<void>;
686
669
  }
687
- //#endregion
688
- //#region packages/ts-common/src/site-search.d.ts
689
670
  /** Search output owned by a plugin; the builder manages output invalidation. */
690
671
  interface SiteSearch {
691
672
  /** Whether a decoded, base-path-relative URL belongs to this search provider. */
@@ -697,8 +678,6 @@ interface SiteSearch {
697
678
  onlyFiles?: Iterable<string>;
698
679
  }): Promise<void>;
699
680
  }
700
- //#endregion
701
- //#region packages/ts-common/src/site-styles.d.ts
702
681
  interface WriteStylesResult {
703
682
  revision: number;
704
683
  outPath: string;
@@ -714,6 +693,5 @@ interface SiteStyles {
714
693
  cacheKey?: string;
715
694
  }): Promise<WriteStylesResult>;
716
695
  }
717
- //#endregion
718
696
  export type { AnalyticsConfig, AssetSource, AuthConfig, ClassicLogoConfig, ConsentCategory, ConsentConfig, ConsentScript, ConsentService, CoreSiteConfig, DocLayoutConfig, FrontmatterEmbedOptions, FrontmatterLayoutOptions, FrontmatterNavOptions, Ga4Config, I18nConfig, I18nUrlStrategy, LogoAppearance, LogoConfig, LogoLayout, LogoMarkStyle, LogoShape, LogoSize, LogoWordmarkStyle, MdxCodeHighlighter, NavItem, NavigationConfig, NavigationMode, NavigationSort, PageAssetInput, PageContext, PageFrontmatter, PageHeadConfigInput, PageHeadConfigTemplate, PageHeadTemplate, PageInfo, PageNavigation, PageNavigationLink, PageNavigationLinks, PageOutlineItem, PageTemplate, PageTemplateInput, PageTemplateMap, PageTocConfig, PageTranslationInfo, PagefindConfig, ParsedFrontmatterSource, PreviewConfig, RobotsConfig, RuntimeEmbedPosition, RuntimeEmbeds, SiteAssets, SiteConfig, SiteConfigContributions, SiteConfigDraft, SiteConfigFinalizer, SiteConfigInput, SiteConfigResolution, SiteConfigResolver, SiteExtensions, SiteHtmlConfig, SiteLogoConfig, SiteMdxConfig, SiteScriptsConfig, SiteSearch, SiteStyleConfig, SiteStyleConfigInput, SiteStyles, SitemapConfig, TsSsgNavigation, WriteStylesResult };
719
697
  //# sourceMappingURL=ts-common.d.mts.map
@@ -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/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
+ {"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;;EAEN;;EAE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"}
@@ -1,6 +1,6 @@
1
- /*! @purestack/ts-common v1.1.32 | (c) 2026 Ahmed Yasin Koculu | MIT License */
1
+ /*! @purestack/ts-common v1.1.33 | (c) 2026 Ahmed Yasin Koculu | MIT License */
2
2
 
3
- //#region packages/ts-common/src/codeLanguages.ts
3
+ // packages/ts-common/src/codeLanguages.ts
4
4
  const codeLanguages = {
5
5
  bash: {
6
6
  aliases: [
@@ -234,8 +234,7 @@ function normalizeCodeLanguage(value) {
234
234
  return languageAliases.get(normalized) ?? normalized;
235
235
  }
236
236
 
237
- //#endregion
238
- //#region packages/ts-common/src/pageOutline.ts
237
+ // packages/ts-common/src/pageOutline.ts
239
238
  /** Custom templates can mark their article with data-page-content. */
240
239
  function resolvePageContent(document) {
241
240
  return document.querySelector("[data-page-content]") ?? document.querySelector(".doc-main .doc-content") ?? document.querySelector("main") ?? document.body;
@@ -294,15 +293,13 @@ function visiblePageOutline(outline) {
294
293
  return outline.length === 1 && item?.depth === 1 ? item.children ?? [] : outline;
295
294
  }
296
295
 
297
- //#endregion
298
- //#region packages/ts-common/src/isTocEnabled.ts
296
+ // packages/ts-common/src/isTocEnabled.ts
299
297
  function isTocEnabled(frontmatter, outline) {
300
298
  const { showToc } = frontmatter.layout;
301
299
  return showToc === "always" || showToc && visiblePageOutline(outline).length > 0;
302
300
  }
303
301
 
304
- //#endregion
305
- //#region packages/ts-common/src/resolvePageContext.ts
302
+ // packages/ts-common/src/resolvePageContext.ts
306
303
  function hasPageContext(value) {
307
304
  return typeof value === "object" && value !== null && "pageContext" in value;
308
305
  }
@@ -325,6 +322,5 @@ function tryResolvePageContext(head) {
325
322
  }
326
323
  }
327
324
 
328
- //#endregion
329
325
  export { DEFAULT_CODE_LANGUAGES, LANGUAGE_BY_EXTENSION, collectPageOutline, isTocEnabled, normalizeCodeLanguage, resolvePageContent, resolvePageContext, tryResolvePageContext };
330
326
  //# sourceMappingURL=ts-common.mjs.map
@@ -1 +1 @@
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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"}
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.32",
3
+ "version": "1.1.33",
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.32",
29
- "@purestack/ts-style": "^1.1.32",
30
- "@purestack/ts-util": "^1.1.32"
28
+ "@purestack/ts-html": "^1.1.33",
29
+ "@purestack/ts-style": "^1.1.33",
30
+ "@purestack/ts-util": "^1.1.33"
31
31
  },
32
32
  "license": "MIT",
33
33
  "files": [