@fuzdev/fuz_ui 0.198.0 → 0.199.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/README.md +5 -3
- package/dist/ApiIndex.svelte +2 -2
- package/dist/ApiModule.svelte +1 -1
- package/dist/LibraryDetail.svelte +14 -16
- package/dist/LibraryDetail.svelte.d.ts.map +1 -1
- package/dist/LibrarySummary.svelte +12 -12
- package/dist/Mdz.svelte +2 -2
- package/dist/MdzNodeView.svelte +8 -6
- package/dist/MdzNodeView.svelte.d.ts.map +1 -1
- package/dist/MdzRoot.svelte +30 -0
- package/dist/MdzRoot.svelte.d.ts +12 -0
- package/dist/MdzRoot.svelte.d.ts.map +1 -0
- package/dist/MdzStream.svelte +32 -0
- package/dist/MdzStream.svelte.d.ts +12 -0
- package/dist/MdzStream.svelte.d.ts.map +1 -0
- package/dist/MdzStreamNodeView.svelte +106 -0
- package/dist/MdzStreamNodeView.svelte.d.ts +9 -0
- package/dist/MdzStreamNodeView.svelte.d.ts.map +1 -0
- package/dist/ProjectLinks.svelte +2 -0
- package/dist/ProjectLinks.svelte.d.ts.map +1 -1
- package/dist/declaration.svelte.js +2 -2
- package/dist/library.svelte.d.ts +9 -70
- package/dist/library.svelte.d.ts.map +1 -1
- package/dist/library.svelte.js +24 -18
- package/dist/library_helpers.d.ts +3 -3
- package/dist/library_helpers.js +3 -3
- package/dist/logos.d.ts +7 -0
- package/dist/logos.d.ts.map +1 -1
- package/dist/logos.js +9 -0
- package/dist/mdz.d.ts.map +1 -1
- package/dist/mdz.js +37 -29
- package/dist/mdz_components.d.ts +37 -23
- package/dist/mdz_components.d.ts.map +1 -1
- package/dist/mdz_components.js +16 -4
- package/dist/mdz_helpers.d.ts +46 -14
- package/dist/mdz_helpers.d.ts.map +1 -1
- package/dist/mdz_helpers.js +189 -56
- package/dist/mdz_lexer.d.ts.map +1 -1
- package/dist/mdz_lexer.js +18 -22
- package/dist/mdz_opcodes.d.ts +174 -0
- package/dist/mdz_opcodes.d.ts.map +1 -0
- package/dist/mdz_opcodes.js +14 -0
- package/dist/mdz_opcodes_to_nodes.d.ts +20 -0
- package/dist/mdz_opcodes_to_nodes.d.ts.map +1 -0
- package/dist/mdz_opcodes_to_nodes.js +332 -0
- package/dist/mdz_stream_parser.d.ts +80 -0
- package/dist/mdz_stream_parser.d.ts.map +1 -0
- package/dist/mdz_stream_parser.js +354 -0
- package/dist/mdz_stream_parser_block.d.ts +76 -0
- package/dist/mdz_stream_parser_block.d.ts.map +1 -0
- package/dist/mdz_stream_parser_block.js +458 -0
- package/dist/mdz_stream_parser_inline.d.ts +52 -0
- package/dist/mdz_stream_parser_inline.d.ts.map +1 -0
- package/dist/mdz_stream_parser_inline.js +378 -0
- package/dist/mdz_stream_parser_link.d.ts +22 -0
- package/dist/mdz_stream_parser_link.d.ts.map +1 -0
- package/dist/mdz_stream_parser_link.js +215 -0
- package/dist/mdz_stream_parser_state.d.ts +187 -0
- package/dist/mdz_stream_parser_state.d.ts.map +1 -0
- package/dist/mdz_stream_parser_state.js +398 -0
- package/dist/mdz_stream_parser_text.d.ts +14 -0
- package/dist/mdz_stream_parser_text.d.ts.map +1 -0
- package/dist/mdz_stream_parser_text.js +50 -0
- package/dist/mdz_stream_parser_url.d.ts +60 -0
- package/dist/mdz_stream_parser_url.d.ts.map +1 -0
- package/dist/mdz_stream_parser_url.js +307 -0
- package/dist/mdz_stream_state.svelte.d.ts +44 -0
- package/dist/mdz_stream_state.svelte.d.ts.map +1 -0
- package/dist/mdz_stream_state.svelte.js +357 -0
- package/dist/mdz_token_parser.d.ts.map +1 -1
- package/dist/mdz_token_parser.js +8 -39
- package/dist/module.svelte.js +1 -1
- package/dist/site.svelte.d.ts +13 -0
- package/dist/site.svelte.d.ts.map +1 -1
- package/dist/site.svelte.js +8 -2
- package/dist/tsdoc_mdz.d.ts +2 -2
- package/dist/tsdoc_mdz.js +2 -2
- package/dist/vite_plugin_pkg_json.d.ts +63 -0
- package/dist/vite_plugin_pkg_json.d.ts.map +1 -0
- package/dist/vite_plugin_pkg_json.js +126 -0
- package/package.json +6 -5
- package/src/lib/declaration.svelte.ts +2 -2
- package/src/lib/library.svelte.ts +37 -20
- package/src/lib/library_helpers.ts +3 -3
- package/src/lib/logos.ts +10 -0
- package/src/lib/mdz.ts +38 -29
- package/src/lib/mdz_components.ts +40 -19
- package/src/lib/mdz_helpers.ts +199 -56
- package/src/lib/mdz_lexer.ts +18 -20
- package/src/lib/mdz_opcodes.ts +205 -0
- package/src/lib/mdz_opcodes_to_nodes.ts +375 -0
- package/src/lib/mdz_stream_parser.ts +415 -0
- package/src/lib/mdz_stream_parser_block.ts +532 -0
- package/src/lib/mdz_stream_parser_inline.ts +414 -0
- package/src/lib/mdz_stream_parser_link.ts +271 -0
- package/src/lib/mdz_stream_parser_state.ts +539 -0
- package/src/lib/mdz_stream_parser_text.ts +77 -0
- package/src/lib/mdz_stream_parser_url.ts +365 -0
- package/src/lib/mdz_stream_state.svelte.ts +387 -0
- package/src/lib/mdz_token_parser.ts +13 -40
- package/src/lib/module.svelte.ts +1 -1
- package/src/lib/site.svelte.ts +17 -2
- package/src/lib/tsdoc_mdz.ts +2 -2
- package/src/lib/vite_plugin_pkg_json.ts +142 -0
- package/dist/package_helpers.d.ts +0 -150
- package/dist/package_helpers.d.ts.map +0 -1
- package/dist/package_helpers.js +0 -179
- package/src/lib/package_helpers.ts +0 -186
package/dist/library.svelte.js
CHANGED
|
@@ -2,6 +2,7 @@ import { ensure_start, strip_end } from '@fuzdev/fuz_util/string.js';
|
|
|
2
2
|
import { create_context } from './context_helpers.js';
|
|
3
3
|
import { Declaration } from './declaration.svelte.js';
|
|
4
4
|
import { Module } from './module.svelte.js';
|
|
5
|
+
import { package_is_published, repo_name_parse, repo_url_github_owner, repo_url_parse, url_github_file, url_logo, url_npm_package, } from '@fuzdev/fuz_util/package_helpers.js';
|
|
5
6
|
export const library_context = create_context();
|
|
6
7
|
/**
|
|
7
8
|
* Normalizes a URL prefix: ensures leading `/`, strips trailing `/`, returns `''` for falsy and non-string values.
|
|
@@ -28,31 +29,30 @@ export class Library {
|
|
|
28
29
|
* Default `''` preserves single-package behavior.
|
|
29
30
|
*/
|
|
30
31
|
url_prefix;
|
|
31
|
-
|
|
32
|
+
pkg_json = $derived(this.library_json.pkg_json);
|
|
32
33
|
source_json = $derived(this.library_json.source_json);
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
34
|
+
// Everything below is derived from `pkg_json` — `LibraryJson` stores only the
|
|
35
|
+
// raw `pkg_json`/`source_json` pair, so derivation lives in exactly one place.
|
|
36
|
+
name = $derived(this.pkg_json.name);
|
|
37
|
+
repo_name = $derived(repo_name_parse(this.pkg_json.name));
|
|
38
|
+
/** Non-null — the constructor rejects a `pkg_json` without a parseable `repository`. */
|
|
39
|
+
repo_url = $derived(repo_url_parse(this.pkg_json.repository));
|
|
40
|
+
owner_name = $derived(repo_url_github_owner(this.repo_url));
|
|
41
|
+
homepage_url = $derived(this.pkg_json.homepage ?? null);
|
|
42
|
+
logo_url = $derived(url_logo(this.homepage_url, this.pkg_json.logo));
|
|
43
|
+
logo_alt = $derived(this.pkg_json.logo_alt ?? `logo for ${this.repo_name}`);
|
|
44
|
+
published = $derived(package_is_published(this.pkg_json));
|
|
45
|
+
npm_url = $derived(this.published ? url_npm_package(this.name) : null);
|
|
46
|
+
changelog_url = $derived(this.published ? url_github_file(this.repo_url, 'CHANGELOG.md') : null);
|
|
43
47
|
/**
|
|
44
|
-
* Organization URL (e.g., 'https://github.com/ryanatkn')
|
|
48
|
+
* Organization URL (e.g., 'https://github.com/ryanatkn'), built from `owner_name`.
|
|
45
49
|
*/
|
|
46
|
-
org_url = $derived(this.
|
|
47
|
-
? this.repo_url.endsWith('/' + this.repo_name)
|
|
48
|
-
? this.repo_url.slice(0, -this.repo_name.length - 1)
|
|
49
|
-
: null
|
|
50
|
-
: null);
|
|
50
|
+
org_url = $derived(this.owner_name ? 'https://github.com/' + this.owner_name : null);
|
|
51
51
|
/**
|
|
52
52
|
* All modules as rich `Module` instances.
|
|
53
53
|
*/
|
|
54
54
|
modules = $derived(this.source_json.modules
|
|
55
|
-
? this.source_json.modules.map((module_json) => new Module(this, module_json))
|
|
55
|
+
? this.source_json.modules.map((module_json) => new Module(this, module_json))
|
|
56
56
|
: []);
|
|
57
57
|
/**
|
|
58
58
|
* All modules sorted alphabetically by path.
|
|
@@ -71,6 +71,12 @@ export class Library {
|
|
|
71
71
|
*/
|
|
72
72
|
declaration_by_name = $derived(new Map(this.declarations.map((d) => [d.name, d])));
|
|
73
73
|
constructor(library_json, url_prefix = '') {
|
|
74
|
+
// `repo_url` is exposed non-null and several derived URLs depend on it, so
|
|
75
|
+
// fail loud here rather than letting a missing/unparseable repository surface
|
|
76
|
+
// as a downstream `null`.
|
|
77
|
+
if (repo_url_parse(library_json.pkg_json.repository) === null) {
|
|
78
|
+
throw Error(`failed to construct Library - pkg_json for "${library_json.pkg_json.name}" has no parseable \`repository\``);
|
|
79
|
+
}
|
|
74
80
|
this.library_json = library_json;
|
|
75
81
|
this.url_prefix = parse_library_url_prefix(url_prefix);
|
|
76
82
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Runtime UI helpers for building URLs in the library documentation system.
|
|
5
5
|
* These depend on fuz_ui's documentation paths and SvelteKit's runtime state.
|
|
6
6
|
*
|
|
7
|
-
* For generic package/repository URL helpers, see
|
|
7
|
+
* For generic package/repository URL helpers, see `@fuzdev/fuz_util/package_helpers.js`.
|
|
8
8
|
*
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
*
|
|
20
20
|
* @example
|
|
21
21
|
* ```ts
|
|
22
|
-
* // Assuming page.url.origin is 'https://
|
|
23
|
-
* url_to_root_relative('https://
|
|
22
|
+
* // Assuming page.url.origin is 'https://fuz.dev'
|
|
23
|
+
* url_to_root_relative('https://fuz.dev/docs/api')
|
|
24
24
|
* // => '/docs/api'
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
package/dist/library_helpers.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Runtime UI helpers for building URLs in the library documentation system.
|
|
5
5
|
* These depend on fuz_ui's documentation paths and SvelteKit's runtime state.
|
|
6
6
|
*
|
|
7
|
-
* For generic package/repository URL helpers, see
|
|
7
|
+
* For generic package/repository URL helpers, see `@fuzdev/fuz_util/package_helpers.js`.
|
|
8
8
|
*
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
@@ -21,8 +21,8 @@ import { page } from '$app/state';
|
|
|
21
21
|
*
|
|
22
22
|
* @example
|
|
23
23
|
* ```ts
|
|
24
|
-
* // Assuming page.url.origin is 'https://
|
|
25
|
-
* url_to_root_relative('https://
|
|
24
|
+
* // Assuming page.url.origin is 'https://fuz.dev'
|
|
25
|
+
* url_to_root_relative('https://fuz.dev/docs/api')
|
|
26
26
|
* // => '/docs/api'
|
|
27
27
|
* ```
|
|
28
28
|
*/
|
package/dist/logos.d.ts
CHANGED
|
@@ -71,6 +71,13 @@ export declare const logo_fuz_docs: {
|
|
|
71
71
|
d: string;
|
|
72
72
|
}[];
|
|
73
73
|
};
|
|
74
|
+
export declare const logo_svelte_docinfo: {
|
|
75
|
+
label: string;
|
|
76
|
+
fill: string;
|
|
77
|
+
paths: {
|
|
78
|
+
d: string;
|
|
79
|
+
}[];
|
|
80
|
+
};
|
|
74
81
|
export declare const logo_fuz_template: {
|
|
75
82
|
label: string;
|
|
76
83
|
fill: string;
|
package/dist/logos.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logos.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/logos.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,QAAQ;;;;;;CAgCF,CAAC;AAEpB,eAAO,MAAM,QAAQ;;;;;;CAQF,CAAC;AAEpB,eAAO,MAAM,YAAY;;;;;;CAIN,CAAC;AAEpB,eAAO,MAAM,YAAY;;;;;;;;;CAKN,CAAC;AAEpB,eAAO,MAAM,WAAW;;;;;;CAIL,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;CAIP,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;CAIP,CAAC;AAEpB,eAAO,MAAM,iBAAiB;;;;;;CAIX,CAAC;AAEpB,eAAO,MAAM,eAAe;;;;;;CAIT,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;CAIP,CAAC;AAEpB,eAAO,MAAM,iBAAiB;;;;;;CAQX,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;CAwBP,CAAC;AAEpB,eAAO,MAAM,WAAW;;;;;;;;;CAWL,CAAC;AAEpB,eAAO,MAAM,QAAQ;;;;;;CAQF,CAAC"}
|
|
1
|
+
{"version":3,"file":"logos.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/logos.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,QAAQ;;;;;;CAgCF,CAAC;AAEpB,eAAO,MAAM,QAAQ;;;;;;CAQF,CAAC;AAEpB,eAAO,MAAM,YAAY;;;;;;CAIN,CAAC;AAEpB,eAAO,MAAM,YAAY;;;;;;;;;CAKN,CAAC;AAEpB,eAAO,MAAM,WAAW;;;;;;CAIL,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;CAIP,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;CAIP,CAAC;AAEpB,eAAO,MAAM,iBAAiB;;;;;;CAIX,CAAC;AAEpB,eAAO,MAAM,eAAe;;;;;;CAIT,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;CAIP,CAAC;AAEpB,eAAO,MAAM,mBAAmB;;;;;;CAQb,CAAC;AAEpB,eAAO,MAAM,iBAAiB;;;;;;CAQX,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;CAwBP,CAAC;AAEpB,eAAO,MAAM,WAAW;;;;;;;;;CAWL,CAAC;AAEpB,eAAO,MAAM,QAAQ;;;;;;CAQF,CAAC"}
|
package/dist/logos.js
CHANGED
|
@@ -98,6 +98,15 @@ export const logo_fuz_docs = {
|
|
|
98
98
|
fill: '#1ec3d2',
|
|
99
99
|
paths: logo_fuz.paths,
|
|
100
100
|
};
|
|
101
|
+
export const logo_svelte_docinfo = {
|
|
102
|
+
label: 'a cyan scroll with curling ends',
|
|
103
|
+
fill: '#1ec3d2',
|
|
104
|
+
paths: [
|
|
105
|
+
{
|
|
106
|
+
d: 'M 83,80.28 c -9.75,-34.41 2.18,-52.33 -3.76,-70 -2.31,-7.66 -48.25,-12 -70.25,-6 -12,6 -10,24 4,24 6,0 5.51,-13.67 6,-18 0,0 -1.43,59.52 5.13,80.21 1.2,3.8 2.91,5.28 4,5.92 3.93,2.31 63.48,3.74 68.01,0.54 1.18,-0.84 3.11,-5.38 2.63,-8.75 -0.42,-2.94 -3.27,-5.78 -5.28,-6.26 -1.74,-0.41 -0.62,-0.79 -5.37,-0.59 C 77.2,81.96 71.49,85.44 47.57,84.25 41.58,84.09 11.04,79.77 64.12,56.73 51.2,46.21 46.99,49.36 37.77,43.13 37.39,42.87 55,45.85 66.37,56.98 -10.84,93.94 82.99,80.29 82.99,80.29 Z',
|
|
107
|
+
},
|
|
108
|
+
],
|
|
109
|
+
};
|
|
101
110
|
export const logo_fuz_template = {
|
|
102
111
|
label: 'a friendly orange pixelated spider facing you',
|
|
103
112
|
fill: '#f4672f',
|
package/dist/mdz.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdz.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;
|
|
1
|
+
{"version":3,"file":"mdz.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AA0CH;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,KAAK,CAAC,OAAO,CAAgC,CAAC;AAEvF,MAAM,MAAM,OAAO,GAChB,WAAW,GACX,WAAW,GACX,gBAAgB,GAChB,WAAW,GACX,aAAa,GACb,oBAAoB,GACpB,WAAW,GACX,gBAAgB,GAChB,SAAS,GACT,cAAc,GACd,cAAc,GACd,gBAAgB,CAAC;AAEpB,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACpD,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IACjD,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACxD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACzB,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;CACnC;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACpD,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,SAAU,SAAQ,WAAW;IAC7C,IAAI,EAAE,IAAI,CAAC;CACX;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAClD,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAClD,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACpD,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AAED;;;;GAIG;AACH,qBAAa,SAAS;;gBAQT,QAAQ,EAAE,MAAM;IAI5B;;;;;;OAMG;IACH,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC;CAi0CvB"}
|
package/dist/mdz.js
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
*
|
|
29
29
|
* @module
|
|
30
30
|
*/
|
|
31
|
-
import { BACKTICK, ASTERISK, UNDERSCORE, TILDE, NEWLINE, HYPHEN, HASH, SPACE, TAB, LEFT_ANGLE, RIGHT_ANGLE, SLASH, LEFT_BRACKET, RIGHT_BRACKET, LEFT_PAREN, RIGHT_PAREN, A_UPPER, Z_UPPER, HR_HYPHEN_COUNT, MIN_CODEBLOCK_BACKTICKS, MAX_HEADING_LEVEL,
|
|
31
|
+
import { BACKTICK, ASTERISK, UNDERSCORE, TILDE, NEWLINE, HYPHEN, HASH, SPACE, TAB, LEFT_ANGLE, RIGHT_ANGLE, SLASH, LEFT_BRACKET, RIGHT_BRACKET, LEFT_PAREN, RIGHT_PAREN, A_UPPER, Z_UPPER, HR_HYPHEN_COUNT, MIN_CODEBLOCK_BACKTICKS, MAX_HEADING_LEVEL, match_url_prefix_case_insensitive, is_letter, is_tag_name_char, is_word_char, PERIOD, is_valid_path_char, trim_trailing_punctuation, is_at_absolute_path, is_at_relative_path, extract_single_tag, mdz_heading_id, mdz_is_url, mdz_is_safe_reference, mdz_push_merging_text, } from './mdz_helpers.js';
|
|
32
32
|
// TODO design incremental parsing or some system that preserves Svelte components across re-renders when possible
|
|
33
33
|
/**
|
|
34
34
|
* Parses text to an array of `MdzNode`.
|
|
@@ -479,6 +479,18 @@ export class MdzParser {
|
|
|
479
479
|
};
|
|
480
480
|
}
|
|
481
481
|
}
|
|
482
|
+
// Reject unsafe protocols (javascript:, data:, etc.) — fall back to text.
|
|
483
|
+
// `is_valid_path_char` permits `:` so a malicious `[x](javascript:...)` would
|
|
484
|
+
// otherwise pass character validation and reach the renderer.
|
|
485
|
+
if (!mdz_is_safe_reference(reference)) {
|
|
486
|
+
this.#index = start + 1;
|
|
487
|
+
return {
|
|
488
|
+
type: 'Text',
|
|
489
|
+
content: '[',
|
|
490
|
+
start,
|
|
491
|
+
end: this.#index,
|
|
492
|
+
};
|
|
493
|
+
}
|
|
482
494
|
this.#index = close_paren + 1;
|
|
483
495
|
// Determine link type (external vs internal)
|
|
484
496
|
const link_type = mdz_is_url(reference) ? 'external' : 'internal';
|
|
@@ -663,27 +675,28 @@ export class MdzParser {
|
|
|
663
675
|
}
|
|
664
676
|
/**
|
|
665
677
|
* Check if current position is the start of an external URL (`https://` or `http://`).
|
|
678
|
+
*
|
|
679
|
+
* Requires the preceding character (if any) to not be a word character. This
|
|
680
|
+
* matches the streaming parser and the spec's "false negatives over false
|
|
681
|
+
* positives" policy — `xhttps://...` is treated as plain text rather than
|
|
682
|
+
* `x` followed by a link.
|
|
683
|
+
*
|
|
684
|
+
* Scheme matching is case-insensitive (RFC 3986 §3.1); the original casing
|
|
685
|
+
* is preserved in the emitted reference.
|
|
666
686
|
*/
|
|
667
687
|
#is_at_url() {
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
if (this.#index + HTTPS_PREFIX_LENGTH >= this.#template.length) {
|
|
672
|
-
return false;
|
|
673
|
-
}
|
|
674
|
-
const next_char = this.#template.charCodeAt(this.#index + HTTPS_PREFIX_LENGTH);
|
|
675
|
-
return next_char !== SPACE && next_char !== NEWLINE;
|
|
676
|
-
}
|
|
677
|
-
if (this.#match('http://')) {
|
|
678
|
-
// Check for protocol-only (e.g., just "http://")
|
|
679
|
-
// Must have at least one non-whitespace character after protocol
|
|
680
|
-
if (this.#index + HTTP_PREFIX_LENGTH >= this.#template.length) {
|
|
681
|
-
return false;
|
|
682
|
-
}
|
|
683
|
-
const next_char = this.#template.charCodeAt(this.#index + HTTP_PREFIX_LENGTH);
|
|
684
|
-
return next_char !== SPACE && next_char !== NEWLINE;
|
|
688
|
+
// word boundary check: skip when preceded by [A-Za-z0-9]
|
|
689
|
+
if (this.#index > 0 && is_word_char(this.#template.charCodeAt(this.#index - 1))) {
|
|
690
|
+
return false;
|
|
685
691
|
}
|
|
686
|
-
|
|
692
|
+
const prefix_len = match_url_prefix_case_insensitive(this.#template, this.#index);
|
|
693
|
+
if (prefix_len === 0)
|
|
694
|
+
return false;
|
|
695
|
+
// Must have at least one non-whitespace character after protocol
|
|
696
|
+
if (this.#index + prefix_len >= this.#template.length)
|
|
697
|
+
return false;
|
|
698
|
+
const next_char = this.#template.charCodeAt(this.#index + prefix_len);
|
|
699
|
+
return next_char !== SPACE && next_char !== NEWLINE;
|
|
687
700
|
}
|
|
688
701
|
/**
|
|
689
702
|
* Parse auto-detected external URL (`https://` or `http://`).
|
|
@@ -691,13 +704,8 @@ export class MdzParser {
|
|
|
691
704
|
*/
|
|
692
705
|
#parse_auto_link_url() {
|
|
693
706
|
const start = this.#index;
|
|
694
|
-
// Consume protocol
|
|
695
|
-
|
|
696
|
-
this.#index += HTTPS_PREFIX_LENGTH;
|
|
697
|
-
}
|
|
698
|
-
else if (this.#match('http://')) {
|
|
699
|
-
this.#index += HTTP_PREFIX_LENGTH;
|
|
700
|
-
}
|
|
707
|
+
// Consume protocol (case-insensitive match; original casing preserved in reference)
|
|
708
|
+
this.#index += match_url_prefix_case_insensitive(this.#template, this.#index);
|
|
701
709
|
// Collect URL characters using RFC 3986 whitelist
|
|
702
710
|
// Stop at whitespace or any character invalid in URIs
|
|
703
711
|
while (this.#index < this.#template.length) {
|
|
@@ -797,7 +805,7 @@ export class MdzParser {
|
|
|
797
805
|
}
|
|
798
806
|
}
|
|
799
807
|
// Check for URL or internal absolute/relative path mid-text (char code guard avoids startsWith on every char)
|
|
800
|
-
if ((char_code === 104 /* h */ && this.#is_at_url()) ||
|
|
808
|
+
if (((char_code === 104 /* h */ || char_code === 72) /* H */ && this.#is_at_url()) ||
|
|
801
809
|
(char_code === SLASH && is_at_absolute_path(this.#template, this.#index)) ||
|
|
802
810
|
(char_code === PERIOD && is_at_relative_path(this.#template, this.#index))) {
|
|
803
811
|
break;
|
|
@@ -851,8 +859,8 @@ export class MdzParser {
|
|
|
851
859
|
// Paragraph break interrupts inline formatting
|
|
852
860
|
break;
|
|
853
861
|
}
|
|
854
|
-
|
|
855
|
-
nodes
|
|
862
|
+
// merge adjacent Text nodes (e.g., text + failed delimiter + text)
|
|
863
|
+
mdz_push_merging_text(nodes, this.#parse_node());
|
|
856
864
|
}
|
|
857
865
|
// Restore previous boundary
|
|
858
866
|
this.#max_search_index = saved_max_search_index;
|
package/dist/mdz_components.d.ts
CHANGED
|
@@ -1,22 +1,38 @@
|
|
|
1
1
|
import type { Component } from 'svelte';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Component registry for custom Svelte components that can be used in mdz content.
|
|
4
|
+
*
|
|
5
|
+
* For example, registering 'Alert' allows using `<Alert>...</Alert>` in mdz content.
|
|
6
|
+
*
|
|
7
|
+
* The Map values are the Svelte component constructors.
|
|
8
|
+
*/
|
|
9
|
+
export type MdzComponents = Map<string, Component<any, any>>;
|
|
10
|
+
/**
|
|
11
|
+
* Element registry for HTML elements that can be used in mdz content.
|
|
12
|
+
*
|
|
13
|
+
* For example, registering 'div' allows using `<div>...</div>` in mdz content.
|
|
14
|
+
*
|
|
15
|
+
* The Map values are boolean placeholders for future configuration options.
|
|
16
|
+
*/
|
|
17
|
+
export type MdzElements = Map<string, boolean>;
|
|
18
|
+
/**
|
|
19
|
+
* Context for providing custom mdz components via a getter function.
|
|
20
|
+
* Set to a getter (e.g., `() => components`) so changes are reflected reactively.
|
|
5
21
|
*/
|
|
6
22
|
export declare const mdz_components_context: {
|
|
7
|
-
get: (error_message?: string) => MdzComponents;
|
|
8
|
-
get_maybe: () => MdzComponents | undefined;
|
|
9
|
-
set: (value: MdzComponents) => MdzComponents;
|
|
23
|
+
get: (error_message?: string) => () => MdzComponents | undefined;
|
|
24
|
+
get_maybe: () => (() => MdzComponents | undefined) | undefined;
|
|
25
|
+
set: (value: () => MdzComponents | undefined) => () => MdzComponents | undefined;
|
|
10
26
|
};
|
|
11
27
|
/**
|
|
12
|
-
* Context for providing allowed HTML elements.
|
|
13
|
-
*
|
|
28
|
+
* Context for providing allowed HTML elements via a getter function.
|
|
29
|
+
* Set to a getter (e.g., `() => elements`) so changes are reflected reactively.
|
|
14
30
|
* By default, no HTML elements are allowed.
|
|
15
31
|
*/
|
|
16
32
|
export declare const mdz_elements_context: {
|
|
17
|
-
get: (error_message?: string) => MdzElements;
|
|
18
|
-
get_maybe: () => MdzElements | undefined;
|
|
19
|
-
set: (value: MdzElements) => MdzElements;
|
|
33
|
+
get: (error_message?: string) => () => MdzElements | undefined;
|
|
34
|
+
get_maybe: () => (() => MdzElements | undefined) | undefined;
|
|
35
|
+
set: (value: () => MdzElements | undefined) => () => MdzElements | undefined;
|
|
20
36
|
};
|
|
21
37
|
/**
|
|
22
38
|
* Context for providing a base path getter for resolving relative links in mdz content.
|
|
@@ -30,20 +46,18 @@ export declare const mdz_base_context: {
|
|
|
30
46
|
get_maybe: () => (() => string | undefined) | undefined;
|
|
31
47
|
set: (value: () => string | undefined) => () => string | undefined;
|
|
32
48
|
};
|
|
49
|
+
interface MdzGetterContext<T> {
|
|
50
|
+
get_maybe(): (() => T | undefined) | undefined;
|
|
51
|
+
set(value: () => T | undefined): unknown;
|
|
52
|
+
}
|
|
33
53
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* For example, registering 'Alert' allows using `<Alert>...</Alert>` in mdz content.
|
|
37
|
-
*
|
|
38
|
-
* The Map values are the Svelte component constructors.
|
|
39
|
-
*/
|
|
40
|
-
export type MdzComponents = Map<string, Component<any, any>>;
|
|
41
|
-
/**
|
|
42
|
-
* Element registry for HTML elements that can be used in mdz content.
|
|
54
|
+
* Set an mdz context to a getter that prefers the local `value_fn` and falls
|
|
55
|
+
* back to the ancestor's value when `value_fn()` returns `undefined`.
|
|
43
56
|
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
57
|
+
* Pass `value_fn` as a getter (not a snapshot) so prop changes remain reactive.
|
|
58
|
+
* The ancestor lookup happens once at component init — that's intentional, it
|
|
59
|
+
* captures the surrounding scope's context at mount time.
|
|
47
60
|
*/
|
|
48
|
-
export
|
|
61
|
+
export declare const set_mdz_context_with_fallback: <T>(context: MdzGetterContext<T>, value_fn: () => T | undefined) => void;
|
|
62
|
+
export {};
|
|
49
63
|
//# sourceMappingURL=mdz_components.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdz_components.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz_components.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,QAAQ,CAAC;AAItC;;;GAGG;AACH,eAAO,MAAM,sBAAsB
|
|
1
|
+
{"version":3,"file":"mdz_components.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz_components.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,QAAQ,CAAC;AAItC;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,sBAAsB;2CAAwB,aAAa,GAAG,SAAS;4BAAzB,aAAa,GAAG,SAAS;uBAAzB,aAAa,GAAG,SAAS,WAAzB,aAAa,GAAG,SAAS;CAAG,CAAC;AAExF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;2CAAwB,WAAW,GAAG,SAAS;4BAAvB,WAAW,GAAG,SAAS;uBAAvB,WAAW,GAAG,SAAS,WAAvB,WAAW,GAAG,SAAS;CAAG,CAAC;AAEpF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB;2CAAwB,MAAM,GAAG,SAAS;4BAAlB,MAAM,GAAG,SAAS;uBAAlB,MAAM,GAAG,SAAS,WAAlB,MAAM,GAAG,SAAS;CAAG,CAAC;AAE3E,UAAU,gBAAgB,CAAC,CAAC;IAC3B,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IAC/C,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC;CACzC;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B,GAAI,CAAC,EAC9C,SAAS,gBAAgB,CAAC,CAAC,CAAC,EAC5B,UAAU,MAAM,CAAC,GAAG,SAAS,KAC3B,IAGF,CAAC"}
|
package/dist/mdz_components.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { create_context } from './context_helpers.js';
|
|
2
2
|
/**
|
|
3
|
-
* Context for providing custom mdz components.
|
|
4
|
-
*
|
|
3
|
+
* Context for providing custom mdz components via a getter function.
|
|
4
|
+
* Set to a getter (e.g., `() => components`) so changes are reflected reactively.
|
|
5
5
|
*/
|
|
6
6
|
export const mdz_components_context = create_context();
|
|
7
7
|
/**
|
|
8
|
-
* Context for providing allowed HTML elements.
|
|
9
|
-
*
|
|
8
|
+
* Context for providing allowed HTML elements via a getter function.
|
|
9
|
+
* Set to a getter (e.g., `() => elements`) so changes are reflected reactively.
|
|
10
10
|
* By default, no HTML elements are allowed.
|
|
11
11
|
*/
|
|
12
12
|
export const mdz_elements_context = create_context();
|
|
@@ -18,3 +18,15 @@ export const mdz_elements_context = create_context();
|
|
|
18
18
|
* When not set, relative paths use raw hrefs (browser resolves them).
|
|
19
19
|
*/
|
|
20
20
|
export const mdz_base_context = create_context();
|
|
21
|
+
/**
|
|
22
|
+
* Set an mdz context to a getter that prefers the local `value_fn` and falls
|
|
23
|
+
* back to the ancestor's value when `value_fn()` returns `undefined`.
|
|
24
|
+
*
|
|
25
|
+
* Pass `value_fn` as a getter (not a snapshot) so prop changes remain reactive.
|
|
26
|
+
* The ancestor lookup happens once at component init — that's intentional, it
|
|
27
|
+
* captures the surrounding scope's context at mount time.
|
|
28
|
+
*/
|
|
29
|
+
export const set_mdz_context_with_fallback = (context, value_fn) => {
|
|
30
|
+
const ancestor = context.get_maybe();
|
|
31
|
+
context.set(() => value_fn() ?? ancestor?.());
|
|
32
|
+
};
|
package/dist/mdz_helpers.d.ts
CHANGED
|
@@ -47,6 +47,23 @@ export declare const MIN_CODEBLOCK_BACKTICKS = 3;
|
|
|
47
47
|
export declare const MAX_HEADING_LEVEL = 6;
|
|
48
48
|
export declare const HTTPS_PREFIX_LENGTH = 8;
|
|
49
49
|
export declare const HTTP_PREFIX_LENGTH = 7;
|
|
50
|
+
export declare const H_LOWER = 104;
|
|
51
|
+
export declare const H_UPPER = 72;
|
|
52
|
+
/**
|
|
53
|
+
* Lowercase an ASCII letter code; passes other chars through.
|
|
54
|
+
* Mirrors the `[A-Z] → [a-z]` shift without touching non-ASCII.
|
|
55
|
+
*/
|
|
56
|
+
export declare const ascii_to_lower: (char_code: number) => number;
|
|
57
|
+
/**
|
|
58
|
+
* Case-insensitive URL scheme prefix check. Returns the prefix length
|
|
59
|
+
* (8 for `https://`, 7 for `http://`) or 0 if neither matches at `pos`.
|
|
60
|
+
*
|
|
61
|
+
* URI schemes are case-insensitive per RFC 3986 §3.1, and mobile keyboards
|
|
62
|
+
* routinely auto-capitalize the first letter of a sentence, producing
|
|
63
|
+
* `Https://` etc. The original case is preserved in the emitted reference —
|
|
64
|
+
* browsers normalize schemes themselves.
|
|
65
|
+
*/
|
|
66
|
+
export declare const match_url_prefix_case_insensitive: (s: string, pos: number) => 0 | 7 | 8;
|
|
50
67
|
/**
|
|
51
68
|
* Check if character code is a letter (A-Z, a-z).
|
|
52
69
|
*/
|
|
@@ -59,30 +76,26 @@ export declare const is_tag_name_char: (char_code: number) => boolean;
|
|
|
59
76
|
* Check if character is part of a word for word boundary detection.
|
|
60
77
|
* Used to prevent intraword emphasis with `_` and `~` delimiters.
|
|
61
78
|
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
79
|
+
* Only alphanumeric characters (A-Z, a-z, 0-9) are word characters.
|
|
80
|
+
* Formatting delimiters (`*`, `_`, `~`) fall outside all three ranges,
|
|
81
|
+
* so they're naturally excluded without explicit checks.
|
|
64
82
|
*
|
|
65
83
|
* This prevents false positives with snake_case identifiers while allowing
|
|
66
84
|
* adjacent formatting like `**bold**_italic_`.
|
|
67
85
|
*/
|
|
68
86
|
export declare const is_word_char: (char_code: number) => boolean;
|
|
69
|
-
/**
|
|
70
|
-
* Check if character code is valid in URI path per RFC 3986.
|
|
71
|
-
* Validates against the `pchar` production plus path/query/fragment separators.
|
|
72
|
-
*
|
|
73
|
-
* Valid characters:
|
|
74
|
-
* - unreserved: A-Z a-z 0-9 - . _ ~
|
|
75
|
-
* - sub-delims: ! $ & ' ( ) * + , ; =
|
|
76
|
-
* - path allowed: : @
|
|
77
|
-
* - separators: / ? #
|
|
78
|
-
* - percent-encoding: %
|
|
79
|
-
*/
|
|
80
87
|
export declare const is_valid_path_char: (char_code: number) => boolean;
|
|
81
88
|
/**
|
|
82
89
|
* Trim trailing punctuation from URL/path per RFC 3986 and GFM rules.
|
|
83
90
|
* - Trims simple trailing: .,;:!?]
|
|
84
91
|
* - Balanced logic for () only (valid in path components)
|
|
85
|
-
*
|
|
92
|
+
*
|
|
93
|
+
* Note on `]`: the mdz parsers (`mdz.ts`, `mdz_stream_parser_url.ts`,
|
|
94
|
+
* `mdz_lexer.ts`) scan URL/path chars through `is_valid_path_char`, which
|
|
95
|
+
* already rejects `]` — so it can never reach this function via parser flow.
|
|
96
|
+
* The `]` branch here is for external callers using this helper directly on
|
|
97
|
+
* arbitrary URL-ish input (it is part of the published `@fuzdev/fuz_ui`
|
|
98
|
+
* surface, see `mdz_helpers.test.ts` for direct coverage).
|
|
86
99
|
*
|
|
87
100
|
* Optimized to avoid O(n²) string slicing - tracks end index and slices once at the end.
|
|
88
101
|
*/
|
|
@@ -114,7 +127,14 @@ export declare const mdz_text_content: (nodes: Array<MdzNode>) => string;
|
|
|
114
127
|
* For case-preserving IDs (e.g. API declarations), see `docs_slugify` in `docs_helpers.svelte.ts`.
|
|
115
128
|
*/
|
|
116
129
|
export declare const mdz_heading_id: (nodes: Array<MdzNode>) => string;
|
|
130
|
+
/**
|
|
131
|
+
* Generates a lowercase slug id for a heading from plain text content.
|
|
132
|
+
* Used by the streaming parser which tracks text content directly
|
|
133
|
+
* rather than building `MdzNode[]` trees.
|
|
134
|
+
*/
|
|
135
|
+
export declare const mdz_heading_id_from_text: (text: string) => string;
|
|
117
136
|
export declare const mdz_is_url: (s: string) => boolean;
|
|
137
|
+
export declare const mdz_is_safe_reference: (reference: string) => boolean;
|
|
118
138
|
/**
|
|
119
139
|
* Resolves a relative path (`./` or `../`) against a base path.
|
|
120
140
|
* The base is treated as a directory regardless of trailing slash
|
|
@@ -128,5 +148,17 @@ export declare const mdz_is_url: (s: string) => boolean;
|
|
|
128
148
|
* @returns an absolute resolved path (e.g., `'/docs/mdz/grammar'`)
|
|
129
149
|
*/
|
|
130
150
|
export declare const resolve_relative_path: (reference: string, base: string) => string;
|
|
151
|
+
/**
|
|
152
|
+
* Push a node into a children array, coalescing with the previous Text node.
|
|
153
|
+
* Mutates `prev.content` and `prev.end` when both are Text, avoiding array growth
|
|
154
|
+
* and an extra allocation. Callers must own `dest` and not retain references to
|
|
155
|
+
* the prior last element across the call.
|
|
156
|
+
*/
|
|
157
|
+
export declare const mdz_push_merging_text: (dest: Array<MdzNode>, node: MdzNode) => void;
|
|
158
|
+
/**
|
|
159
|
+
* Return a new array with adjacent Text nodes merged into single nodes.
|
|
160
|
+
* Fast path: returns the original array when no merging is needed.
|
|
161
|
+
*/
|
|
162
|
+
export declare const mdz_merge_adjacent_text: (nodes: Array<MdzNode>) => Array<MdzNode>;
|
|
131
163
|
export declare const extract_single_tag: (nodes: Array<MdzNode>) => MdzComponentNode | MdzElementNode | null;
|
|
132
164
|
//# sourceMappingURL=mdz_helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdz_helpers.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz_helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"mdz_helpers.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz_helpers.ts"],"names":[],"mappings":"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"}
|