@wdprlib/render 2.0.0 → 3.0.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.
Files changed (169) hide show
  1. package/dist/index.cjs +2332 -2032
  2. package/dist/index.d.cts +15 -13
  3. package/dist/index.d.ts +15 -13
  4. package/dist/index.js +2336 -2036
  5. package/package.json +5 -3
  6. package/src/context/attributes.ts +14 -0
  7. package/src/context/bibliography.ts +109 -0
  8. package/src/context/counters.ts +51 -0
  9. package/src/context/image-urls.ts +31 -0
  10. package/src/context/index.ts +285 -0
  11. package/src/context/output.ts +17 -0
  12. package/src/context/page-urls.ts +81 -0
  13. package/src/context/style-slots.ts +29 -0
  14. package/src/context/urls.ts +2 -0
  15. package/src/elements/bibliography/block.ts +27 -0
  16. package/src/elements/bibliography/cite.ts +23 -0
  17. package/src/elements/bibliography/ids.ts +9 -0
  18. package/src/elements/bibliography/index.ts +9 -0
  19. package/src/elements/clear-float.ts +27 -0
  20. package/src/elements/code/contents.ts +18 -0
  21. package/src/elements/code/index.ts +29 -0
  22. package/src/elements/collapsible/index.ts +31 -0
  23. package/src/elements/collapsible/labels.ts +35 -0
  24. package/src/elements/collapsible/link.ts +11 -0
  25. package/src/elements/collapsible/sections.ts +39 -0
  26. package/src/elements/color.ts +32 -0
  27. package/src/elements/container/attributes.ts +28 -0
  28. package/src/elements/container/header.ts +27 -0
  29. package/src/elements/container/index.ts +35 -0
  30. package/src/elements/container/string-container.ts +40 -0
  31. package/src/elements/container/string-types.ts +63 -0
  32. package/src/elements/container/wrappers.ts +32 -0
  33. package/src/elements/date/format.ts +20 -0
  34. package/src/elements/date/index.ts +34 -0
  35. package/src/elements/date/output.ts +6 -0
  36. package/src/elements/embed/iframe.ts +8 -0
  37. package/src/elements/embed/index.ts +28 -0
  38. package/src/elements/embed/providers.ts +43 -0
  39. package/src/elements/embed/validation.ts +15 -0
  40. package/src/elements/embed-block/allowlist.ts +60 -0
  41. package/src/elements/embed-block/boolean-attributes.ts +38 -0
  42. package/src/elements/embed-block/iframe.ts +33 -0
  43. package/src/elements/embed-block/index.ts +31 -0
  44. package/src/elements/embed-block/sanitize-config.ts +22 -0
  45. package/src/elements/embed-block/sanitize.ts +44 -0
  46. package/src/elements/expr/branch.ts +29 -0
  47. package/src/elements/expr/index.ts +63 -0
  48. package/src/elements/expr/result.ts +19 -0
  49. package/src/elements/footnote/body.ts +11 -0
  50. package/src/elements/footnote/index.ts +35 -0
  51. package/src/elements/footnote/ref.ts +16 -0
  52. package/src/elements/html/attributes.ts +24 -0
  53. package/src/elements/html/index.ts +39 -0
  54. package/src/elements/html/url.ts +19 -0
  55. package/src/elements/iframe/attributes.ts +28 -0
  56. package/src/elements/iframe/index.ts +22 -0
  57. package/src/elements/iftags/condition.ts +42 -0
  58. package/src/elements/iftags/index.ts +39 -0
  59. package/src/elements/iftags/style-slot.ts +23 -0
  60. package/src/elements/iftags/tokens.ts +36 -0
  61. package/src/elements/image/alignment.ts +44 -0
  62. package/src/elements/image/attributes.ts +10 -0
  63. package/src/elements/image/img-attributes.ts +26 -0
  64. package/src/elements/image/index.ts +36 -0
  65. package/src/elements/image/link-href.ts +24 -0
  66. package/src/elements/image/link.ts +13 -0
  67. package/src/elements/image/source.ts +16 -0
  68. package/src/elements/include/index.ts +35 -0
  69. package/src/elements/include/missing.ts +15 -0
  70. package/src/elements/index.ts +35 -0
  71. package/src/elements/line-break.ts +22 -0
  72. package/src/elements/link/anchor-name.ts +6 -0
  73. package/src/elements/link/anchor.ts +27 -0
  74. package/src/elements/link/attributes.ts +47 -0
  75. package/src/elements/link/index.ts +26 -0
  76. package/src/elements/link/label.ts +23 -0
  77. package/src/elements/link/target.ts +20 -0
  78. package/src/elements/list/attributes.ts +19 -0
  79. package/src/elements/list/definition-list.ts +16 -0
  80. package/src/elements/list/index.ts +48 -0
  81. package/src/elements/list/item-rendering.ts +38 -0
  82. package/src/elements/list/items.ts +61 -0
  83. package/src/elements/list/no-marker.ts +53 -0
  84. package/src/elements/list/paragraphs.ts +34 -0
  85. package/src/elements/list/trim.ts +38 -0
  86. package/src/elements/math/block.ts +29 -0
  87. package/src/elements/math/equation-ref.ts +12 -0
  88. package/src/elements/math/index.ts +14 -0
  89. package/src/elements/math/inline.ts +19 -0
  90. package/src/elements/math/latex.ts +27 -0
  91. package/src/elements/math/source.ts +18 -0
  92. package/src/elements/module/backlinks.ts +29 -0
  93. package/src/elements/module/categories.ts +27 -0
  94. package/src/elements/module/empty-container.ts +10 -0
  95. package/src/elements/module/index.ts +65 -0
  96. package/src/elements/module/join-markup.ts +10 -0
  97. package/src/elements/module/join.ts +28 -0
  98. package/src/elements/module/listpages.ts +27 -0
  99. package/src/elements/module/listusers.ts +27 -0
  100. package/src/elements/module/page-tree.ts +27 -0
  101. package/src/elements/module/rate-markup.ts +10 -0
  102. package/src/elements/module/rate.ts +35 -0
  103. package/src/elements/module/unknown.ts +11 -0
  104. package/src/elements/tab-view/ids.ts +16 -0
  105. package/src/elements/tab-view/index.ts +31 -0
  106. package/src/elements/tab-view/navigation.ts +15 -0
  107. package/src/elements/tab-view/panels.ts +16 -0
  108. package/src/elements/table/attributes.ts +23 -0
  109. package/src/elements/table/cell-attributes.ts +62 -0
  110. package/src/elements/table/cell.ts +13 -0
  111. package/src/elements/table/index.ts +27 -0
  112. package/src/elements/text/email.ts +20 -0
  113. package/src/elements/text/index.ts +11 -0
  114. package/src/elements/text/plain.ts +11 -0
  115. package/src/elements/text/raw.ts +20 -0
  116. package/src/elements/toc/body.ts +12 -0
  117. package/src/elements/toc/entries.ts +34 -0
  118. package/src/elements/toc/frame.ts +27 -0
  119. package/src/elements/toc/index.ts +17 -0
  120. package/src/elements/toc/link.ts +26 -0
  121. package/src/elements/user/index.ts +40 -0
  122. package/src/elements/user/markup.ts +34 -0
  123. package/src/elements/user/resolve.ts +6 -0
  124. package/src/escape/attribute-allowlists.ts +101 -0
  125. package/src/escape/attributes.ts +62 -0
  126. package/src/escape/css-color-functions.ts +18 -0
  127. package/src/escape/css-colors.ts +183 -0
  128. package/src/escape/css-danger.ts +22 -0
  129. package/src/escape/css-normalize.ts +54 -0
  130. package/src/escape/css-style.ts +78 -0
  131. package/src/escape/css-urls.ts +76 -0
  132. package/src/escape/css.ts +4 -0
  133. package/src/escape/email.ts +22 -0
  134. package/src/escape/html.ts +68 -0
  135. package/src/escape/index.ts +15 -0
  136. package/src/escape/url.ts +18 -0
  137. package/src/hash.ts +62 -0
  138. package/src/index.ts +26 -0
  139. package/src/libs/highlighter/engine/end-pattern.ts +26 -0
  140. package/src/libs/highlighter/engine/html.ts +19 -0
  141. package/src/libs/highlighter/engine/index.ts +3 -0
  142. package/src/libs/highlighter/engine/keywords.ts +22 -0
  143. package/src/libs/highlighter/engine/parts.ts +36 -0
  144. package/src/libs/highlighter/engine/preprocess.ts +10 -0
  145. package/src/libs/highlighter/engine/render.ts +31 -0
  146. package/src/libs/highlighter/engine/token.ts +7 -0
  147. package/src/libs/highlighter/engine/tokenizer.ts +266 -0
  148. package/src/libs/highlighter/engine/utils.ts +38 -0
  149. package/src/libs/highlighter/index.ts +70 -0
  150. package/src/libs/highlighter/languages/cpp.ts +345 -0
  151. package/src/libs/highlighter/languages/css.ts +104 -0
  152. package/src/libs/highlighter/languages/diff.ts +154 -0
  153. package/src/libs/highlighter/languages/dtd.ts +99 -0
  154. package/src/libs/highlighter/languages/html.ts +59 -0
  155. package/src/libs/highlighter/languages/java.ts +251 -0
  156. package/src/libs/highlighter/languages/javascript.ts +213 -0
  157. package/src/libs/highlighter/languages/php.ts +433 -0
  158. package/src/libs/highlighter/languages/python.ts +308 -0
  159. package/src/libs/highlighter/languages/ruby.ts +360 -0
  160. package/src/libs/highlighter/languages/sql.ts +125 -0
  161. package/src/libs/highlighter/languages/xml.ts +68 -0
  162. package/src/libs/highlighter/types.ts +44 -0
  163. package/src/render/collected-styles.ts +22 -0
  164. package/src/render/dispatch.ts +181 -0
  165. package/src/render/index.ts +28 -0
  166. package/src/render/primitives.ts +17 -0
  167. package/src/render/style-tag.ts +6 -0
  168. package/src/render/style.ts +15 -0
  169. package/src/types.ts +144 -0
