@refrakt-md/content 0.11.3 → 0.14.0
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/frontmatter.d.ts +17 -0
- package/dist/frontmatter.d.ts.map +1 -1
- package/dist/frontmatter.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts +30 -3
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +32 -2
- package/dist/loader.js.map +1 -1
- package/dist/pipeline.d.ts +3 -3
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +11 -11
- package/dist/pipeline.js.map +1 -1
- package/dist/refract-loader.d.ts +53 -1
- package/dist/refract-loader.d.ts.map +1 -1
- package/dist/refract-loader.js +131 -42
- package/dist/refract-loader.js.map +1 -1
- package/dist/site.d.ts +58 -2
- package/dist/site.d.ts.map +1 -1
- package/dist/site.js +137 -32
- package/dist/site.js.map +1 -1
- package/dist/tint-cascade.d.ts +45 -0
- package/dist/tint-cascade.d.ts.map +1 -0
- package/dist/tint-cascade.js +71 -0
- package/dist/tint-cascade.js.map +1 -0
- package/dist/tint-ssr.d.ts +46 -0
- package/dist/tint-ssr.d.ts.map +1 -0
- package/dist/tint-ssr.js +67 -0
- package/dist/tint-ssr.js.map +1 -0
- package/package.json +5 -5
package/dist/frontmatter.d.ts
CHANGED
|
@@ -9,6 +9,23 @@ export interface Frontmatter {
|
|
|
9
9
|
author?: string;
|
|
10
10
|
tags?: string[];
|
|
11
11
|
image?: string;
|
|
12
|
+
/** Icon name resolvable by the `{% icon %}` rune. Used by `nav layout="cards"`
|
|
13
|
+
* to render an icon on each child page card. */
|
|
14
|
+
icon?: string;
|
|
15
|
+
/** Named tint preset to apply for this page (or subtree, when set in a
|
|
16
|
+
* `_layout.md`). Cascades down the layout chain; explicit `null` resets
|
|
17
|
+
* to inherit from the layer above. See SPEC-052. */
|
|
18
|
+
tint?: string | null;
|
|
19
|
+
/** Initial colour-scheme behaviour for this page (or subtree, when set in
|
|
20
|
+
* a `_layout.md`). `'auto'` follows user preference and system pref;
|
|
21
|
+
* `'light'` / `'dark'` lock the SSR-emitted mode. Cascades down the
|
|
22
|
+
* layout chain. */
|
|
23
|
+
'tint-mode'?: 'auto' | 'light' | 'dark';
|
|
24
|
+
/** When `true`, the page (or subtree) ignores user theme preference and
|
|
25
|
+
* hides the theme-toggle UI — used for marketing surfaces where the
|
|
26
|
+
* brand should look the same to every visitor. Cascades down the layout
|
|
27
|
+
* chain. See SPEC-052. */
|
|
28
|
+
'tint-lock'?: boolean;
|
|
12
29
|
[key: string]: unknown;
|
|
13
30
|
}
|
|
14
31
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../src/frontmatter.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAW3F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKtF"}
|
|
1
|
+
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../src/frontmatter.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;qDACiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;yDAEqD;IACrD,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;wBAGoB;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACxC;;;+BAG2B;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAW3F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKtF"}
|
package/dist/frontmatter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../src/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../src/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAiCxB;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAExE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAgB,IAAI,EAAE,CAAC;IACpE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEzB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAwB,EAAE,OAAe;IAC5E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACxE,OAAO,QAAQ,OAAO,UAAU,OAAO,EAAE,CAAC;AAC5C,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,13 +2,15 @@ export { ContentTree, type ContentNode, type ContentPage, type ContentDirectory,
|
|
|
2
2
|
export { parseFrontmatter, serializeFrontmatter, type Frontmatter } from './frontmatter.js';
|
|
3
3
|
export { Router, type Route } from './router.js';
|
|
4
4
|
export { resolveLayouts, type ResolvedLayout, type Region } from './layout.js';
|
|
5
|
+
export { resolveTintCascade, type ResolvedTintCascade, type CascadeRootDefaults, } from './tint-cascade.js';
|
|
6
|
+
export { htmlTintAttributes, colorSchemeMetaContent, prePaintScript } from './tint-ssr.js';
|
|
5
7
|
export { buildNavigation, type NavTree, type NavGroup, type NavItem } from './navigation.js';
|
|
6
|
-
export { loadContent, type Site, type SitePage } from './site.js';
|
|
7
|
-
export { createSiteLoader, type SiteLoader, type SiteLoaderOptions } from './loader.js';
|
|
8
|
+
export { loadContent, loadContentFromTree, type Site, type SitePage, type LoadContentFromTreeOptions, type VirtualReader } from './site.js';
|
|
9
|
+
export { createSiteLoader, createVirtualSiteLoader, type SiteLoader, type SiteLoaderOptions, type VirtualSiteLoaderOptions } from './loader.js';
|
|
8
10
|
export { generateSitemap, type SitemapEntry } from './sitemap.js';
|
|
9
11
|
export { collectRuneTypes, analyzeRuneUsage, type RuneUsageReport } from './analyze.js';
|
|
10
12
|
export { getGitTimestamps, getStatTimestamps, resolveTimestamps, type FileTimestamps } from './timestamps.js';
|
|
11
13
|
export { EntityRegistryImpl } from './registry.js';
|
|
12
|
-
export { createRefraktLoader, type RefraktLoader, type RefraktLoaderOptions } from './refract-loader.js';
|
|
14
|
+
export { createRefraktLoader, createVirtualRefraktLoader, buildHighlightOptions, type RefraktLoader, type RefraktLoaderOptions, type VirtualRefraktLoaderOptions } from './refract-loader.js';
|
|
13
15
|
export { runPipeline, type HookSet, type PipelineResult, type PipelineStats } from './pipeline.js';
|
|
14
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7H,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7H,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EACL,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,IAAI,EAAE,KAAK,QAAQ,EAAE,KAAK,0BAA0B,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAC5I,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAChJ,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC9G,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,KAAK,aAAa,EAAE,KAAK,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAC9L,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,13 +2,15 @@ export { ContentTree } from './content-tree.js';
|
|
|
2
2
|
export { parseFrontmatter, serializeFrontmatter } from './frontmatter.js';
|
|
3
3
|
export { Router } from './router.js';
|
|
4
4
|
export { resolveLayouts } from './layout.js';
|
|
5
|
+
export { resolveTintCascade, } from './tint-cascade.js';
|
|
6
|
+
export { htmlTintAttributes, colorSchemeMetaContent, prePaintScript } from './tint-ssr.js';
|
|
5
7
|
export { buildNavigation } from './navigation.js';
|
|
6
|
-
export { loadContent } from './site.js';
|
|
7
|
-
export { createSiteLoader } from './loader.js';
|
|
8
|
+
export { loadContent, loadContentFromTree } from './site.js';
|
|
9
|
+
export { createSiteLoader, createVirtualSiteLoader } from './loader.js';
|
|
8
10
|
export { generateSitemap } from './sitemap.js';
|
|
9
11
|
export { collectRuneTypes, analyzeRuneUsage } from './analyze.js';
|
|
10
12
|
export { getGitTimestamps, getStatTimestamps, resolveTimestamps } from './timestamps.js';
|
|
11
13
|
export { EntityRegistryImpl } from './registry.js';
|
|
12
|
-
export { createRefraktLoader } from './refract-loader.js';
|
|
14
|
+
export { createRefraktLoader, createVirtualRefraktLoader, buildHighlightOptions } from './refract-loader.js';
|
|
13
15
|
export { runPipeline } from './pipeline.js';
|
|
14
16
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA+E,MAAM,mBAAmB,CAAC;AAC7H,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAoB,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,MAAM,EAAc,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,cAAc,EAAoC,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,eAAe,EAA6C,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA+E,MAAM,mBAAmB,CAAC;AAC7H,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAoB,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,MAAM,EAAc,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,cAAc,EAAoC,MAAM,aAAa,CAAC;AAC/E,OAAO,EACL,kBAAkB,GAGnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,eAAe,EAA6C,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAiF,MAAM,WAAW,CAAC;AAC5I,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAA0E,MAAM,aAAa,CAAC;AAChJ,OAAO,EAAE,eAAe,EAAqB,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAwB,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAuB,MAAM,iBAAiB,CAAC;AAC9G,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,qBAAqB,EAAmF,MAAM,qBAAqB,CAAC;AAC9L,OAAO,EAAE,WAAW,EAAyD,MAAM,eAAe,CAAC"}
|
package/dist/loader.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { Schema } from '@markdoc/markdoc';
|
|
2
|
-
import type {
|
|
3
|
-
import { type Site } from './site.js';
|
|
2
|
+
import type { Plugin, SecurityPolicy } from '@refrakt-md/types';
|
|
3
|
+
import { type Site, type VirtualReader } from './site.js';
|
|
4
|
+
import type { ContentTree } from './content-tree.js';
|
|
4
5
|
export interface SiteLoaderOptions {
|
|
5
6
|
dirPath: string;
|
|
6
7
|
basePath?: string;
|
|
7
8
|
icons?: Record<string, Record<string, string>>;
|
|
8
9
|
additionalTags?: Record<string, Schema>;
|
|
9
|
-
|
|
10
|
+
plugins?: Plugin[];
|
|
10
11
|
sandboxExamplesDir?: string;
|
|
11
12
|
/** Site-wide Markdoc variables available in content via {% $name %} syntax. */
|
|
12
13
|
variables?: Record<string, unknown>;
|
|
@@ -20,4 +21,30 @@ export interface SiteLoader {
|
|
|
20
21
|
invalidate(): void;
|
|
21
22
|
}
|
|
22
23
|
export declare function createSiteLoader(options: SiteLoaderOptions): SiteLoader;
|
|
24
|
+
export interface VirtualSiteLoaderOptions {
|
|
25
|
+
/** Pre-built content tree. The page corpus, layouts, and partials are read
|
|
26
|
+
* from here — there is no filesystem fallback. */
|
|
27
|
+
tree: ContentTree;
|
|
28
|
+
basePath?: string;
|
|
29
|
+
icons?: Record<string, Record<string, string>>;
|
|
30
|
+
additionalTags?: Record<string, Schema>;
|
|
31
|
+
plugins?: Plugin[];
|
|
32
|
+
/** Site-wide Markdoc variables available in content via {% $name %} syntax. */
|
|
33
|
+
variables?: Record<string, unknown>;
|
|
34
|
+
/** Security policy for sandbox runes. Default: `'trusted'`. */
|
|
35
|
+
securityPolicy?: SecurityPolicy;
|
|
36
|
+
/** Optional async reader for ad-hoc lookups. Forward-compatibility hook —
|
|
37
|
+
* see `LoadContentFromTreeOptions.reader` for details. */
|
|
38
|
+
reader?: VirtualReader;
|
|
39
|
+
/** When true, every load() call re-runs the pipeline against the current
|
|
40
|
+
* tree (no caching). Use when the host swaps the tree's contents in place. */
|
|
41
|
+
dev?: boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Site loader for hosted (non-filesystem) environments. Wraps
|
|
45
|
+
* {@link loadContentFromTree} with the same caching semantics as
|
|
46
|
+
* {@link createSiteLoader}: the result is memoized until `invalidate()` is
|
|
47
|
+
* called, unless `dev: true`.
|
|
48
|
+
*/
|
|
49
|
+
export declare function createVirtualSiteLoader(options: VirtualSiteLoaderOptions): SiteLoader;
|
|
23
50
|
//# sourceMappingURL=loader.d.ts.map
|
package/dist/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAoC,KAAK,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAC5F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,oFAAoF;IACpF,GAAG,CAAC,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IAC1B,0DAA0D;IAC1D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,sEAAsE;IACtE,UAAU,IAAI,IAAI,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAsBvE;AAED,MAAM,WAAW,wBAAwB;IACxC;uDACmD;IACnD,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,+DAA+D;IAC/D,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;+DAC2D;IAC3D,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;mFAC+E;IAC/E,GAAG,CAAC,EAAE,OAAO,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,UAAU,CAsBrF"}
|
package/dist/loader.js
CHANGED
|
@@ -1,11 +1,41 @@
|
|
|
1
|
-
import { loadContent } from './site.js';
|
|
1
|
+
import { loadContent, loadContentFromTree } from './site.js';
|
|
2
2
|
export function createSiteLoader(options) {
|
|
3
3
|
let cached = null;
|
|
4
4
|
return {
|
|
5
5
|
load() {
|
|
6
6
|
if (!options.dev && cached)
|
|
7
7
|
return cached;
|
|
8
|
-
const promise = loadContent(options.dirPath, options.basePath, options.icons, options.additionalTags, options.
|
|
8
|
+
const promise = loadContent(options.dirPath, options.basePath, options.icons, options.additionalTags, options.plugins, options.sandboxExamplesDir, options.variables);
|
|
9
|
+
if (!options.dev)
|
|
10
|
+
cached = promise;
|
|
11
|
+
return promise;
|
|
12
|
+
},
|
|
13
|
+
invalidate() {
|
|
14
|
+
cached = null;
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Site loader for hosted (non-filesystem) environments. Wraps
|
|
20
|
+
* {@link loadContentFromTree} with the same caching semantics as
|
|
21
|
+
* {@link createSiteLoader}: the result is memoized until `invalidate()` is
|
|
22
|
+
* called, unless `dev: true`.
|
|
23
|
+
*/
|
|
24
|
+
export function createVirtualSiteLoader(options) {
|
|
25
|
+
let cached = null;
|
|
26
|
+
return {
|
|
27
|
+
load() {
|
|
28
|
+
if (!options.dev && cached)
|
|
29
|
+
return cached;
|
|
30
|
+
const promise = loadContentFromTree(options.tree, {
|
|
31
|
+
basePath: options.basePath,
|
|
32
|
+
icons: options.icons,
|
|
33
|
+
additionalTags: options.additionalTags,
|
|
34
|
+
plugins: options.plugins,
|
|
35
|
+
variables: options.variables,
|
|
36
|
+
securityPolicy: options.securityPolicy,
|
|
37
|
+
reader: options.reader,
|
|
38
|
+
});
|
|
9
39
|
if (!options.dev)
|
|
10
40
|
cached = promise;
|
|
11
41
|
return promise;
|
package/dist/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAiC,MAAM,WAAW,CAAC;AAuB5F,MAAM,UAAU,gBAAgB,CAAC,OAA0B;IAC1D,IAAI,MAAM,GAAyB,IAAI,CAAC;IAExC,OAAO;QACN,IAAI;YACH,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;YAC1C,MAAM,OAAO,GAAG,WAAW,CAC1B,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,kBAAkB,EAC1B,OAAO,CAAC,SAAS,CACjB,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,GAAG;gBAAE,MAAM,GAAG,OAAO,CAAC;YACnC,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,UAAU;YACT,MAAM,GAAG,IAAI,CAAC;QACf,CAAC;KACD,CAAC;AACH,CAAC;AAsBD;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAiC;IACxE,IAAI,MAAM,GAAyB,IAAI,CAAC;IAExC,OAAO;QACN,IAAI;YACH,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;YAC1C,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE;gBACjD,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,MAAM,EAAE,OAAO,CAAC,MAAM;aACtB,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,GAAG;gBAAE,MAAM,GAAG,OAAO,CAAC;YACnC,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,UAAU;YACT,MAAM,GAAG,IAAI,CAAC;QACf,CAAC;KACD,CAAC;AACH,CAAC"}
|
package/dist/pipeline.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { PluginPipelineHooks, AggregatedData, PipelineWarning } from '@refrakt-md/types';
|
|
2
2
|
import type { SitePage } from './site.js';
|
|
3
3
|
/** A package and its pipeline hooks, ready to run */
|
|
4
4
|
export interface HookSet {
|
|
5
|
-
|
|
6
|
-
hooks:
|
|
5
|
+
pluginName: string;
|
|
6
|
+
hooks: PluginPipelineHooks;
|
|
7
7
|
}
|
|
8
8
|
/** Build-phase statistics from the pipeline run */
|
|
9
9
|
export interface PipelineStats {
|
package/dist/pipeline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,mBAAmB,EAGnB,cAAc,EACd,eAAe,EAEf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG1C,qDAAqD;AACrD,MAAM,WAAW,OAAO;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,mBAAmB,CAAC;CAC3B;AAED,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC7B,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC9B,8DAA8D;IAC9D,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,6EAA6E;IAC7E,UAAU,EAAE,cAAc,CAAC;IAC3B,8CAA8C;IAC9C,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,sCAAsC;IACtC,KAAK,EAAE,aAAa,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAChC,KAAK,EAAE,QAAQ,EAAE,EACjB,QAAQ,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,cAAc,CAAC,CAqEzB"}
|
package/dist/pipeline.js
CHANGED
|
@@ -16,10 +16,10 @@ export async function runPipeline(pages, hookSets) {
|
|
|
16
16
|
// Convert SitePage[] → TransformedPage[] (lightweight view, no deep copy)
|
|
17
17
|
const transformedPages = pages.map(pageToTransformed);
|
|
18
18
|
// ─── Phase 2: Register ───
|
|
19
|
-
for (const {
|
|
19
|
+
for (const { pluginName, hooks } of hookSets) {
|
|
20
20
|
if (!hooks.register)
|
|
21
21
|
continue;
|
|
22
|
-
const ctx = makeContext(warnings, 'register',
|
|
22
|
+
const ctx = makeContext(warnings, 'register', pluginName);
|
|
23
23
|
try {
|
|
24
24
|
hooks.register(transformedPages, registry, ctx);
|
|
25
25
|
}
|
|
@@ -30,12 +30,12 @@ export async function runPipeline(pages, hookSets) {
|
|
|
30
30
|
// ─── Phase 3: Aggregate ───
|
|
31
31
|
const aggregated = {};
|
|
32
32
|
const frozenRegistry = registry;
|
|
33
|
-
for (const {
|
|
33
|
+
for (const { pluginName, hooks } of hookSets) {
|
|
34
34
|
if (!hooks.aggregate)
|
|
35
35
|
continue;
|
|
36
|
-
const ctx = makeContext(warnings, 'aggregate',
|
|
36
|
+
const ctx = makeContext(warnings, 'aggregate', pluginName);
|
|
37
37
|
try {
|
|
38
|
-
aggregated[
|
|
38
|
+
aggregated[pluginName] = hooks.aggregate(frozenRegistry, ctx);
|
|
39
39
|
}
|
|
40
40
|
catch (err) {
|
|
41
41
|
ctx.error(err.message);
|
|
@@ -43,11 +43,11 @@ export async function runPipeline(pages, hookSets) {
|
|
|
43
43
|
}
|
|
44
44
|
// ─── Phase 4: Post-process ───
|
|
45
45
|
let working = [...transformedPages];
|
|
46
|
-
for (const {
|
|
46
|
+
for (const { pluginName, hooks } of hookSets) {
|
|
47
47
|
if (!hooks.postProcess)
|
|
48
48
|
continue;
|
|
49
49
|
working = working.map((page, i) => {
|
|
50
|
-
const ctx = makeContext(warnings, 'postProcess',
|
|
50
|
+
const ctx = makeContext(warnings, 'postProcess', pluginName, page.url);
|
|
51
51
|
try {
|
|
52
52
|
return hooks.postProcess(page, aggregated, ctx);
|
|
53
53
|
}
|
|
@@ -82,16 +82,16 @@ function pageToTransformed(page) {
|
|
|
82
82
|
renderable: page.renderable,
|
|
83
83
|
};
|
|
84
84
|
}
|
|
85
|
-
function makeContext(warnings, phase,
|
|
85
|
+
function makeContext(warnings, phase, pluginName, url) {
|
|
86
86
|
return {
|
|
87
87
|
info(message, infoUrl) {
|
|
88
|
-
warnings.push({ severity: 'info', phase,
|
|
88
|
+
warnings.push({ severity: 'info', phase, pluginName, url: infoUrl ?? url, message });
|
|
89
89
|
},
|
|
90
90
|
warn(message, warnUrl) {
|
|
91
|
-
warnings.push({ severity: 'warning', phase,
|
|
91
|
+
warnings.push({ severity: 'warning', phase, pluginName, url: warnUrl ?? url, message });
|
|
92
92
|
},
|
|
93
93
|
error(message, errUrl) {
|
|
94
|
-
warnings.push({ severity: 'error', phase,
|
|
94
|
+
warnings.push({ severity: 'error', phase, pluginName, url: errUrl ?? url, message });
|
|
95
95
|
},
|
|
96
96
|
};
|
|
97
97
|
}
|
package/dist/pipeline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AA8BnD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,KAAiB,EACjB,QAAmB;IAEnB,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAE1C,0EAA0E;IAC1E,MAAM,gBAAgB,GAAsB,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEzE,4BAA4B;IAC5B,KAAK,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/refract-loader.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SiteConfig } from '@refrakt-md/types';
|
|
2
|
+
import type { ContentTree } from './content-tree.js';
|
|
3
|
+
import type { Site, VirtualReader } from './site.js';
|
|
2
4
|
export interface RefraktLoaderOptions {
|
|
3
5
|
/** Path to refrakt.config.json. Default: './refrakt.config.json' */
|
|
4
6
|
configPath?: string;
|
|
@@ -23,5 +25,55 @@ export interface RefraktLoader {
|
|
|
23
25
|
/** Clears the cached site so the next getSite() re-reads from disk. */
|
|
24
26
|
invalidateSite(): void;
|
|
25
27
|
}
|
|
28
|
+
/** Compose the options bag handed to `createHighlightTransform`. Merges the
|
|
29
|
+
* site's `highlight.*` block with theme-level code settings (`theme.code.*`)
|
|
30
|
+
* so a single object reaches the transform — keeps adapter call sites tidy
|
|
31
|
+
* and lets the highlight package stay unaware of where each option comes
|
|
32
|
+
* from. Exported so non-SvelteKit adapters (HTML build script, Astro setup,
|
|
33
|
+
* custom hosts) can compose options the same way. */
|
|
34
|
+
export declare function buildHighlightOptions(site: SiteConfig): {
|
|
35
|
+
codeColorScheme?: "auto" | "light" | "dark" | undefined;
|
|
36
|
+
theme?: string | {
|
|
37
|
+
light: string;
|
|
38
|
+
dark: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
26
41
|
export declare function createRefraktLoader(options?: RefraktLoaderOptions): RefraktLoader;
|
|
42
|
+
export interface VirtualRefraktLoaderOptions {
|
|
43
|
+
/** Pre-resolved per-site configuration. The caller is responsible for
|
|
44
|
+
* selecting the site (e.g., via `resolveSite()`) and normalizing any
|
|
45
|
+
* config-relative paths. Filesystem paths inside this config (`theme`,
|
|
46
|
+
* `contentDir`, plugin specifiers) are still resolved through the Node
|
|
47
|
+
* module loader where applicable; only authoring content is virtualized. */
|
|
48
|
+
site: SiteConfig;
|
|
49
|
+
/** Pre-built content tree. Required — the page corpus, layouts, and
|
|
50
|
+
* partials all come from here. */
|
|
51
|
+
tree: ContentTree;
|
|
52
|
+
/** Optional async reader for ad-hoc lookups. Reserved; see
|
|
53
|
+
* {@link VirtualReader}. */
|
|
54
|
+
reader?: VirtualReader;
|
|
55
|
+
/** Markdoc variables available in content via {% $name %} syntax. */
|
|
56
|
+
variables?: Record<string, unknown>;
|
|
57
|
+
/** URL base path for the Router. Default: `'/'`. */
|
|
58
|
+
basePath?: string;
|
|
59
|
+
/** Skip caching — re-run the pipeline on every load(). Default: false. */
|
|
60
|
+
dev?: boolean;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Refrakt loader for hosted (non-filesystem) environments. Sibling to
|
|
64
|
+
* {@link createRefraktLoader}.
|
|
65
|
+
*
|
|
66
|
+
* Differences:
|
|
67
|
+
* - Accepts a pre-resolved {@link SiteConfig} instead of reading
|
|
68
|
+
* `refrakt.config.json` from disk. The caller is expected to source and
|
|
69
|
+
* normalize the config however suits their host (env, DB, GitHub, etc.).
|
|
70
|
+
* - Drives content from a pre-built {@link ContentTree} rather than walking
|
|
71
|
+
* the filesystem. Combine with a `reader` for forward-compatibility with
|
|
72
|
+
* future async lookup paths.
|
|
73
|
+
*
|
|
74
|
+
* Theme module and plugin specifiers are still resolved through Node's module
|
|
75
|
+
* loader, so the theme package and any plugins must be reachable as installed
|
|
76
|
+
* dependencies in the host environment.
|
|
77
|
+
*/
|
|
78
|
+
export declare function createVirtualRefraktLoader(options: VirtualRefraktLoaderOptions): RefraktLoader;
|
|
27
79
|
//# sourceMappingURL=refract-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refract-loader.d.ts","sourceRoot":"","sources":["../src/refract-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"refract-loader.d.ts","sourceRoot":"","sources":["../src/refract-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQ5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACpC,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;2DACuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,8DAA8D;IAC9D,GAAG,CAAC,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC7B,wDAAwD;IACxD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,yDAAyD;IACzD,YAAY,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;IAC5C,8CAA8C;IAC9C,qBAAqB,IAAI,OAAO,CAAC;QAAE,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,uEAAuE;IACvE,cAAc,IAAI,IAAI,CAAC;CACvB;AASD;;;;;sDAKsD;AACtD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU;;;;;;EAQrD;AA0DD,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAuDjF;AAED,MAAM,WAAW,2BAA2B;IAC3C;;;;iFAI6E;IAC7E,IAAI,EAAE,UAAU,CAAC;IACjB;uCACmC;IACnC,IAAI,EAAE,WAAW,CAAC;IAClB;iCAC6B;IAC7B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,GAAG,CAAC,EAAE,OAAO,CAAC;CACd;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,2BAA2B,GAAG,aAAa,CAkD9F"}
|
package/dist/refract-loader.js
CHANGED
|
@@ -1,7 +1,69 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import { getThemePackage } from '@refrakt-md/types';
|
|
3
4
|
import { normalizeRefraktConfig, resolveSite } from '@refrakt-md/transform/node';
|
|
4
|
-
import { createSiteLoader } from './loader.js';
|
|
5
|
+
import { createSiteLoader, createVirtualSiteLoader, } from './loader.js';
|
|
6
|
+
/** Compose the options bag handed to `createHighlightTransform`. Merges the
|
|
7
|
+
* site's `highlight.*` block with theme-level code settings (`theme.code.*`)
|
|
8
|
+
* so a single object reaches the transform — keeps adapter call sites tidy
|
|
9
|
+
* and lets the highlight package stay unaware of where each option comes
|
|
10
|
+
* from. Exported so non-SvelteKit adapters (HTML build script, Astro setup,
|
|
11
|
+
* custom hosts) can compose options the same way. */
|
|
12
|
+
export function buildHighlightOptions(site) {
|
|
13
|
+
const themeCode = typeof site.theme === 'object' && site.theme !== null
|
|
14
|
+
? site.theme.code
|
|
15
|
+
: undefined;
|
|
16
|
+
return {
|
|
17
|
+
...(site.highlight ?? {}),
|
|
18
|
+
...(themeCode?.colorScheme ? { codeColorScheme: themeCode.colorScheme } : {}),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** Resolve a site's theme module + plugin merges into a single context object.
|
|
22
|
+
* Shared between the FS loader and the virtual loader so both produce
|
|
23
|
+
* byte-identical transforms from the same SiteConfig. */
|
|
24
|
+
async function assembleSiteContext(site) {
|
|
25
|
+
const themePackage = getThemePackage(site.theme);
|
|
26
|
+
const themeModule = await import(/* @vite-ignore */ themePackage + '/transform');
|
|
27
|
+
const themeConfig = themeModule.themeConfig ?? themeModule.luminaConfig ?? themeModule.default;
|
|
28
|
+
const icons = {
|
|
29
|
+
...themeConfig.icons,
|
|
30
|
+
global: { ...(themeConfig.icons?.global ?? {}), ...(site.icons ?? {}) },
|
|
31
|
+
};
|
|
32
|
+
const { assembleThemeConfig, createTransform } = await import('@refrakt-md/transform');
|
|
33
|
+
const pluginNames = site.plugins ?? [];
|
|
34
|
+
if (pluginNames.length === 0) {
|
|
35
|
+
return {
|
|
36
|
+
transform: createTransform(themeConfig),
|
|
37
|
+
communityTags: undefined,
|
|
38
|
+
communityPackages: undefined,
|
|
39
|
+
icons,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const { loadPlugin, mergePlugins, runes: coreRunes } = await import('@refrakt-md/runes');
|
|
43
|
+
const loaded = await Promise.all(pluginNames.map((name) => loadPlugin(name)));
|
|
44
|
+
const coreRuneNames = new Set(Object.keys(coreRunes));
|
|
45
|
+
const merged = mergePlugins(loaded, coreRuneNames, site.runes?.prefer);
|
|
46
|
+
const { config: assembledConfig } = assembleThemeConfig({
|
|
47
|
+
coreConfig: themeConfig,
|
|
48
|
+
pluginRunes: merged.themeRunes,
|
|
49
|
+
pluginIcons: merged.themeIcons,
|
|
50
|
+
pluginBackgrounds: merged.themeBackgrounds,
|
|
51
|
+
extensions: merged.extensions,
|
|
52
|
+
provenance: merged.provenance,
|
|
53
|
+
});
|
|
54
|
+
if (site.tints) {
|
|
55
|
+
assembledConfig.tints = { ...assembledConfig.tints, ...site.tints };
|
|
56
|
+
}
|
|
57
|
+
if (site.backgrounds) {
|
|
58
|
+
assembledConfig.backgrounds = { ...assembledConfig.backgrounds, ...site.backgrounds };
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
transform: createTransform(assembledConfig),
|
|
62
|
+
communityTags: Object.keys(merged.tags).length > 0 ? merged.tags : undefined,
|
|
63
|
+
communityPackages: merged.plugins,
|
|
64
|
+
icons,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
5
67
|
export function createRefraktLoader(options) {
|
|
6
68
|
const configPath = resolve(options?.configPath ?? './refrakt.config.json');
|
|
7
69
|
const rawConfig = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
@@ -12,55 +74,20 @@ export function createRefraktLoader(options) {
|
|
|
12
74
|
const contentDir = resolve(site.contentDir);
|
|
13
75
|
let _initPromise = null;
|
|
14
76
|
let _transform = null;
|
|
15
|
-
let _communityTags;
|
|
16
|
-
let _communityPackages;
|
|
17
77
|
let _loader = null;
|
|
18
78
|
let _hl = null;
|
|
19
79
|
async function init() {
|
|
20
80
|
if (_initPromise)
|
|
21
81
|
return _initPromise;
|
|
22
82
|
_initPromise = (async () => {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const themeConfig = themeModule.themeConfig ?? themeModule.luminaConfig ?? themeModule.default;
|
|
26
|
-
const icons = {
|
|
27
|
-
...themeConfig.icons,
|
|
28
|
-
global: { ...(themeConfig.icons?.global ?? {}), ...(site.icons ?? {}) },
|
|
29
|
-
};
|
|
30
|
-
const { assembleThemeConfig, createTransform } = await import('@refrakt-md/transform');
|
|
31
|
-
const packageNames = site.packages ?? [];
|
|
32
|
-
if (packageNames.length === 0) {
|
|
33
|
-
_transform = createTransform(themeConfig);
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
const { loadRunePackage, mergePackages, runes: coreRunes } = await import('@refrakt-md/runes');
|
|
37
|
-
const loaded = await Promise.all(packageNames.map((name) => loadRunePackage(name)));
|
|
38
|
-
const coreRuneNames = new Set(Object.keys(coreRunes));
|
|
39
|
-
const merged = mergePackages(loaded, coreRuneNames, site.runes?.prefer);
|
|
40
|
-
_communityTags = Object.keys(merged.tags).length > 0 ? merged.tags : undefined;
|
|
41
|
-
_communityPackages = merged.packages;
|
|
42
|
-
const { config: assembledConfig } = assembleThemeConfig({
|
|
43
|
-
coreConfig: themeConfig,
|
|
44
|
-
packageRunes: merged.themeRunes,
|
|
45
|
-
packageIcons: merged.themeIcons,
|
|
46
|
-
packageBackgrounds: merged.themeBackgrounds,
|
|
47
|
-
extensions: merged.extensions,
|
|
48
|
-
provenance: merged.provenance,
|
|
49
|
-
});
|
|
50
|
-
if (site.tints) {
|
|
51
|
-
assembledConfig.tints = { ...assembledConfig.tints, ...site.tints };
|
|
52
|
-
}
|
|
53
|
-
if (site.backgrounds) {
|
|
54
|
-
assembledConfig.backgrounds = { ...assembledConfig.backgrounds, ...site.backgrounds };
|
|
55
|
-
}
|
|
56
|
-
_transform = createTransform(assembledConfig);
|
|
57
|
-
}
|
|
83
|
+
const ctx = await assembleSiteContext(site);
|
|
84
|
+
_transform = ctx.transform;
|
|
58
85
|
_loader = createSiteLoader({
|
|
59
86
|
dirPath: contentDir,
|
|
60
87
|
basePath: '/',
|
|
61
|
-
icons,
|
|
62
|
-
additionalTags:
|
|
63
|
-
|
|
88
|
+
icons: ctx.icons,
|
|
89
|
+
additionalTags: ctx.communityTags,
|
|
90
|
+
plugins: ctx.communityPackages,
|
|
64
91
|
variables: options?.variables,
|
|
65
92
|
dev: options?.dev ?? false,
|
|
66
93
|
});
|
|
@@ -80,7 +107,69 @@ export function createRefraktLoader(options) {
|
|
|
80
107
|
if (_hl)
|
|
81
108
|
return _hl;
|
|
82
109
|
const { createHighlightTransform } = await import('@refrakt-md/highlight');
|
|
83
|
-
_hl = await createHighlightTransform(site
|
|
110
|
+
_hl = await createHighlightTransform(buildHighlightOptions(site));
|
|
111
|
+
return _hl;
|
|
112
|
+
},
|
|
113
|
+
invalidateSite() {
|
|
114
|
+
_loader?.invalidate();
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Refrakt loader for hosted (non-filesystem) environments. Sibling to
|
|
120
|
+
* {@link createRefraktLoader}.
|
|
121
|
+
*
|
|
122
|
+
* Differences:
|
|
123
|
+
* - Accepts a pre-resolved {@link SiteConfig} instead of reading
|
|
124
|
+
* `refrakt.config.json` from disk. The caller is expected to source and
|
|
125
|
+
* normalize the config however suits their host (env, DB, GitHub, etc.).
|
|
126
|
+
* - Drives content from a pre-built {@link ContentTree} rather than walking
|
|
127
|
+
* the filesystem. Combine with a `reader` for forward-compatibility with
|
|
128
|
+
* future async lookup paths.
|
|
129
|
+
*
|
|
130
|
+
* Theme module and plugin specifiers are still resolved through Node's module
|
|
131
|
+
* loader, so the theme package and any plugins must be reachable as installed
|
|
132
|
+
* dependencies in the host environment.
|
|
133
|
+
*/
|
|
134
|
+
export function createVirtualRefraktLoader(options) {
|
|
135
|
+
const { site, tree, reader, variables, basePath, dev } = options;
|
|
136
|
+
let _initPromise = null;
|
|
137
|
+
let _transform = null;
|
|
138
|
+
let _loader = null;
|
|
139
|
+
let _hl = null;
|
|
140
|
+
async function init() {
|
|
141
|
+
if (_initPromise)
|
|
142
|
+
return _initPromise;
|
|
143
|
+
_initPromise = (async () => {
|
|
144
|
+
const ctx = await assembleSiteContext(site);
|
|
145
|
+
_transform = ctx.transform;
|
|
146
|
+
_loader = createVirtualSiteLoader({
|
|
147
|
+
tree,
|
|
148
|
+
basePath: basePath ?? '/',
|
|
149
|
+
icons: ctx.icons,
|
|
150
|
+
additionalTags: ctx.communityTags,
|
|
151
|
+
plugins: ctx.communityPackages,
|
|
152
|
+
variables,
|
|
153
|
+
reader,
|
|
154
|
+
dev: dev ?? false,
|
|
155
|
+
});
|
|
156
|
+
})();
|
|
157
|
+
return _initPromise;
|
|
158
|
+
}
|
|
159
|
+
return {
|
|
160
|
+
async getSite() {
|
|
161
|
+
await init();
|
|
162
|
+
return _loader.load();
|
|
163
|
+
},
|
|
164
|
+
async getTransform() {
|
|
165
|
+
await init();
|
|
166
|
+
return _transform;
|
|
167
|
+
},
|
|
168
|
+
async getHighlightTransform() {
|
|
169
|
+
if (_hl)
|
|
170
|
+
return _hl;
|
|
171
|
+
const { createHighlightTransform } = await import('@refrakt-md/highlight');
|
|
172
|
+
_hl = await createHighlightTransform(buildHighlightOptions(site));
|
|
84
173
|
return _hl;
|
|
85
174
|
},
|
|
86
175
|
invalidateSite() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refract-loader.js","sourceRoot":"","sources":["../src/refract-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,
|
|
1
|
+
{"version":3,"file":"refract-loader.js","sourceRoot":"","sources":["../src/refract-loader.ts"],"names":[],"mappings":"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"}
|