@refrakt-md/runes 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/config.d.ts +38 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +605 -2
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +1 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/sanitize.d.ts +28 -0
- package/dist/lib/sanitize.d.ts.map +1 -0
- package/dist/lib/sanitize.js +65 -0
- package/dist/lib/sanitize.js.map +1 -0
- package/dist/{packages.d.ts → plugins.d.ts} +29 -29
- package/dist/plugins.d.ts.map +1 -0
- package/dist/{packages.js → plugins.js} +45 -68
- package/dist/plugins.js.map +1 -0
- package/dist/reference.d.ts +8 -8
- package/dist/reference.d.ts.map +1 -1
- package/dist/reference.js +12 -12
- package/dist/reference.js.map +1 -1
- package/dist/tags/nav.d.ts +2 -0
- package/dist/tags/nav.d.ts.map +1 -1
- package/dist/tags/nav.js +45 -9
- package/dist/tags/nav.js.map +1 -1
- package/dist/tags/pagination.d.ts +5 -0
- package/dist/tags/pagination.d.ts.map +1 -0
- package/dist/tags/pagination.js +62 -0
- package/dist/tags/pagination.js.map +1 -0
- package/dist/tags/sandbox.d.ts.map +1 -1
- package/dist/tags/sandbox.js +23 -5
- package/dist/tags/sandbox.js.map +1 -1
- package/package.json +3 -3
- package/dist/packages.d.ts.map +0 -1
- package/dist/packages.js.map +0 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitisation primitives for runes that handle raw author HTML/CSS/JS.
|
|
3
|
+
*
|
|
4
|
+
* The transform pipeline assumes its input is trusted by default. When a
|
|
5
|
+
* `SecurityPolicy` resolves to `untrusted` mode with `allowJs: false`, runes
|
|
6
|
+
* that surface raw content to the client (sandbox, future custom-element
|
|
7
|
+
* runes) call `sanitizeSandboxContent` to strip executable attack surface
|
|
8
|
+
* before the content is stuffed into a meta tag and shipped to the iframe.
|
|
9
|
+
*
|
|
10
|
+
* This is a regex-based pass — fast, dependency-free, and intentionally
|
|
11
|
+
* conservative. It is **not** a substitute for the iframe's sandbox attribute
|
|
12
|
+
* or the meta-CSP layer; it is defence-in-depth on top of those. When you
|
|
13
|
+
* need stronger guarantees (DOM-aware sanitisation, CSS expression
|
|
14
|
+
* filtering, SVG-namespace hardening), reach for a vetted library at the
|
|
15
|
+
* application boundary.
|
|
16
|
+
*/
|
|
17
|
+
/** Strip `<script>…</script>` blocks (case-insensitive, multiline). */
|
|
18
|
+
function stripScripts(html) {
|
|
19
|
+
// Greedy-match content; `[^]` covers newlines without the /s flag for older targets.
|
|
20
|
+
return html.replace(/<script\b[^>]*>[\s\S]*?<\/script\s*>/gi, '');
|
|
21
|
+
}
|
|
22
|
+
/** Strip on*-prefixed event-handler attributes (onclick, onerror, onload, …).
|
|
23
|
+
* Matches both quoted and unquoted forms. */
|
|
24
|
+
function stripEventHandlers(html) {
|
|
25
|
+
// Quoted: on...="..." or on...='...'
|
|
26
|
+
let out = html.replace(/\s+on[a-z]+\s*=\s*"[^"]*"/gi, '');
|
|
27
|
+
out = out.replace(/\s+on[a-z]+\s*=\s*'[^']*'/gi, '');
|
|
28
|
+
// Unquoted: on...=value (terminated by whitespace or >)
|
|
29
|
+
out = out.replace(/\s+on[a-z]+\s*=\s*[^\s>]+/gi, '');
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
32
|
+
/** Strip `javascript:` URLs from href/src/action/formaction/xlink:href. */
|
|
33
|
+
function stripJavascriptUrls(html) {
|
|
34
|
+
return html.replace(/(\s(?:href|src|action|formaction|xlink:href)\s*=\s*)(["'])\s*javascript:[^"']*\2/gi, '$1$2$2');
|
|
35
|
+
}
|
|
36
|
+
/** Strip `<iframe>`, `<object>`, `<embed>` tags entirely.
|
|
37
|
+
* These can host executable content even when scripts are removed. */
|
|
38
|
+
function stripDangerousTags(html) {
|
|
39
|
+
let out = html.replace(/<iframe\b[^>]*>[\s\S]*?<\/iframe\s*>/gi, '');
|
|
40
|
+
out = out.replace(/<object\b[^>]*>[\s\S]*?<\/object\s*>/gi, '');
|
|
41
|
+
out = out.replace(/<embed\b[^>]*\/?>/gi, '');
|
|
42
|
+
// Self-closing iframe variants
|
|
43
|
+
out = out.replace(/<iframe\b[^>]*\/>/gi, '');
|
|
44
|
+
out = out.replace(/<object\b[^>]*\/>/gi, '');
|
|
45
|
+
return out;
|
|
46
|
+
}
|
|
47
|
+
/** Sanitise raw HTML/CSS/JS destined for a sandbox iframe.
|
|
48
|
+
*
|
|
49
|
+
* - In `trusted` mode (or when `allowJs` is true), returns input unchanged.
|
|
50
|
+
* - In `untrusted` mode with `allowJs: false`, strips:
|
|
51
|
+
* - `<script>` blocks (including those inside SVG)
|
|
52
|
+
* - `on*=` event-handler attributes
|
|
53
|
+
* - `javascript:` URLs
|
|
54
|
+
* - `<iframe>`, `<object>`, `<embed>` tags
|
|
55
|
+
*/
|
|
56
|
+
export function sanitizeSandboxContent(content, policy) {
|
|
57
|
+
if (policy.trust === 'trusted' || policy.allowJs)
|
|
58
|
+
return content;
|
|
59
|
+
let out = stripScripts(content);
|
|
60
|
+
out = stripEventHandlers(out);
|
|
61
|
+
out = stripJavascriptUrls(out);
|
|
62
|
+
out = stripDangerousTags(out);
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../src/lib/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,uEAAuE;AACvE,SAAS,YAAY,CAAC,IAAY;IACjC,qFAAqF;IACrF,OAAO,IAAI,CAAC,OAAO,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC;AAED;8CAC8C;AAC9C,SAAS,kBAAkB,CAAC,IAAY;IACvC,qCAAqC;IACrC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;IAC1D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;IACrD,wDAAwD;IACxD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,2EAA2E;AAC3E,SAAS,mBAAmB,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,OAAO,CAClB,oFAAoF,EACpF,QAAQ,CACR,CAAC;AACH,CAAC;AAED;uEACuE;AACvE,SAAS,kBAAkB,CAAC,IAAY;IACvC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC;IACrE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC;IAChE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAC7C,+BAA+B;IAC/B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAC7C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAC7C,OAAO,GAAG,CAAC;AACZ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,MAA8B;IACrF,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IACjE,IAAI,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAChC,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC9B,GAAG,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC/B,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,GAAG,CAAC;AACZ,CAAC"}
|
|
@@ -1,56 +1,56 @@
|
|
|
1
1
|
import type { Schema } from '@markdoc/markdoc';
|
|
2
|
-
import type {
|
|
2
|
+
import type { Plugin, RuneExtension } from '@refrakt-md/types';
|
|
3
3
|
import type { RuneConfig, RuneProvenance } from '@refrakt-md/transform';
|
|
4
4
|
import { Rune } from './rune.js';
|
|
5
|
-
/** A loaded
|
|
6
|
-
export interface
|
|
7
|
-
/** The original
|
|
8
|
-
pkg:
|
|
5
|
+
/** A loaded plugin with its parsed rune definitions */
|
|
6
|
+
export interface LoadedPlugin {
|
|
7
|
+
/** The original plugin registration object */
|
|
8
|
+
pkg: Plugin;
|
|
9
9
|
/** The npm package name it was loaded from */
|
|
10
10
|
npmName: string;
|
|
11
|
-
/** Rune instances created from the
|
|
11
|
+
/** Rune instances created from the plugin's entries */
|
|
12
12
|
runes: Record<string, Rune>;
|
|
13
13
|
/** Fixture strings for the inspect command (keyed by rune name) */
|
|
14
14
|
fixtures: Record<string, string>;
|
|
15
15
|
}
|
|
16
|
-
/** Result of merging multiple
|
|
17
|
-
export interface
|
|
18
|
-
/**
|
|
16
|
+
/** Result of merging multiple plugins */
|
|
17
|
+
export interface MergedPluginResult {
|
|
18
|
+
/** Plugin runes (collision-free, keyed by rune name) */
|
|
19
19
|
runes: Record<string, Rune>;
|
|
20
|
-
/** Markdoc tags map for
|
|
20
|
+
/** Markdoc tags map for plugin runes */
|
|
21
21
|
tags: Record<string, Schema>;
|
|
22
|
-
/** Theme config rune entries from all
|
|
22
|
+
/** Theme config rune entries from all plugins */
|
|
23
23
|
themeRunes: Record<string, RuneConfig>;
|
|
24
|
-
/** Theme icon entries from all
|
|
24
|
+
/** Theme icon entries from all plugins */
|
|
25
25
|
themeIcons: Record<string, Record<string, string>>;
|
|
26
|
-
/** Theme background preset entries from all
|
|
26
|
+
/** Theme background preset entries from all plugins */
|
|
27
27
|
themeBackgrounds: Record<string, Record<string, unknown>>;
|
|
28
28
|
/** Schema extensions for core runes (keyed by core rune name) */
|
|
29
29
|
extensions: Record<string, RuneExtension>;
|
|
30
|
-
/** Source
|
|
31
|
-
|
|
30
|
+
/** Source plugin metadata */
|
|
31
|
+
plugins: Plugin[];
|
|
32
32
|
/** Source provenance for every resolved rune name */
|
|
33
33
|
provenance: Record<string, RuneProvenance>;
|
|
34
|
-
/** Fixture strings from
|
|
34
|
+
/** Fixture strings from plugins for the inspect command */
|
|
35
35
|
fixtures: Record<string, string>;
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
38
|
-
* Load a
|
|
38
|
+
* Load a plugin by npm package name.
|
|
39
39
|
*
|
|
40
|
-
* Dynamically imports the package and extracts the
|
|
41
|
-
* Creates Rune instances from each
|
|
40
|
+
* Dynamically imports the package and extracts the Plugin export.
|
|
41
|
+
* Creates Rune instances from each plugin entry using defineRune().
|
|
42
42
|
*/
|
|
43
|
-
export declare function
|
|
43
|
+
export declare function loadPlugin(npmPackageName: string): Promise<LoadedPlugin>;
|
|
44
44
|
/**
|
|
45
|
-
* Merge multiple loaded
|
|
45
|
+
* Merge multiple loaded plugins into a single result.
|
|
46
46
|
*
|
|
47
47
|
* Resolution rules:
|
|
48
|
-
* 1. Single
|
|
49
|
-
* 2. Multiple
|
|
48
|
+
* 1. Single plugin providing a core rune name: plugin wins (official breakout path)
|
|
49
|
+
* 2. Multiple plugins + core collision: resolved by `prefer` map, or throws
|
|
50
50
|
* 3. `prefer` value `"__core__"` forces core to win for that rune
|
|
51
|
-
* 4. Two
|
|
51
|
+
* 4. Two plugins same name, no core: resolved by `prefer`, or throws
|
|
52
52
|
*/
|
|
53
|
-
export declare function
|
|
53
|
+
export declare function mergePlugins(loaded: LoadedPlugin[], coreRuneNames: Set<string>, prefer?: Record<string, string>): MergedPluginResult;
|
|
54
54
|
/**
|
|
55
55
|
* Apply config-level aliases to a resolved rune/tag set.
|
|
56
56
|
*
|
|
@@ -68,14 +68,14 @@ export declare function applyAliases(runes: Record<string, Rune>, tags: Record<s
|
|
|
68
68
|
* Each entry maps a rune name to a module path that exports a rune entry.
|
|
69
69
|
* Local runes have the highest priority in the resolution order.
|
|
70
70
|
*/
|
|
71
|
-
export declare function loadLocalRunes(localConfig: Record<string, string>, projectRoot: string): Promise<
|
|
71
|
+
export declare function loadLocalRunes(localConfig: Record<string, string>, projectRoot: string): Promise<LoadedPlugin>;
|
|
72
72
|
/**
|
|
73
|
-
* Discover file-based fixtures from an installed
|
|
73
|
+
* Discover file-based fixtures from an installed plugin's fixtures/ directory.
|
|
74
74
|
*
|
|
75
75
|
* Looks for .md files in the package's fixtures/ directory. Each file's name
|
|
76
76
|
* (without extension) becomes the fixture key (rune name).
|
|
77
77
|
*
|
|
78
78
|
* Returns a map of rune name → fixture content string.
|
|
79
79
|
*/
|
|
80
|
-
export declare function
|
|
81
|
-
//# sourceMappingURL=
|
|
80
|
+
export declare function discoverPluginFixtures(npmPackageName: string): Promise<Record<string, string>>;
|
|
81
|
+
//# sourceMappingURL=plugins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,IAAI,EAA0B,MAAM,WAAW,CAAC;AAEzD,uDAAuD;AACvD,MAAM,WAAW,YAAY;IAC5B,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IAClC,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,uDAAuD;IACvD,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,6BAA6B;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC3C,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAuC9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC3B,MAAM,EAAE,YAAY,EAAE,EACtB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,kBAAkB,CAqKpB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GACxC;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CAAE,CA4B9E;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CACnC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC,CA2CvB;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA+BpG"}
|
|
@@ -1,31 +1,28 @@
|
|
|
1
1
|
import { defineRune, runeTagMap } from './rune.js';
|
|
2
2
|
/**
|
|
3
|
-
* Load a
|
|
3
|
+
* Load a plugin by npm package name.
|
|
4
4
|
*
|
|
5
|
-
* Dynamically imports the package and extracts the
|
|
6
|
-
* Creates Rune instances from each
|
|
5
|
+
* Dynamically imports the package and extracts the Plugin export.
|
|
6
|
+
* Creates Rune instances from each plugin entry using defineRune().
|
|
7
7
|
*/
|
|
8
|
-
export async function
|
|
8
|
+
export async function loadPlugin(npmPackageName) {
|
|
9
9
|
let mod;
|
|
10
10
|
try {
|
|
11
11
|
mod = await import(/* @vite-ignore */ npmPackageName);
|
|
12
12
|
}
|
|
13
13
|
catch (err) {
|
|
14
|
-
throw new Error(`Failed to load
|
|
14
|
+
throw new Error(`Failed to load plugin "${npmPackageName}": ${err.message}\n` +
|
|
15
15
|
`Make sure the package is installed: npm install ${npmPackageName}`);
|
|
16
16
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
// Validate required fields
|
|
20
|
-
validateRunePackage(pkg, npmPackageName);
|
|
21
|
-
// Create Rune instances and collect fixtures from package entries
|
|
17
|
+
const pkg = findPluginExport(mod, npmPackageName);
|
|
18
|
+
validatePlugin(pkg, npmPackageName);
|
|
22
19
|
const runes = {};
|
|
23
20
|
const fixtures = {};
|
|
24
21
|
for (const [runeName, entry] of Object.entries(pkg.runes)) {
|
|
25
22
|
runes[runeName] = defineRune({
|
|
26
23
|
name: runeName,
|
|
27
24
|
schema: entry.transform,
|
|
28
|
-
description: entry.description ?? `
|
|
25
|
+
description: entry.description ?? `Plugin rune from ${pkg.displayName ?? pkg.name}`,
|
|
29
26
|
aliases: entry.aliases,
|
|
30
27
|
seoType: entry.seoType,
|
|
31
28
|
authoringHints: entry.authoringHints,
|
|
@@ -34,10 +31,8 @@ export async function loadRunePackage(npmPackageName) {
|
|
|
34
31
|
fixtures[runeName] = entry.fixture;
|
|
35
32
|
}
|
|
36
33
|
}
|
|
37
|
-
|
|
38
|
-
const fileFixtures = await discoverPackageFixtures(npmPackageName);
|
|
34
|
+
const fileFixtures = await discoverPluginFixtures(npmPackageName);
|
|
39
35
|
for (const [runeName, content] of Object.entries(fileFixtures)) {
|
|
40
|
-
// Inline fixtures take priority over file-based ones
|
|
41
36
|
if (!fixtures[runeName]) {
|
|
42
37
|
fixtures[runeName] = content;
|
|
43
38
|
}
|
|
@@ -45,16 +40,15 @@ export async function loadRunePackage(npmPackageName) {
|
|
|
45
40
|
return { pkg, npmName: npmPackageName, runes, fixtures };
|
|
46
41
|
}
|
|
47
42
|
/**
|
|
48
|
-
* Merge multiple loaded
|
|
43
|
+
* Merge multiple loaded plugins into a single result.
|
|
49
44
|
*
|
|
50
45
|
* Resolution rules:
|
|
51
|
-
* 1. Single
|
|
52
|
-
* 2. Multiple
|
|
46
|
+
* 1. Single plugin providing a core rune name: plugin wins (official breakout path)
|
|
47
|
+
* 2. Multiple plugins + core collision: resolved by `prefer` map, or throws
|
|
53
48
|
* 3. `prefer` value `"__core__"` forces core to win for that rune
|
|
54
|
-
* 4. Two
|
|
49
|
+
* 4. Two plugins same name, no core: resolved by `prefer`, or throws
|
|
55
50
|
*/
|
|
56
|
-
export function
|
|
57
|
-
// Build ownership map: rune name → [{ package, rune }]
|
|
51
|
+
export function mergePlugins(loaded, coreRuneNames, prefer) {
|
|
58
52
|
const ownership = new Map();
|
|
59
53
|
for (const loadedPkg of loaded) {
|
|
60
54
|
for (const [name, rune] of Object.entries(loadedPkg.runes)) {
|
|
@@ -64,28 +58,24 @@ export function mergePackages(loaded, coreRuneNames, prefer) {
|
|
|
64
58
|
ownership.get(name).push({ pkg: loadedPkg, rune });
|
|
65
59
|
}
|
|
66
60
|
}
|
|
67
|
-
// Resolve names
|
|
68
61
|
const runes = {};
|
|
69
62
|
const provenance = {};
|
|
70
63
|
for (const [name, candidates] of ownership) {
|
|
71
64
|
if (coreRuneNames.has(name)) {
|
|
72
|
-
// Explicit core preference — skip all packages for this rune
|
|
73
65
|
if (prefer?.[name] === '__core__') {
|
|
74
66
|
continue;
|
|
75
67
|
}
|
|
76
68
|
if (candidates.length === 1) {
|
|
77
|
-
// Single package override — allowed (official breakout path)
|
|
78
69
|
const c = candidates[0];
|
|
79
70
|
runes[name] = c.rune;
|
|
80
71
|
provenance[name] = {
|
|
81
72
|
qualifiedId: `${c.pkg.pkg.name}:${name}`,
|
|
82
|
-
source: '
|
|
83
|
-
|
|
73
|
+
source: 'plugin',
|
|
74
|
+
pluginName: c.pkg.pkg.name,
|
|
84
75
|
origin: c.pkg.npmName,
|
|
85
76
|
};
|
|
86
77
|
continue;
|
|
87
78
|
}
|
|
88
|
-
// Multiple packages + core collision: check prefer
|
|
89
79
|
const preferred = prefer?.[name];
|
|
90
80
|
if (preferred) {
|
|
91
81
|
const match = candidates.find(c => c.pkg.pkg.name === preferred);
|
|
@@ -93,38 +83,35 @@ export function mergePackages(loaded, coreRuneNames, prefer) {
|
|
|
93
83
|
runes[name] = match.rune;
|
|
94
84
|
provenance[name] = {
|
|
95
85
|
qualifiedId: `${match.pkg.pkg.name}:${name}`,
|
|
96
|
-
source: '
|
|
97
|
-
|
|
86
|
+
source: 'plugin',
|
|
87
|
+
pluginName: match.pkg.pkg.name,
|
|
98
88
|
origin: match.pkg.npmName,
|
|
99
89
|
};
|
|
100
90
|
continue;
|
|
101
91
|
}
|
|
102
92
|
const available = [...candidates.map(c => c.pkg.pkg.name), '__core__'].join(', ');
|
|
103
|
-
throw new Error(`Rune "${name}" preference "${preferred}" does not match any providing
|
|
93
|
+
throw new Error(`Rune "${name}" preference "${preferred}" does not match any providing plugin.\n` +
|
|
104
94
|
`Available: ${available}`);
|
|
105
95
|
}
|
|
106
|
-
// Unresolved multi-package + core collision
|
|
107
96
|
const pkgNames = candidates.map(c => c.pkg.npmName).join(', ');
|
|
108
97
|
const pkgShortNames = [...candidates.map(c => c.pkg.pkg.name), '__core__'].join(', ');
|
|
109
98
|
throw new Error(`Rune name "${name}" is ambiguous: provided by ${pkgNames} and also a core rune.\n` +
|
|
110
99
|
` Resolve by adding to refrakt.config.json:\n` +
|
|
111
|
-
` "runes": { "prefer": { "${name}": "<
|
|
100
|
+
` "runes": { "prefer": { "${name}": "<plugin-name>" } }\n\n` +
|
|
112
101
|
` Use "__core__" to keep the core version.\n` +
|
|
113
102
|
` Available: ${pkgShortNames}`);
|
|
114
103
|
}
|
|
115
104
|
if (candidates.length === 1) {
|
|
116
|
-
// No collision — use directly
|
|
117
105
|
const c = candidates[0];
|
|
118
106
|
runes[name] = c.rune;
|
|
119
107
|
provenance[name] = {
|
|
120
108
|
qualifiedId: `${c.pkg.pkg.name}:${name}`,
|
|
121
|
-
source: '
|
|
122
|
-
|
|
109
|
+
source: 'plugin',
|
|
110
|
+
pluginName: c.pkg.pkg.name,
|
|
123
111
|
origin: c.pkg.npmName,
|
|
124
112
|
};
|
|
125
113
|
}
|
|
126
114
|
else {
|
|
127
|
-
// Collision between packages (no core involvement)
|
|
128
115
|
const preferred = prefer?.[name];
|
|
129
116
|
if (preferred) {
|
|
130
117
|
const match = candidates.find(c => c.pkg.pkg.name === preferred);
|
|
@@ -132,32 +119,29 @@ export function mergePackages(loaded, coreRuneNames, prefer) {
|
|
|
132
119
|
runes[name] = match.rune;
|
|
133
120
|
provenance[name] = {
|
|
134
121
|
qualifiedId: `${match.pkg.pkg.name}:${name}`,
|
|
135
|
-
source: '
|
|
136
|
-
|
|
122
|
+
source: 'plugin',
|
|
123
|
+
pluginName: match.pkg.pkg.name,
|
|
137
124
|
origin: match.pkg.npmName,
|
|
138
125
|
};
|
|
139
126
|
}
|
|
140
127
|
else {
|
|
141
128
|
const available = candidates.map(c => c.pkg.pkg.name).join(', ');
|
|
142
|
-
throw new Error(`Rune "${name}" preference "${preferred}" does not match any providing
|
|
129
|
+
throw new Error(`Rune "${name}" preference "${preferred}" does not match any providing plugin.\n` +
|
|
143
130
|
`Available: ${available}`);
|
|
144
131
|
}
|
|
145
132
|
}
|
|
146
133
|
else {
|
|
147
|
-
// Unresolved collision — fail with clear instructions
|
|
148
134
|
const pkgNames = candidates.map(c => c.pkg.npmName).join(', ');
|
|
149
135
|
const pkgShortNames = candidates.map(c => c.pkg.pkg.name).join(', ');
|
|
150
136
|
throw new Error(`Rune name "${name}" is ambiguous.\n` +
|
|
151
137
|
` Found in: ${pkgNames}\n\n` +
|
|
152
138
|
` Resolve by adding to refrakt.config.json:\n` +
|
|
153
139
|
` "runes": { "prefer": { "${name}": "${candidates[0].pkg.pkg.name}" } }\n\n` +
|
|
154
|
-
` Available
|
|
140
|
+
` Available plugin names: ${pkgShortNames}`);
|
|
155
141
|
}
|
|
156
142
|
}
|
|
157
143
|
}
|
|
158
|
-
// Build tags map from resolved runes
|
|
159
144
|
const tags = runeTagMap(runes);
|
|
160
|
-
// Collect theme config entries
|
|
161
145
|
const themeRunes = {};
|
|
162
146
|
const themeIcons = {};
|
|
163
147
|
const themeBackgrounds = {};
|
|
@@ -178,7 +162,6 @@ export function mergePackages(loaded, coreRuneNames, prefer) {
|
|
|
178
162
|
}
|
|
179
163
|
}
|
|
180
164
|
}
|
|
181
|
-
// Collect extensions
|
|
182
165
|
const extensions = {};
|
|
183
166
|
for (const loadedPkg of loaded) {
|
|
184
167
|
if (loadedPkg.pkg.extends) {
|
|
@@ -192,7 +175,6 @@ export function mergePackages(loaded, coreRuneNames, prefer) {
|
|
|
192
175
|
}
|
|
193
176
|
}
|
|
194
177
|
}
|
|
195
|
-
// Collect fixtures from resolved runes
|
|
196
178
|
const fixtures = {};
|
|
197
179
|
for (const name of Object.keys(runes)) {
|
|
198
180
|
for (const loadedPkg of loaded) {
|
|
@@ -209,7 +191,7 @@ export function mergePackages(loaded, coreRuneNames, prefer) {
|
|
|
209
191
|
themeIcons,
|
|
210
192
|
themeBackgrounds,
|
|
211
193
|
extensions,
|
|
212
|
-
|
|
194
|
+
plugins: loaded.map(l => l.pkg),
|
|
213
195
|
provenance,
|
|
214
196
|
fixtures,
|
|
215
197
|
};
|
|
@@ -284,22 +266,19 @@ export async function loadLocalRunes(localConfig, projectRoot) {
|
|
|
284
266
|
};
|
|
285
267
|
}
|
|
286
268
|
/**
|
|
287
|
-
* Discover file-based fixtures from an installed
|
|
269
|
+
* Discover file-based fixtures from an installed plugin's fixtures/ directory.
|
|
288
270
|
*
|
|
289
271
|
* Looks for .md files in the package's fixtures/ directory. Each file's name
|
|
290
272
|
* (without extension) becomes the fixture key (rune name).
|
|
291
273
|
*
|
|
292
274
|
* Returns a map of rune name → fixture content string.
|
|
293
275
|
*/
|
|
294
|
-
export async function
|
|
276
|
+
export async function discoverPluginFixtures(npmPackageName) {
|
|
295
277
|
const fixtures = {};
|
|
296
278
|
try {
|
|
297
|
-
// Dynamic imports to avoid top-level Node.js built-in references
|
|
298
|
-
// that break Vite browser bundling
|
|
299
279
|
const { createRequire } = await import('node:module');
|
|
300
280
|
const { existsSync, readFileSync, readdirSync } = await import('node:fs');
|
|
301
281
|
const { dirname, join } = await import('node:path');
|
|
302
|
-
// Resolve the package's directory by finding its package.json
|
|
303
282
|
const require = createRequire(import.meta.url);
|
|
304
283
|
const pkgJsonPath = require.resolve(`${npmPackageName}/package.json`);
|
|
305
284
|
const pkgDir = dirname(pkgJsonPath);
|
|
@@ -311,7 +290,7 @@ export async function discoverPackageFixtures(npmPackageName) {
|
|
|
311
290
|
for (const file of files) {
|
|
312
291
|
if (!file.endsWith('.md'))
|
|
313
292
|
continue;
|
|
314
|
-
const runeName = file.slice(0, -3);
|
|
293
|
+
const runeName = file.slice(0, -3);
|
|
315
294
|
const content = readFileSync(join(fixturesDir, file), 'utf-8');
|
|
316
295
|
if (content.trim()) {
|
|
317
296
|
fixtures[runeName] = content;
|
|
@@ -319,48 +298,46 @@ export async function discoverPackageFixtures(npmPackageName) {
|
|
|
319
298
|
}
|
|
320
299
|
}
|
|
321
300
|
catch {
|
|
322
|
-
//
|
|
301
|
+
// Plugin not resolvable via require (e.g., workspace link) — skip file fixtures
|
|
323
302
|
}
|
|
324
303
|
return fixtures;
|
|
325
304
|
}
|
|
326
|
-
/** Find the
|
|
327
|
-
function
|
|
328
|
-
|
|
329
|
-
if (mod.default && isRunePackage(mod.default)) {
|
|
305
|
+
/** Find the Plugin export from a dynamically imported module */
|
|
306
|
+
function findPluginExport(mod, npmName) {
|
|
307
|
+
if (mod.default && isPlugin(mod.default)) {
|
|
330
308
|
return mod.default;
|
|
331
309
|
}
|
|
332
|
-
// Check named exports
|
|
333
310
|
for (const value of Object.values(mod)) {
|
|
334
|
-
if (
|
|
311
|
+
if (isPlugin(value)) {
|
|
335
312
|
return value;
|
|
336
313
|
}
|
|
337
314
|
}
|
|
338
|
-
throw new Error(`Package "${npmName}" does not export a valid
|
|
315
|
+
throw new Error(`Package "${npmName}" does not export a valid Plugin object.\n` +
|
|
339
316
|
`Expected an export with { name: string, version: string, runes: { ... } }`);
|
|
340
317
|
}
|
|
341
|
-
/** Type guard for
|
|
342
|
-
function
|
|
318
|
+
/** Type guard for Plugin shape */
|
|
319
|
+
function isPlugin(value) {
|
|
343
320
|
if (typeof value !== 'object' || value === null)
|
|
344
321
|
return false;
|
|
345
322
|
const obj = value;
|
|
346
323
|
return typeof obj.name === 'string' && typeof obj.version === 'string' && typeof obj.runes === 'object' && obj.runes !== null;
|
|
347
324
|
}
|
|
348
|
-
/** Validate a loaded
|
|
349
|
-
function
|
|
325
|
+
/** Validate a loaded Plugin has required fields */
|
|
326
|
+
function validatePlugin(pkg, npmName) {
|
|
350
327
|
if (!pkg.name) {
|
|
351
|
-
throw new Error(`
|
|
328
|
+
throw new Error(`Plugin "${npmName}" has an empty name field`);
|
|
352
329
|
}
|
|
353
330
|
if (!pkg.version) {
|
|
354
|
-
throw new Error(`
|
|
331
|
+
throw new Error(`Plugin "${npmName}" has an empty version field`);
|
|
355
332
|
}
|
|
356
333
|
if (!pkg.runes || Object.keys(pkg.runes).length === 0) {
|
|
357
|
-
throw new Error(`
|
|
334
|
+
throw new Error(`Plugin "${npmName}" defines no runes`);
|
|
358
335
|
}
|
|
359
336
|
for (const [name, entry] of Object.entries(pkg.runes)) {
|
|
360
337
|
if (!entry.transform || typeof entry.transform !== 'object') {
|
|
361
|
-
throw new Error(`
|
|
338
|
+
throw new Error(`Plugin "${npmName}" rune "${name}" has an invalid transform. ` +
|
|
362
339
|
`Expected a Markdoc Schema object (created via createContentModelSchema()).`);
|
|
363
340
|
}
|
|
364
341
|
}
|
|
365
342
|
}
|
|
366
|
-
//# sourceMappingURL=
|
|
343
|
+
//# sourceMappingURL=plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"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"}
|
package/dist/reference.d.ts
CHANGED
|
@@ -47,7 +47,7 @@ export interface RuneInfo {
|
|
|
47
47
|
/** Example Markdoc snippet, falling back to `RUNE_EXAMPLES[name]` when omitted. */
|
|
48
48
|
example?: string;
|
|
49
49
|
/** Short source identifier (e.g. `"core"`, `"@refrakt-md/marketing"`) for grouping output. */
|
|
50
|
-
|
|
50
|
+
plugin?: string;
|
|
51
51
|
}
|
|
52
52
|
/** Runes that are internal or child-only — excluded from generated reference docs */
|
|
53
53
|
export declare const EXCLUDED_RUNES: Set<string>;
|
|
@@ -143,7 +143,7 @@ export interface RuneLike {
|
|
|
143
143
|
}
|
|
144
144
|
export interface HydrateOptions {
|
|
145
145
|
/** Identifier for the source (e.g. `"core"`, `"@refrakt-md/marketing"`). */
|
|
146
|
-
|
|
146
|
+
pluginName?: string;
|
|
147
147
|
/** Optional per-rune fixture string, overriding `RUNE_EXAMPLES[name]`. */
|
|
148
148
|
example?: string;
|
|
149
149
|
}
|
|
@@ -158,7 +158,7 @@ export declare function hydrateRuneInfo(rune: RuneLike, options?: HydrateOptions
|
|
|
158
158
|
export interface ReferenceContext {
|
|
159
159
|
/** All Rune-like objects keyed by primary name. */
|
|
160
160
|
runes: Record<string, RuneLike>;
|
|
161
|
-
/**
|
|
161
|
+
/** Plugin fixtures (keyed by rune name). Falls back to `RUNE_EXAMPLES[name]`. */
|
|
162
162
|
fixtures: Record<string, string>;
|
|
163
163
|
/** Per-rune source identifier (e.g. `"core"` or `"@refrakt-md/marketing"`). */
|
|
164
164
|
source: Record<string, string>;
|
|
@@ -175,7 +175,7 @@ export interface SerializedAttribute {
|
|
|
175
175
|
}
|
|
176
176
|
export interface SerializedRune {
|
|
177
177
|
name: string;
|
|
178
|
-
|
|
178
|
+
plugin: string;
|
|
179
179
|
aliases: string[];
|
|
180
180
|
description: string;
|
|
181
181
|
authoringHints?: string;
|
|
@@ -192,10 +192,10 @@ export interface SerializedRune {
|
|
|
192
192
|
example?: string;
|
|
193
193
|
}
|
|
194
194
|
/** Serialize a hydrated RuneInfo into the stable JSON shape used by the reference command. */
|
|
195
|
-
export declare function serializeRune(info: RuneInfo,
|
|
195
|
+
export declare function serializeRune(info: RuneInfo, pluginName?: string): SerializedRune;
|
|
196
196
|
export interface ReferenceGroup {
|
|
197
|
-
/**
|
|
198
|
-
|
|
197
|
+
/** Plugin short identifier (`"core"`, `"@refrakt-md/marketing"`, …). */
|
|
198
|
+
pluginName: string;
|
|
199
199
|
/** Human-readable label used as the group heading in rendered output. */
|
|
200
200
|
label: string;
|
|
201
201
|
/** Sorted list of rune summaries. */
|
|
@@ -205,7 +205,7 @@ export interface ReferenceGroup {
|
|
|
205
205
|
aliases: string[];
|
|
206
206
|
}>;
|
|
207
207
|
}
|
|
208
|
-
/** Group hydrated rune infos by source
|
|
208
|
+
/** Group hydrated rune infos by source plugin, core first then alphabetical. */
|
|
209
209
|
export declare function groupReferenceInfos(infos: RuneInfo[]): ReferenceGroup[];
|
|
210
210
|
export interface RenderReferenceOptions {
|
|
211
211
|
/** Optional preamble inserted between the `# Available Runes` heading and the TOC. */
|
package/dist/reference.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../src/reference.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAA0B,MAAM,mBAAmB,CAAC;AAS9E;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAClC,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QACP,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;YACf,QAAQ,CAAC,EAAE,OAAO,CAAC;YACnB,OAAO,CAAC,EAAE,OAAO,CAAC;YAClB,WAAW,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;KACH,CAAC;IACF;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0FAA0F;IAC1F,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,yGAAyG;IACzG,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8FAA8F;IAC9F,
|
|
1
|
+
{"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../src/reference.ts"],"names":[],"mappings":"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"}
|