package/dist/index.d.cts CHANGED
@@ -1,21 +1,19 @@
1
1
  import { SyntaxTree as SyntaxTree2 } from "@wdprlib/ast";
2
- import { Element, WikitextSettings } from "@wdprlib/ast";
2
+ import { Element as Element2, WikitextSettings as WikitextSettings2 } from "@wdprlib/ast";
3
3
  /**
4
- * Allowlist entry for embed content validation
5
- * Each entry specifies a host pattern and optional path prefix
4
+ * Allowlist entry for embed content validation.
6
5
  */
7
6
  interface EmbedAllowlistEntry {
8
- /** Host pattern. Supports wildcard prefix '*.' (e.g., '*.youtube.com') */
7
+ /** Host pattern. Supports wildcard prefix `*.` such as `*.youtube.com`. */
9
8
  host: string;
10
- /** Optional path prefix that must match (e.g., '/embed/') */
9
+ /** Optional path prefix that must match, such as `/embed/`. */
11
10
  pathPrefix?: string;
12
11
  }
13
12
  /**
14
- * Default allowlist for embed content (ported from Wikidot's default.php)
15
- * Only iframes with src matching these host+path patterns will be rendered.
13
+ * Default allowlist for embed content.
16
14
  *
17
- * Note: Set to null to allow any HTTPS iframe (Wikidot's 'anyiframe' behavior).
18
- * sanitize-html still enforces HTTPS-only and blocks dangerous attributes.
15
+ * Set the render option to `null` to allow any HTTP(S) iframe while still using
16
+ * sanitizer and scheme validation.
19
17
  */
