@purestack/ts-common 1.1.31 → 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.
- package/dist/ts-common.d.mts +9 -31
- package/dist/ts-common.d.mts.map +1 -1
- package/dist/ts-common.mjs +5 -9
- package/dist/ts-common.mjs.map +1 -1
- package/package.json +4 -4
package/dist/ts-common.d.mts
CHANGED
|
@@ -1,22 +1,17 @@
|
|
|
1
|
-
/*! @purestack/ts-common v1.1.
|
|
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
|
package/dist/ts-common.d.mts.map
CHANGED
|
@@ -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":"
|
|
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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"}
|
package/dist/ts-common.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/*! @purestack/ts-common v1.1.
|
|
1
|
+
/*! @purestack/ts-common v1.1.33 | (c) 2026 Ahmed Yasin Koculu | MIT License */
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
package/dist/ts-common.mjs.map
CHANGED
|
@@ -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.
|
|
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.
|
|
29
|
-
"@purestack/ts-style": "^1.1.
|
|
30
|
-
"@purestack/ts-util": "^1.1.
|
|
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": [
|