20
18
  declare const DEFAULT_EMBED_ALLOWLIST: EmbedAllowlistEntry[] | null;
21
19
  /**
@@ -30,10 +28,14 @@ declare const DEFAULT_EMBED_ALLOWLIST: EmbedAllowlistEntry[] | null;
30
28
  interface PageContext {
31
29
  /** Full page name including category prefix (e.g. `"secret:test2"`) */
32
30
  pageName: string;
33
- /** Site slug used to build inter-site URLs (e.g. `"scp-wiki"`) */
31
+ /** Site slug for the current page (e.g. `"scp-wiki"`) */
34
32
  site?: string;
35
- /** Site domain used for absolute URL generation (e.g. `"scp-wiki.wikidot.com"`) */
33
+ /** Current site domain used for absolute URL generation (e.g. `"scp-wiki.example.org"`) */
36
34
  domain?: string;
35
+ /** Known domains for cross-site page references keyed by site slug. */
36
+ siteDomains?: Record<string, string>;
37
+ /** Resolve a cross-site page reference site slug to a domain. */
38
+ resolveSiteDomain?: (site: string) => string | null | undefined;
37
39
  /**
38
40
  * Returns whether a page exists on the site.
39
41
  * When a target page does not exist, the renderer adds `class="newpage"`
@@ -116,7 +118,7 @@ interface RenderOptions {
116
118
  * Context-dependent feature flags.
117
119
  * Defaults to page-mode settings when omitted.
118
120
  */
119
- settings?: WikitextSettings;
121
+ settings?: WikitextSettings2;
120
122
  /** Page context for resolving relative links, local file paths, etc. */
121
123
  page?: PageContext;
122
124
  /**
@@ -124,7 +126,7 @@ interface RenderOptions {
124
126
  * Passed through so the renderer can emit footnote bodies in the
125
127
  * `[[footnoteblock]]` section.
126
128
  */
127
- footnotes?: Element[][];
129
+ footnotes?: Element2[][];
128
130
  /** Callbacks for resolving users, HTML-block URLs, etc. */
129
131
  resolvers?: RenderResolvers;
130
132
  /**
package/dist/index.d.ts CHANGED
@@ -1,21 +1,19 @@
1
1
  import { SyntaxTree as SyntaxTree2 } from "@wdprlib/ast";
2
- import { Element, WikitextSettings } from "@wdprlib/ast";
2
+ import { Element as Element2, WikitextSettings as WikitextSettings2 } from "@wdprlib/ast";
3
3
  /**
4
- * Allowlist entry for embed content validation
5
- * Each entry specifies a host pattern and optional path prefix
4
+ * Allowlist entry for embed content validation.
6
5
  */
7
6
  interface EmbedAllowlistEntry {
8
- /** Host pattern. Supports wildcard prefix '*.' (e.g., '*.youtube.com') */
7
+ /** Host pattern. Supports wildcard prefix `*.` such as `*.youtube.com`. */
9
8
  host: string;
10
- /** Optional path prefix that must match (e.g., '/embed/') */
9
+ /** Optional path prefix that must match, such as `/embed/`. */
11
10
  pathPrefix?: string;
12
11
  }
13
12
  /**
14
- * Default allowlist for embed content (ported from Wikidot's default.php)
15
- * Only iframes with src matching these host+path patterns will be rendered.
13
+ * Default allowlist for embed content.
16
14
  *
17
- * Note: Set to null to allow any HTTPS iframe (Wikidot's 'anyiframe' behavior).
18
- * sanitize-html still enforces HTTPS-only and blocks dangerous attributes.
15
+ * Set the render option to `null` to allow any HTTP(S) iframe while still using
16
+ * sanitizer and scheme validation.
19
17
  */
20
18
  declare const DEFAULT_EMBED_ALLOWLIST: EmbedAllowlistEntry[] | null;
21
19
  /**
@@ -30,10 +28,14 @@ declare const DEFAULT_EMBED_ALLOWLIST: EmbedAllowlistEntry[] | null;
30
28
  interface PageContext {
31
29
  /** Full page name including category prefix (e.g. `"secret:test2"`) */
32
30
  pageName: string;
33
- /** Site slug used to build inter-site URLs (e.g. `"scp-wiki"`) */
31
+ /** Site slug for the current page (e.g. `"scp-wiki"`) */
34
32
  site?: string;
35
- /** Site domain used for absolute URL generation (e.g. `"scp-wiki.wikidot.com"`) */
33
+ /** Current site domain used for absolute URL generation (e.g. `"scp-wiki.example.org"`) */
36
34
  domain?: string;
35
+ /** Known domains for cross-site page references keyed by site slug. */
36
+ siteDomains?: Record<string, string>;
37
+ /** Resolve a cross-site page reference site slug to a domain. */
38
+ resolveSiteDomain?: (site: string) => string | null | undefined;
37
39
  /**
38
40
  * Returns whether a page exists on the site.
39
41
  * When a target page does not exist, the renderer adds `class="newpage"`
@@ -116,7 +118,7 @@ interface RenderOptions {
116
118
  * Context-dependent feature flags.
117
119
  * Defaults to page-mode settings when omitted.
118
120
  */
119
- settings?: WikitextSettings;
121
+ settings?: WikitextSettings2;
120
122
  /** Page context for resolving relative links, local file paths, etc. */
121
123
  page?: PageContext;
122
124
  /**
@@ -124,7 +126,7 @@ interface RenderOptions {
124
126
  * Passed through so the renderer can emit footnote bodies in the
125
127
  * `[[footnoteblock]]` section.
126
128
  */
127
- footnotes?: Element[][];
129
+ footnotes?: Element2[][];
128
130
  /** Callbacks for resolving users, HTML-block URLs, etc. */
129
131
  resolvers?: RenderResolvers;
130
132
  /**