@mnaoumov/typescript-dev-toolkit 1.3.1 → 2.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 (172) hide show
  1. package/assets/docs-site/components/ConstructorBlock.astro +16 -0
  2. package/assets/docs-site/components/ImportStatement.astro +12 -0
  3. package/assets/docs-site/components/MemberDetail.astro +101 -0
  4. package/assets/docs-site/components/MethodTable.astro +45 -0
  5. package/assets/docs-site/components/PropertyTable.astro +45 -0
  6. package/assets/docs-site/components/SiteTitle.astro +43 -0
  7. package/assets/docs-site/components/TypeSignature.astro +20 -0
  8. package/assets/docs-site/fonts/inter-latin-400-normal.ttf +0 -0
  9. package/assets/docs-site/fonts/inter-latin-700-normal.ttf +0 -0
  10. package/assets/docs-site/styles/global.css +221 -0
  11. package/dist/lib/cjs/build.cjs +1 -1
  12. package/dist/lib/cjs/build.d.cts +1 -1
  13. package/dist/lib/cjs/commitlint-forbidden-patterns.cjs +2 -2
  14. package/dist/lib/cjs/commitlint-forbidden-patterns.d.cts +1 -1
  15. package/dist/lib/cjs/commitlint-spellcheck-header.cjs +2 -2
  16. package/dist/lib/cjs/commitlint-spellcheck-header.d.cts +1 -1
  17. package/dist/lib/cjs/docs-site/api-doc-constants.cjs +171 -0
  18. package/dist/lib/cjs/docs-site/api-doc-constants.d.cts +18 -0
  19. package/dist/lib/cjs/docs-site/api-doc-jsdoc.cjs +414 -0
  20. package/dist/lib/cjs/docs-site/api-doc-jsdoc.d.cts +149 -0
  21. package/dist/lib/cjs/docs-site/api-doc-link-rendering.cjs +377 -0
  22. package/dist/lib/cjs/docs-site/api-doc-link-rendering.d.cts +185 -0
  23. package/dist/lib/cjs/docs-site/api-doc-package-sites.cjs +118 -0
  24. package/dist/lib/cjs/docs-site/api-doc-package-sites.d.cts +36 -0
  25. package/dist/lib/cjs/docs-site/api-doc-page-generation.cjs +561 -0
  26. package/dist/lib/cjs/docs-site/api-doc-page-generation.d.cts +159 -0
  27. package/dist/lib/cjs/docs-site/api-doc-route-segments.cjs +42 -0
  28. package/dist/lib/cjs/docs-site/api-doc-route-segments.d.cts +25 -0
  29. package/dist/lib/cjs/docs-site/api-doc-settings.cjs +47 -0
  30. package/dist/lib/cjs/docs-site/api-doc-settings.d.cts +53 -0
  31. package/dist/lib/cjs/docs-site/api-doc-source-processing.cjs +288 -0
  32. package/dist/lib/cjs/docs-site/api-doc-source-processing.d.cts +75 -0
  33. package/dist/lib/cjs/docs-site/api-doc-text-utils.cjs +281 -0
  34. package/dist/lib/cjs/docs-site/api-doc-text-utils.d.cts +178 -0
  35. package/dist/lib/cjs/docs-site/api-doc-type-merging.cjs +157 -0
  36. package/dist/lib/cjs/docs-site/api-doc-type-merging.d.cts +51 -0
  37. package/dist/lib/cjs/docs-site/api-doc-types.cjs +22 -0
  38. package/dist/lib/cjs/docs-site/api-doc-types.d.cts +157 -0
  39. package/dist/lib/cjs/docs-site/api-docs.cjs +143 -0
  40. package/dist/lib/cjs/docs-site/api-docs.d.cts +34 -0
  41. package/dist/lib/cjs/docs-site/astro-config.cjs +169 -0
  42. package/dist/lib/cjs/docs-site/astro-config.d.cts +23 -0
  43. package/dist/lib/cjs/docs-site/docs-links.cjs +123 -0
  44. package/dist/lib/cjs/docs-site/docs-links.d.cts +32 -0
  45. package/dist/lib/cjs/docs-site/docs-site-assets.cjs +64 -0
  46. package/dist/lib/cjs/docs-site/docs-site-assets.d.cts +23 -0
  47. package/dist/lib/cjs/docs-site/docs-site-commands.cjs +72 -0
  48. package/dist/lib/cjs/docs-site/docs-site-commands.d.cts +29 -0
  49. package/dist/lib/cjs/docs-site/docs-site-config.cjs +122 -0
  50. package/dist/lib/cjs/docs-site/docs-site-config.d.cts +162 -0
  51. package/dist/lib/cjs/docs-site/index.cjs +116 -0
  52. package/dist/lib/cjs/docs-site/index.d.cts +26 -0
  53. package/dist/lib/cjs/docs-site/link-check.cjs +197 -0
  54. package/dist/lib/cjs/docs-site/link-check.d.cts +163 -0
  55. package/dist/lib/cjs/docs-site/og-image-page.cjs +45 -0
  56. package/dist/lib/cjs/docs-site/og-image-page.d.cts +15 -0
  57. package/dist/lib/cjs/docs-site/og-image.cjs +326 -0
  58. package/dist/lib/cjs/docs-site/og-image.d.cts +70 -0
  59. package/dist/lib/cjs/docs-site/og-images.cjs +170 -0
  60. package/dist/lib/cjs/docs-site/og-images.d.cts +41 -0
  61. package/dist/lib/cjs/docs-site/route-data.cjs +47 -0
  62. package/dist/lib/cjs/docs-site/route-data.d.cts +14 -0
  63. package/dist/lib/cjs/docs-site/satteri-github-alerts.cjs +97 -0
  64. package/dist/lib/cjs/docs-site/satteri-github-alerts.d.cts +31 -0
  65. package/dist/lib/cjs/docs-site/satteri-relative-links.cjs +87 -0
  66. package/dist/lib/cjs/docs-site/satteri-relative-links.d.cts +29 -0
  67. package/dist/lib/cjs/docs-site/unrendered-alerts.cjs +51 -0
  68. package/dist/lib/cjs/docs-site/unrendered-alerts.d.cts +38 -0
  69. package/dist/lib/cjs/index.cjs +4 -1
  70. package/dist/lib/cjs/index.d.cts +1 -0
  71. package/dist/lib/cjs/library-build.cjs +1 -1
  72. package/dist/lib/cjs/library-build.d.cts +2 -2
  73. package/dist/lib/cjs/linters/eslint-config.cjs +17 -17
  74. package/dist/lib/cjs/linters/eslint-config.d.cts +1 -7
  75. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +2 -2
  76. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.d.cts +5 -8
  77. package/dist/lib/cjs/package-manager.cjs +2 -2
  78. package/dist/lib/esm/build.d.mts +1 -1
  79. package/dist/lib/esm/build.mjs +1 -1
  80. package/dist/lib/esm/commitlint-forbidden-patterns.d.mts +1 -1
  81. package/dist/lib/esm/commitlint-forbidden-patterns.mjs +2 -2
  82. package/dist/lib/esm/commitlint-spellcheck-header.d.mts +1 -1
  83. package/dist/lib/esm/commitlint-spellcheck-header.mjs +2 -2
  84. package/dist/lib/esm/docs-site/api-doc-constants.d.mts +18 -0
  85. package/dist/lib/esm/docs-site/api-doc-constants.mjs +143 -0
  86. package/dist/lib/esm/docs-site/api-doc-jsdoc.d.mts +149 -0
  87. package/dist/lib/esm/docs-site/api-doc-jsdoc.mjs +377 -0
  88. package/dist/lib/esm/docs-site/api-doc-link-rendering.d.mts +185 -0
  89. package/dist/lib/esm/docs-site/api-doc-link-rendering.mjs +356 -0
  90. package/dist/lib/esm/docs-site/api-doc-package-sites.d.mts +36 -0
  91. package/dist/lib/esm/docs-site/api-doc-package-sites.mjs +91 -0
  92. package/dist/lib/esm/docs-site/api-doc-page-generation.d.mts +159 -0
  93. package/dist/lib/esm/docs-site/api-doc-page-generation.mjs +548 -0
  94. package/dist/lib/esm/docs-site/api-doc-route-segments.d.mts +25 -0
  95. package/dist/lib/esm/docs-site/api-doc-route-segments.mjs +17 -0
  96. package/dist/lib/esm/docs-site/api-doc-settings.d.mts +53 -0
  97. package/dist/lib/esm/docs-site/api-doc-settings.mjs +22 -0
  98. package/dist/lib/esm/docs-site/api-doc-source-processing.d.mts +75 -0
  99. package/dist/lib/esm/docs-site/api-doc-source-processing.mjs +274 -0
  100. package/dist/lib/esm/docs-site/api-doc-text-utils.d.mts +178 -0
  101. package/dist/lib/esm/docs-site/api-doc-text-utils.mjs +239 -0
  102. package/dist/lib/esm/docs-site/api-doc-type-merging.d.mts +51 -0
  103. package/dist/lib/esm/docs-site/api-doc-type-merging.mjs +129 -0
  104. package/dist/lib/esm/docs-site/api-doc-types.d.mts +157 -0
  105. package/dist/lib/esm/docs-site/api-doc-types.mjs +6 -0
  106. package/dist/lib/esm/docs-site/api-docs.d.mts +34 -0
  107. package/dist/lib/esm/docs-site/api-docs.mjs +139 -0
  108. package/dist/lib/esm/docs-site/astro-config.d.mts +23 -0
  109. package/dist/lib/esm/docs-site/astro-config.mjs +135 -0
  110. package/dist/lib/esm/docs-site/docs-links.d.mts +32 -0
  111. package/dist/lib/esm/docs-site/docs-links.mjs +113 -0
  112. package/dist/lib/esm/docs-site/docs-site-assets.d.mts +23 -0
  113. package/dist/lib/esm/docs-site/docs-site-assets.mjs +32 -0
  114. package/dist/lib/esm/docs-site/docs-site-commands.d.mts +29 -0
  115. package/dist/lib/esm/docs-site/docs-site-commands.mjs +46 -0
  116. package/dist/lib/esm/docs-site/docs-site-config.d.mts +162 -0
  117. package/dist/lib/esm/docs-site/docs-site-config.mjs +98 -0
  118. package/dist/lib/esm/docs-site/index.d.mts +26 -0
  119. package/dist/lib/esm/docs-site/index.mjs +58 -0
  120. package/dist/lib/esm/docs-site/link-check.d.mts +163 -0
  121. package/dist/lib/esm/docs-site/link-check.mjs +166 -0
  122. package/dist/lib/esm/docs-site/og-image-page.d.mts +15 -0
  123. package/dist/lib/esm/docs-site/og-image-page.mjs +21 -0
  124. package/dist/lib/esm/docs-site/og-image.d.mts +70 -0
  125. package/dist/lib/esm/docs-site/og-image.mjs +292 -0
  126. package/dist/lib/esm/docs-site/og-images.d.mts +41 -0
  127. package/dist/lib/esm/docs-site/og-images.mjs +156 -0
  128. package/dist/lib/esm/docs-site/route-data.d.mts +14 -0
  129. package/dist/lib/esm/docs-site/route-data.mjs +23 -0
  130. package/dist/lib/esm/docs-site/satteri-github-alerts.d.mts +31 -0
  131. package/dist/lib/esm/docs-site/satteri-github-alerts.mjs +72 -0
  132. package/dist/lib/esm/docs-site/satteri-relative-links.d.mts +29 -0
  133. package/dist/lib/esm/docs-site/satteri-relative-links.mjs +63 -0
  134. package/dist/lib/esm/docs-site/unrendered-alerts.d.mts +38 -0
  135. package/dist/lib/esm/docs-site/unrendered-alerts.mjs +26 -0
  136. package/dist/lib/esm/index.d.mts +1 -0
  137. package/dist/lib/esm/index.mjs +3 -1
  138. package/dist/lib/esm/library-build.d.mts +2 -2
  139. package/dist/lib/esm/library-build.mjs +1 -1
  140. package/dist/lib/esm/linters/eslint-config.d.mts +1 -7
  141. package/dist/lib/esm/linters/eslint-config.mjs +17 -17
  142. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.d.mts +5 -8
  143. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +2 -2
  144. package/dist/lib/esm/package-manager.mjs +2 -2
  145. package/docs-site/api-doc-constants/package.json +6 -0
  146. package/docs-site/api-doc-jsdoc/package.json +6 -0
  147. package/docs-site/api-doc-link-rendering/package.json +6 -0
  148. package/docs-site/api-doc-package-sites/package.json +6 -0
  149. package/docs-site/api-doc-page-generation/package.json +6 -0
  150. package/docs-site/api-doc-route-segments/package.json +6 -0
  151. package/docs-site/api-doc-settings/package.json +6 -0
  152. package/docs-site/api-doc-source-processing/package.json +6 -0
  153. package/docs-site/api-doc-text-utils/package.json +6 -0
  154. package/docs-site/api-doc-type-merging/package.json +6 -0
  155. package/docs-site/api-doc-types/package.json +6 -0
  156. package/docs-site/api-docs/package.json +6 -0
  157. package/docs-site/astro-config/package.json +6 -0
  158. package/docs-site/docs-links/package.json +6 -0
  159. package/docs-site/docs-site-assets/package.json +6 -0
  160. package/docs-site/docs-site-commands/package.json +6 -0
  161. package/docs-site/docs-site-config/package.json +6 -0
  162. package/docs-site/index/package.json +6 -0
  163. package/docs-site/link-check/package.json +6 -0
  164. package/docs-site/og-image/package.json +6 -0
  165. package/docs-site/og-image-page/package.json +6 -0
  166. package/docs-site/og-images/package.json +6 -0
  167. package/docs-site/package.json +6 -0
  168. package/docs-site/route-data/package.json +6 -0
  169. package/docs-site/satteri-github-alerts/package.json +6 -0
  170. package/docs-site/satteri-relative-links/package.json +6 -0
  171. package/docs-site/unrendered-alerts/package.json +6 -0
  172. package/package.json +74 -4
@@ -0,0 +1,292 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return '/';
11
+ },
12
+ env: {},
13
+ platform: 'android'
14
+ };
15
+
16
+ const existingProcess = globalThis.process;
17
+
18
+ if (!existingProcess) {
19
+ globalThis.process = browserProcess;
20
+ return;
21
+ }
22
+
23
+ if (existingProcess.versions?.node) {
24
+ return;
25
+ }
26
+
27
+ const existingProcessRecord = existingProcess;
28
+
29
+ for (const [key, value] of Object.entries(browserProcess)) {
30
+ existingProcessRecord[key] ??= value;
31
+ }
32
+
33
+ existingProcessRecord['browser'] = true;
34
+ }
35
+
36
+ ensureBrowserProcess();
37
+ })();
38
+
39
+ import { Resvg } from "@resvg/resvg-js";
40
+ import { createHash } from "node:crypto";
41
+ import { existsSync } from "node:fs";
42
+ import {
43
+ readdir,
44
+ readFile
45
+ } from "node:fs/promises";
46
+ import satori from "satori";
47
+ const OG_WIDTH = 1200;
48
+ const OG_HEIGHT = 630;
49
+ const BACKGROUND_COLOR = "#111213";
50
+ const ACCENT_COLOR = "#8b6ff5";
51
+ const ACCENT_BG = "rgba(103, 172, 172, 0.18)";
52
+ const TITLE_COLOR = "#ffffff";
53
+ const DESCRIPTION_COLOR = "#9CA3AF";
54
+ const BRAND_COLOR = "#8b6ff5";
55
+ const BORDER_WIDTH = 8;
56
+ const PADDING_X = 80;
57
+ const PADDING_TOP = 70;
58
+ const PADDING_BOTTOM = 60;
59
+ const TITLE_FONT_SIZE = 56;
60
+ const DESCRIPTION_FONT_SIZE = 26;
61
+ const BADGE_FONT_SIZE = 18;
62
+ const BADGE_FONT_WEIGHT = 600;
63
+ const BRAND_FONT_SIZE = 28;
64
+ const FONT_WEIGHT_REGULAR = 400;
65
+ const FONT_WEIGHT_BOLD = 700;
66
+ const TITLE_LINE_HEIGHT = 1.2;
67
+ const DESCRIPTION_LINE_HEIGHT = 1.5;
68
+ const SIGNATURE_FONT_SIZE = 24;
69
+ const SIGNATURE_LINE_HEIGHT = 1.4;
70
+ const SIGNATURE_BG = "rgba(0, 0, 0, 0.35)";
71
+ const SIGNATURE_MAX_LINES = 2;
72
+ const LOGO_DISPLAY_SIZE = 76;
73
+ const LOGO_RASTER_SIZE = 152;
74
+ function computeOgHash(params) {
75
+ const input = JSON.stringify({
76
+ badge: params.badge ?? "",
77
+ description: params.description ?? "",
78
+ signature: params.signature ?? "",
79
+ title: params.title
80
+ });
81
+ const HASH_LENGTH = 16;
82
+ return createHash("sha256").update(input).digest("hex").slice(0, HASH_LENGTH);
83
+ }
84
+ async function loadFonts(fontsDirectory) {
85
+ const regularPath = `${fontsDirectory}/inter-latin-400-normal.ttf`;
86
+ const boldPath = `${fontsDirectory}/inter-latin-700-normal.ttf`;
87
+ if (existsSync(regularPath) && existsSync(boldPath)) {
88
+ const [regularData, boldData] = await Promise.all([
89
+ readFile(regularPath),
90
+ readFile(boldPath)
91
+ ]);
92
+ return [
93
+ { data: regularData, name: "Inter", style: "normal", weight: FONT_WEIGHT_REGULAR },
94
+ { data: boldData, name: "Inter", style: "normal", weight: FONT_WEIGHT_BOLD }
95
+ ];
96
+ }
97
+ if (existsSync(fontsDirectory)) {
98
+ const entries = await readdir(fontsDirectory);
99
+ const fontFile = entries.find((name) => name.endsWith(".ttf") || name.endsWith(".otf"));
100
+ if (fontFile) {
101
+ const data = await readFile(`${fontsDirectory}/${fontFile}`);
102
+ return [
103
+ { data, name: "Inter", style: "normal", weight: FONT_WEIGHT_REGULAR },
104
+ { data, name: "Inter", style: "normal", weight: FONT_WEIGHT_BOLD }
105
+ ];
106
+ }
107
+ }
108
+ return null;
109
+ }
110
+ async function loadLogoDataUri(faviconPath) {
111
+ if (!existsSync(faviconPath)) {
112
+ return null;
113
+ }
114
+ const svg = await readFile(faviconPath, "utf-8");
115
+ const resvg = new Resvg(svg, { fitTo: { mode: "width", value: LOGO_RASTER_SIZE } });
116
+ const png = resvg.render().asPng();
117
+ return `data:image/png;base64,${png.toString("base64")}`;
118
+ }
119
+ async function renderOgImage(params, options) {
120
+ const markup = buildOgImageMarkup(params, options);
121
+ const svg = await satori(markup, {
122
+ fonts: options.fonts,
123
+ height: OG_HEIGHT,
124
+ width: OG_WIDTH
125
+ });
126
+ const resvg = new Resvg(svg, {
127
+ fitTo: { mode: "width", value: OG_WIDTH }
128
+ });
129
+ return resvg.render().asPng();
130
+ }
131
+ function buildBadgeMarkup(badge) {
132
+ return {
133
+ props: {
134
+ children: badge,
135
+ style: {
136
+ alignItems: "center",
137
+ background: ACCENT_BG,
138
+ borderRadius: "20px",
139
+ color: ACCENT_COLOR,
140
+ display: "flex",
141
+ fontSize: `${String(BADGE_FONT_SIZE)}px`,
142
+ fontWeight: BADGE_FONT_WEIGHT,
143
+ padding: "6px 14px"
144
+ }
145
+ },
146
+ type: "div"
147
+ };
148
+ }
149
+ function buildLogoMarkup(logoDataUri) {
150
+ return {
151
+ props: {
152
+ height: LOGO_DISPLAY_SIZE,
153
+ src: logoDataUri,
154
+ style: {
155
+ height: `${String(LOGO_DISPLAY_SIZE)}px`,
156
+ width: `${String(LOGO_DISPLAY_SIZE)}px`
157
+ },
158
+ width: LOGO_DISPLAY_SIZE
159
+ },
160
+ type: "img"
161
+ };
162
+ }
163
+ function buildOgImageMarkup(params, options) {
164
+ const badgeNode = params.badge ? buildBadgeMarkup(params.badge) : null;
165
+ const logoNode = options.logoDataUri ? buildLogoMarkup(options.logoDataUri) : null;
166
+ const topRowChildren = [
167
+ ...logoNode ? [logoNode] : [],
168
+ { props: { style: { flex: 1 } }, type: "div" },
169
+ ...badgeNode ? [badgeNode] : []
170
+ ];
171
+ const topRow = {
172
+ props: {
173
+ children: topRowChildren,
174
+ style: {
175
+ alignItems: "center",
176
+ display: "flex",
177
+ marginBottom: "24px"
178
+ }
179
+ },
180
+ type: "div"
181
+ };
182
+ const title = {
183
+ props: {
184
+ children: params.title,
185
+ style: {
186
+ color: TITLE_COLOR,
187
+ fontSize: `${String(TITLE_FONT_SIZE)}px`,
188
+ fontWeight: FONT_WEIGHT_BOLD,
189
+ lineHeight: TITLE_LINE_HEIGHT,
190
+ marginBottom: "20px",
191
+ overflow: "hidden",
192
+ textOverflow: "ellipsis"
193
+ }
194
+ },
195
+ type: "div"
196
+ };
197
+ const signatureNode = params.signature ? buildSignatureMarkup(params.signature) : null;
198
+ const description = {
199
+ props: {
200
+ children: params.description ?? "",
201
+ style: {
202
+ color: DESCRIPTION_COLOR,
203
+ flex: 1,
204
+ fontSize: `${String(DESCRIPTION_FONT_SIZE)}px`,
205
+ lineHeight: DESCRIPTION_LINE_HEIGHT,
206
+ overflow: "hidden",
207
+ textOverflow: "ellipsis"
208
+ }
209
+ },
210
+ type: "div"
211
+ };
212
+ const footer = {
213
+ props: {
214
+ children: [
215
+ { props: { style: { flex: 1 } }, type: "div" },
216
+ {
217
+ props: {
218
+ children: options.brandText,
219
+ style: {
220
+ color: BRAND_COLOR,
221
+ fontSize: `${String(BRAND_FONT_SIZE)}px`,
222
+ fontWeight: FONT_WEIGHT_BOLD
223
+ }
224
+ },
225
+ type: "div"
226
+ }
227
+ ],
228
+ style: {
229
+ alignItems: "flex-end",
230
+ display: "flex"
231
+ }
232
+ },
233
+ type: "div"
234
+ };
235
+ return {
236
+ props: {
237
+ children: [
238
+ {
239
+ props: {
240
+ children: signatureNode ? [topRow, title, signatureNode, description] : [topRow, title, description],
241
+ style: {
242
+ display: "flex",
243
+ flex: 1,
244
+ flexDirection: "column"
245
+ }
246
+ },
247
+ type: "div"
248
+ },
249
+ footer
250
+ ],
251
+ style: {
252
+ background: BACKGROUND_COLOR,
253
+ borderLeft: `${String(BORDER_WIDTH)}px solid ${ACCENT_COLOR}`,
254
+ display: "flex",
255
+ flexDirection: "column",
256
+ height: "100%",
257
+ justifyContent: "space-between",
258
+ padding: `${String(PADDING_TOP)}px ${String(PADDING_X)}px ${String(PADDING_BOTTOM)}px ${String(PADDING_X)}px`,
259
+ width: "100%"
260
+ }
261
+ },
262
+ type: "div"
263
+ };
264
+ }
265
+ function buildSignatureMarkup(signature) {
266
+ return {
267
+ props: {
268
+ children: signature,
269
+ style: {
270
+ background: SIGNATURE_BG,
271
+ borderRadius: "12px",
272
+ color: ACCENT_COLOR,
273
+ display: "-webkit-box",
274
+ fontFamily: "monospace",
275
+ fontSize: `${String(SIGNATURE_FONT_SIZE)}px`,
276
+ lineClamp: SIGNATURE_MAX_LINES,
277
+ lineHeight: SIGNATURE_LINE_HEIGHT,
278
+ marginBottom: "28px",
279
+ overflow: "hidden",
280
+ padding: "16px 24px"
281
+ }
282
+ },
283
+ type: "div"
284
+ };
285
+ }
286
+ export {
287
+ computeOgHash,
288
+ loadFonts,
289
+ loadLogoDataUri,
290
+ renderOgImage
291
+ };
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvb2ctaW1hZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlbmRlcnMgYSBwYWdlJ3MgT3BlbiBHcmFwaCBjYXJkOiBzYXRvcmkgbGF5cyBpdCBvdXQgYXMgU1ZHLCByZXN2ZyByYXN0ZXJpemVzIGl0IHRvIFBORy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZvbnQgfSBmcm9tICdzYXRvcmknO1xuXG5pbXBvcnQgeyBSZXN2ZyB9IGZyb20gJ0ByZXN2Zy9yZXN2Zy1qcyc7XG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgcmVhZGRpcixcbiAgcmVhZEZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgc2F0b3JpIGZyb20gJ3NhdG9yaSc7XG5cbmNvbnN0IE9HX1dJRFRIID0gMTIwMDtcbmNvbnN0IE9HX0hFSUdIVCA9IDYzMDtcbmNvbnN0IEJBQ0tHUk9VTkRfQ09MT1IgPSAnIzExMTIxMyc7XG4vLyBUaGUgdmlvbGV0IGFjY2VudCwgbWF0Y2hpbmcgdGhlIGRvY3MgdGhlbWUgKGAtLXNsLWNvbG9yLWFjY2VudGApLlxuY29uc3QgQUNDRU5UX0NPTE9SID0gJyM4YjZmZjUnO1xuY29uc3QgQUNDRU5UX0JHID0gJ3JnYmEoMTAzLCAxNzIsIDE3MiwgMC4xOCknO1xuY29uc3QgVElUTEVfQ09MT1IgPSAnI2ZmZmZmZic7XG5jb25zdCBERVNDUklQVElPTl9DT0xPUiA9ICcjOUNBM0FGJztcbmNvbnN0IEJSQU5EX0NPTE9SID0gJyM4YjZmZjUnO1xuY29uc3QgQk9SREVSX1dJRFRIID0gODtcbmNvbnN0IFBBRERJTkdfWCA9IDgwO1xuY29uc3QgUEFERElOR19UT1AgPSA3MDtcbmNvbnN0IFBBRERJTkdfQk9UVE9NID0gNjA7XG5jb25zdCBUSVRMRV9GT05UX1NJWkUgPSA1NjtcbmNvbnN0IERFU0NSSVBUSU9OX0ZPTlRfU0laRSA9IDI2O1xuY29uc3QgQkFER0VfRk9OVF9TSVpFID0gMTg7XG5jb25zdCBCQURHRV9GT05UX1dFSUdIVCA9IDYwMDtcbmNvbnN0IEJSQU5EX0ZPTlRfU0laRSA9IDI4O1xuY29uc3QgRk9OVF9XRUlHSFRfUkVHVUxBUiA9IDQwMDtcbmNvbnN0IEZPTlRfV0VJR0hUX0JPTEQgPSA3MDA7XG5jb25zdCBUSVRMRV9MSU5FX0hFSUdIVCA9IDEuMjtcbmNvbnN0IERFU0NSSVBUSU9OX0xJTkVfSEVJR0hUID0gMS41O1xuLy8gU2lnbmF0dXJlIGNvZGUgYmxvY2sgKHZpb2xldCBhY2NlbnQgb24gYSBzdWJ0bGUgZGFya2VyIHJvdW5kZWQgcGFuZWwpLlxuY29uc3QgU0lHTkFUVVJFX0ZPTlRfU0laRSA9IDI0O1xuY29uc3QgU0lHTkFUVVJFX0xJTkVfSEVJR0hUID0gMS40O1xuY29uc3QgU0lHTkFUVVJFX0JHID0gJ3JnYmEoMCwgMCwgMCwgMC4zNSknO1xuY29uc3QgU0lHTkFUVVJFX01BWF9MSU5FUyA9IDI7XG4vLyBTaXRlIGxvZ28gKGZhdmljb24pLCByYXN0ZXJpemVkIG9uY2UgYW5kIGVtYmVkZGVkIGFzIGEgZGF0YSBVUkkuXG5jb25zdCBMT0dPX0RJU1BMQVlfU0laRSA9IDc2O1xuY29uc3QgTE9HT19SQVNURVJfU0laRSA9IDE1MjtcblxuLyoqXG4gKiBXaGF0IG9uZSBPcGVuIEdyYXBoIGNhcmQgc2hvd3M6IGEgdGl0bGUsIGFuZCBvcHRpb25hbGx5IGEgZGVzY3JpcHRpb24sIGEgY29kZSBzaWduYXR1cmUgYW5kIGEgYmFkZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2dDYXJkQ29udGVudCB7XG4gIHJlYWRvbmx5IGJhZGdlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgc2lnbmF0dXJlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSB0aXRsZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBwZXItc2l0ZSBwYXJ0IG9mIGV2ZXJ5IGNhcmQ6IHRoZSBmb250cywgdGhlIGxvZ28gYW5kIHRoZSBicmFuZCB0ZXh0IGluIHRoZSBmb290ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyT2dJbWFnZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHRleHQgdGhlIGZvb3RlciBjYXJyaWVzLCBub3JtYWxseSB0aGUgcGFja2FnZSdzIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBicmFuZFRleHQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZvbnRzIHNhdG9yaSByZW5kZXJzIHRoZSB0ZXh0IHdpdGguXG4gICAqL1xuICByZWFkb25seSBmb250czogRm9udFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l0ZSBsb2dvIGFzIGEgUE5HIGRhdGEgVVJJLCBvciBgbnVsbGAgdG8gcmVuZGVyIHRoZSBjYXJkIHdpdGhvdXQgb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nb0RhdGFVcmk6IG51bGwgfCBzdHJpbmc7XG59XG5cbi8qKlxuICogSGFzaGVzIGEgY2FyZCdzIGNvbnRlbnQsIHNvIGFuIHVuY2hhbmdlZCBjYXJkIGlzIG5vdCByZW5kZXJlZCBhZ2Fpbi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNhcmQncyBjb250ZW50LlxuICogQHJldHVybnMgQSAxNi1jaGFyYWN0ZXIgaGV4IGRpZ2VzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVPZ0hhc2gocGFyYW1zOiBPZ0NhcmRDb250ZW50KTogc3RyaW5nIHtcbiAgY29uc3QgaW5wdXQgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgYmFkZ2U6IHBhcmFtcy5iYWRnZSA/PyAnJyxcbiAgICBkZXNjcmlwdGlvbjogcGFyYW1zLmRlc2NyaXB0aW9uID8/ICcnLFxuICAgIHNpZ25hdHVyZTogcGFyYW1zLnNpZ25hdHVyZSA/PyAnJyxcbiAgICB0aXRsZTogcGFyYW1zLnRpdGxlXG4gIH0pO1xuICBjb25zdCBIQVNIX0xFTkdUSCA9IDE2O1xuICByZXR1cm4gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGlucHV0KS5kaWdlc3QoJ2hleCcpLnNsaWNlKDAsIEhBU0hfTEVOR1RIKTtcbn1cblxuLyoqXG4gKiBMb2FkcyB0aGUgZm9udHMgc2F0b3JpIG5lZWRzIHRvIHJlbmRlciB0ZXh0LlxuICpcbiAqIFRoaXMgcGFja2FnZSBzaGlwcyBgaW50ZXItbGF0aW4tNDAwLW5vcm1hbC50dGZgIC8gYGludGVyLWxhdGluLTcwMC1ub3JtYWwudHRmYCB1bmRlclxuICogYGFzc2V0cy9kb2NzLXNpdGUvZm9udHNgOyB0aGlzIGZhbGxzIGJhY2sgdG8gYW55IG90aGVyIGAudHRmYC9gLm90ZmAgaW4gYGZvbnRzRGlyZWN0b3J5YCBhbmRcbiAqIHJldHVybnMgYG51bGxgIHdoZW4gdGhlIGRpcmVjdG9yeSBob2xkcyBub25lLCBzbyB0aGUgY2FsbGVyIGNhbiBza2lwIE9HIGdlbmVyYXRpb24gaW5zdGVhZCBvZlxuICogY3Jhc2hpbmcgdGhlIGJ1aWxkLlxuICpcbiAqIEBwYXJhbSBmb250c0RpcmVjdG9yeSAtIFRoZSBmb2xkZXIgaG9sZGluZyB0aGUgZm9udHMuXG4gKiBAcmV0dXJucyBUaGUgZm9udHMsIG9yIGBudWxsYCB3aGVuIHRoZSBmb2xkZXIgaG9sZHMgbm9uZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRGb250cyhmb250c0RpcmVjdG9yeTogc3RyaW5nKTogUHJvbWlzZTxGb250W10gfCBudWxsPiB7XG4gIGNvbnN0IHJlZ3VsYXJQYXRoID0gYCR7Zm9udHNEaXJlY3Rvcnl9L2ludGVyLWxhdGluLTQwMC1ub3JtYWwudHRmYDtcbiAgY29uc3QgYm9sZFBhdGggPSBgJHtmb250c0RpcmVjdG9yeX0vaW50ZXItbGF0aW4tNzAwLW5vcm1hbC50dGZgO1xuXG4gIGlmIChleGlzdHNTeW5jKHJlZ3VsYXJQYXRoKSAmJiBleGlzdHNTeW5jKGJvbGRQYXRoKSkge1xuICAgIGNvbnN0IFtyZWd1bGFyRGF0YSwgYm9sZERhdGFdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgcmVhZEZpbGUocmVndWxhclBhdGgpLFxuICAgICAgcmVhZEZpbGUoYm9sZFBhdGgpXG4gICAgXSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgZGF0YTogcmVndWxhckRhdGEsIG5hbWU6ICdJbnRlcicsIHN0eWxlOiAnbm9ybWFsJyBhcyBjb25zdCwgd2VpZ2h0OiBGT05UX1dFSUdIVF9SRUdVTEFSIH0sXG4gICAgICB7IGRhdGE6IGJvbGREYXRhLCBuYW1lOiAnSW50ZXInLCBzdHlsZTogJ25vcm1hbCcgYXMgY29uc3QsIHdlaWdodDogRk9OVF9XRUlHSFRfQk9MRCB9XG4gICAgXTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrOiByZXVzZSBhbnkgc2luZ2xlIGZvbnQgZmlsZSBpbiB0aGUgZGlyZWN0b3J5IGZvciBib3RoIHdlaWdodHMuXG4gIGlmIChleGlzdHNTeW5jKGZvbnRzRGlyZWN0b3J5KSkge1xuICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkZGlyKGZvbnRzRGlyZWN0b3J5KTtcbiAgICBjb25zdCBmb250RmlsZSA9IGVudHJpZXMuZmluZCgobmFtZSkgPT4gbmFtZS5lbmRzV2l0aCgnLnR0ZicpIHx8IG5hbWUuZW5kc1dpdGgoJy5vdGYnKSk7XG4gICAgaWYgKGZvbnRGaWxlKSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZEZpbGUoYCR7Zm9udHNEaXJlY3Rvcnl9LyR7Zm9udEZpbGV9YCk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7IGRhdGEsIG5hbWU6ICdJbnRlcicsIHN0eWxlOiAnbm9ybWFsJyBhcyBjb25zdCwgd2VpZ2h0OiBGT05UX1dFSUdIVF9SRUdVTEFSIH0sXG4gICAgICAgIHsgZGF0YSwgbmFtZTogJ0ludGVyJywgc3R5bGU6ICdub3JtYWwnIGFzIGNvbnN0LCB3ZWlnaHQ6IEZPTlRfV0VJR0hUX0JPTEQgfVxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBSYXN0ZXJpemUgYW4gU1ZHIGZhdmljb24gdG8gYSBQTkcgZGF0YSBVUkkgdmlhIHJlc3ZnIGZvciBlbWJlZGRpbmcgaW4gdGhlIHNhdG9yaSBsYXlvdXQgKHNhdG9yaSdzXG4gKiBgPGltZz5gIG5lZWRzIGEgcmFzdGVyL2RhdGEtVVJJIHNvdXJjZSkuIFJldHVybnMgYG51bGxgIHdoZW4gdGhlIGZpbGUgaXMgbWlzc2luZyBzbyB0aGUgY2FsbGVyIGNhblxuICogcmVuZGVyIHRoZSBjYXJkIHdpdGhvdXQgYSBsb2dvLiBDYWxsIHRoaXMgT05DRSBhbmQgcmV1c2UgdGhlIHJlc3VsdCBhY3Jvc3MgYWxsIGNhcmRzLlxuICpcbiAqIEBwYXJhbSBmYXZpY29uUGF0aCAtIFRoZSBTVkcgZmF2aWNvbidzIHBhdGguXG4gKiBAcmV0dXJucyBUaGUgUE5HIGRhdGEgVVJJLCBvciBgbnVsbGAgd2hlbiB0aGUgZmF2aWNvbiBpcyBtaXNzaW5nLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZExvZ29EYXRhVXJpKGZhdmljb25QYXRoOiBzdHJpbmcpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgaWYgKCFleGlzdHNTeW5jKGZhdmljb25QYXRoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHN2ZyA9IGF3YWl0IHJlYWRGaWxlKGZhdmljb25QYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgcmVzdmcgPSBuZXcgUmVzdmcoc3ZnLCB7IGZpdFRvOiB7IG1vZGU6ICd3aWR0aCcsIHZhbHVlOiBMT0dPX1JBU1RFUl9TSVpFIH0gfSk7XG4gIGNvbnN0IHBuZyA9IHJlc3ZnLnJlbmRlcigpLmFzUG5nKCk7XG4gIHJldHVybiBgZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7cG5nLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBwYWdlJ3MgY2FyZCB0byBhIFBORy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNhcmQncyBjb250ZW50LlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgZm9udHMsIGxvZ28gYW5kIGJyYW5kIHRleHQgZXZlcnkgY2FyZCBzaGFyZXMuXG4gKiBAcmV0dXJucyBUaGUgUE5HLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyT2dJbWFnZShwYXJhbXM6IE9nQ2FyZENvbnRlbnQsIG9wdGlvbnM6IFJlbmRlck9nSW1hZ2VPcHRpb25zKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgY29uc3QgbWFya3VwID0gYnVpbGRPZ0ltYWdlTWFya3VwKHBhcmFtcywgb3B0aW9ucyk7XG4gIGNvbnN0IHN2ZyA9IGF3YWl0IHNhdG9yaShtYXJrdXAsIHtcbiAgICBmb250czogb3B0aW9ucy5mb250cyxcbiAgICBoZWlnaHQ6IE9HX0hFSUdIVCxcbiAgICB3aWR0aDogT0dfV0lEVEhcbiAgfSk7XG5cbiAgY29uc3QgcmVzdmcgPSBuZXcgUmVzdmcoc3ZnLCB7XG4gICAgZml0VG86IHsgbW9kZTogJ3dpZHRoJywgdmFsdWU6IE9HX1dJRFRIIH1cbiAgfSk7XG4gIHJldHVybiByZXN2Zy5yZW5kZXIoKS5hc1BuZygpO1xufVxuXG5mdW5jdGlvbiBidWlsZEJhZGdlTWFya3VwKGJhZGdlOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB7XG4gICAgcHJvcHM6IHtcbiAgICAgIGNoaWxkcmVuOiBiYWRnZSxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICBiYWNrZ3JvdW5kOiBBQ0NFTlRfQkcsXG4gICAgICAgIGJvcmRlclJhZGl1czogJzIwcHgnLFxuICAgICAgICBjb2xvcjogQUNDRU5UX0NPTE9SLFxuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIGZvbnRTaXplOiBgJHtTdHJpbmcoQkFER0VfRk9OVF9TSVpFKX1weGAsXG4gICAgICAgIGZvbnRXZWlnaHQ6IEJBREdFX0ZPTlRfV0VJR0hULFxuICAgICAgICBwYWRkaW5nOiAnNnB4IDE0cHgnXG4gICAgICB9XG4gICAgfSxcbiAgICB0eXBlOiAnZGl2J1xuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZExvZ29NYXJrdXAobG9nb0RhdGFVcmk6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHtcbiAgICBwcm9wczoge1xuICAgICAgaGVpZ2h0OiBMT0dPX0RJU1BMQVlfU0laRSxcbiAgICAgIHNyYzogbG9nb0RhdGFVcmksXG4gICAgICBzdHlsZToge1xuICAgICAgICBoZWlnaHQ6IGAke1N0cmluZyhMT0dPX0RJU1BMQVlfU0laRSl9cHhgLFxuICAgICAgICB3aWR0aDogYCR7U3RyaW5nKExPR09fRElTUExBWV9TSVpFKX1weGBcbiAgICAgIH0sXG4gICAgICB3aWR0aDogTE9HT19ESVNQTEFZX1NJWkVcbiAgICB9LFxuICAgIHR5cGU6ICdpbWcnXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkT2dJbWFnZU1hcmt1cChwYXJhbXM6IE9nQ2FyZENvbnRlbnQsIG9wdGlvbnM6IFJlbmRlck9nSW1hZ2VPcHRpb25zKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBjb25zdCBiYWRnZU5vZGUgPSBwYXJhbXMuYmFkZ2UgPyBidWlsZEJhZGdlTWFya3VwKHBhcmFtcy5iYWRnZSkgOiBudWxsO1xuICBjb25zdCBsb2dvTm9kZSA9IG9wdGlvbnMubG9nb0RhdGFVcmkgPyBidWlsZExvZ29NYXJrdXAob3B0aW9ucy5sb2dvRGF0YVVyaSkgOiBudWxsO1xuXG4gIC8vIFRvcCByb3c6IGxvZ28gb24gdGhlIGxlZnQsIGJhZGdlIG9uIHRoZSByaWdodC5cbiAgY29uc3QgdG9wUm93Q2hpbGRyZW46IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXG4gICAgLi4uKGxvZ29Ob2RlID8gW2xvZ29Ob2RlXSA6IFtdKSxcbiAgICB7IHByb3BzOiB7IHN0eWxlOiB7IGZsZXg6IDEgfSB9LCB0eXBlOiAnZGl2JyB9LFxuICAgIC4uLihiYWRnZU5vZGUgPyBbYmFkZ2VOb2RlXSA6IFtdKVxuICBdO1xuICBjb25zdCB0b3BSb3cgPSB7XG4gICAgcHJvcHM6IHtcbiAgICAgIGNoaWxkcmVuOiB0b3BSb3dDaGlsZHJlbixcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIG1hcmdpbkJvdHRvbTogJzI0cHgnXG4gICAgICB9XG4gICAgfSxcbiAgICB0eXBlOiAnZGl2J1xuICB9O1xuXG4gIC8vIFRpdGxlXG4gIGNvbnN0IHRpdGxlID0ge1xuICAgIHByb3BzOiB7XG4gICAgICBjaGlsZHJlbjogcGFyYW1zLnRpdGxlLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgY29sb3I6IFRJVExFX0NPTE9SLFxuICAgICAgICBmb250U2l6ZTogYCR7U3RyaW5nKFRJVExFX0ZPTlRfU0laRSl9cHhgLFxuICAgICAgICBmb250V2VpZ2h0OiBGT05UX1dFSUdIVF9CT0xELFxuICAgICAgICBsaW5lSGVpZ2h0OiBUSVRMRV9MSU5FX0hFSUdIVCxcbiAgICAgICAgbWFyZ2luQm90dG9tOiAnMjBweCcsXG4gICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnXG4gICAgICB9XG4gICAgfSxcbiAgICB0eXBlOiAnZGl2J1xuICB9O1xuXG4gIC8vIFNpZ25hdHVyZSBjb2RlIGJsb2NrIChiZXR3ZWVuIHRpdGxlIGFuZCBkZXNjcmlwdGlvbikg4oCUIG9taXR0ZWQgZm9yIHBhZ2VzIHdpdGggbm8gc2lnbmF0dXJlLlxuICBjb25zdCBzaWduYXR1cmVOb2RlID0gcGFyYW1zLnNpZ25hdHVyZSA/IGJ1aWxkU2lnbmF0dXJlTWFya3VwKHBhcmFtcy5zaWduYXR1cmUpIDogbnVsbDtcblxuICAvLyBEZXNjcmlwdGlvblxuICBjb25zdCBkZXNjcmlwdGlvbiA9IHtcbiAgICBwcm9wczoge1xuICAgICAgY2hpbGRyZW46IHBhcmFtcy5kZXNjcmlwdGlvbiA/PyAnJyxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGNvbG9yOiBERVNDUklQVElPTl9DT0xPUixcbiAgICAgICAgZmxleDogMSxcbiAgICAgICAgZm9udFNpemU6IGAke1N0cmluZyhERVNDUklQVElPTl9GT05UX1NJWkUpfXB4YCxcbiAgICAgICAgbGluZUhlaWdodDogREVTQ1JJUFRJT05fTElORV9IRUlHSFQsXG4gICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnXG4gICAgICB9XG4gICAgfSxcbiAgICB0eXBlOiAnZGl2J1xuICB9O1xuXG4gIC8vIEZvb3RlciB3aXRoIHRoZSBwYWNrYWdlIG5hbWUgYXMgdGV4dCBicmFuZGluZyAodGhlIGZhdmljb24gaXMgcmVuZGVyZWQgc2VwYXJhdGVseSwgaW4gdGhlIGhlYWRlcilcbiAgY29uc3QgZm9vdGVyID0ge1xuICAgIHByb3BzOiB7XG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7IHByb3BzOiB7IHN0eWxlOiB7IGZsZXg6IDEgfSB9LCB0eXBlOiAnZGl2JyB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBvcHRpb25zLmJyYW5kVGV4dCxcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiBCUkFORF9DT0xPUixcbiAgICAgICAgICAgICAgZm9udFNpemU6IGAke1N0cmluZyhCUkFORF9GT05UX1NJWkUpfXB4YCxcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogRk9OVF9XRUlHSFRfQk9MRFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZTogJ2RpdidcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGFsaWduSXRlbXM6ICdmbGV4LWVuZCcsXG4gICAgICAgIGRpc3BsYXk6ICdmbGV4J1xuICAgICAgfVxuICAgIH0sXG4gICAgdHlwZTogJ2RpdidcbiAgfTtcblxuICAvLyBSb290IGNvbnRhaW5lclxuICByZXR1cm4ge1xuICAgIHByb3BzOiB7XG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBzaWduYXR1cmVOb2RlID8gW3RvcFJvdywgdGl0bGUsIHNpZ25hdHVyZU5vZGUsIGRlc2NyaXB0aW9uXSA6IFt0b3BSb3csIHRpdGxlLCBkZXNjcmlwdGlvbl0sXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGZsZXg6IDEsXG4gICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eXBlOiAnZGl2J1xuICAgICAgICB9LFxuICAgICAgICBmb290ZXJcbiAgICAgIF0sXG4gICAgICBzdHlsZToge1xuICAgICAgICBiYWNrZ3JvdW5kOiBCQUNLR1JPVU5EX0NPTE9SLFxuICAgICAgICBib3JkZXJMZWZ0OiBgJHtTdHJpbmcoQk9SREVSX1dJRFRIKX1weCBzb2xpZCAke0FDQ0VOVF9DT0xPUn1gLFxuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICAgICAgcGFkZGluZzogYCR7U3RyaW5nKFBBRERJTkdfVE9QKX1weCAke1N0cmluZyhQQURESU5HX1gpfXB4ICR7U3RyaW5nKFBBRERJTkdfQk9UVE9NKX1weCAke1N0cmluZyhQQURESU5HX1gpfXB4YCxcbiAgICAgICAgd2lkdGg6ICcxMDAlJ1xuICAgICAgfVxuICAgIH0sXG4gICAgdHlwZTogJ2RpdidcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRTaWduYXR1cmVNYXJrdXAoc2lnbmF0dXJlOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB7XG4gICAgcHJvcHM6IHtcbiAgICAgIGNoaWxkcmVuOiBzaWduYXR1cmUsXG4gICAgICBzdHlsZToge1xuICAgICAgICBiYWNrZ3JvdW5kOiBTSUdOQVRVUkVfQkcsXG4gICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICBjb2xvcjogQUNDRU5UX0NPTE9SLFxuICAgICAgICBkaXNwbGF5OiAnLXdlYmtpdC1ib3gnLFxuICAgICAgICBmb250RmFtaWx5OiAnbW9ub3NwYWNlJyxcbiAgICAgICAgZm9udFNpemU6IGAke1N0cmluZyhTSUdOQVRVUkVfRk9OVF9TSVpFKX1weGAsXG4gICAgICAgIGxpbmVDbGFtcDogU0lHTkFUVVJFX01BWF9MSU5FUyxcbiAgICAgICAgbGluZUhlaWdodDogU0lHTkFUVVJFX0xJTkVfSEVJR0hULFxuICAgICAgICBtYXJnaW5Cb3R0b206ICcyOHB4JyxcbiAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICBwYWRkaW5nOiAnMTZweCAyNHB4J1xuICAgICAgfVxuICAgIH0sXG4gICAgdHlwZTogJ2RpdidcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxTQUFTLGFBQWE7QUFDdEIsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxrQkFBa0I7QUFDM0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxPQUFPLFlBQVk7QUFFbkIsTUFBTSxXQUFXO0FBQ2pCLE1BQU0sWUFBWTtBQUNsQixNQUFNLG1CQUFtQjtBQUV6QixNQUFNLGVBQWU7QUFDckIsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sY0FB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Q0FBQztBQUFBLGNBQ3BDLFlBQVk7QUFBQSxZQUNkO0FBQUEsVUFDRjtBQUFBLFVBQ0EsTUFBTTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBQUEsTUFDQSxPQUFPO0FBQUEsUUFDTCxZQUFZO0FBQUEsUUFDWixTQUFTO0FBQUEsTUFDWDtBQUFBLElBQ0Y7QUFBQSxJQUNBLE1BQU07QUFBQSxFQUNSO0FBR0EsU0FBTztBQUFBLElBQ0wsT0FBTztBQUFBLE1BQ0wsVUFBVTtBQUFBLFFBQ1I7QUFBQSxVQUNFLE9BQU87QUFBQSxZQUNMLFVBQVUsZ0JBQWdCLENBQUMsUUFBUSxPQUFPLGVBQWUsV0FBVyxJQUFJLENBQUMsUUFBUSxPQUFPLFdBQVc7QUFBQSxZQUNuRyxPQUFPO0FBQUEsY0FDTCxTQUFTO0FBQUEsY0FDVCxNQUFNO0FBQUEsY0FDTixlQUFlO0FBQUEsWUFDakI7QUFBQSxVQUNGO0FBQUEsVUFDQSxNQUFNO0FBQUEsUUFDUjtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsTUFDQSxPQUFPO0FBQUEsUUFDTCxZQUFZO0FBQUEsUUFDWixZQUFZLEdBQUcsT0FBTyxZQUFZLENBQUMsWUFBWSxZQUFZO0FBQUEsUUFDM0QsU0FBUztBQUFBLFFBQ1QsZUFBZTtBQUFBLFFBQ2YsUUFBUTtBQUFBLFFBQ1IsZ0JBQWdCO0FBQUEsUUFDaEIsU0FBUyxHQUFHLE9BQU8sV0FBVyxDQUFDLE1BQU0sT0FBTyxTQUFTLENBQUMsTUFBTSxPQUFPLGNBQWMsQ0FBQyxNQUFNLE9BQU8sU0FBUyxDQUFDO0FBQUEsUUFDekcsT0FBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsSUFDQSxNQUFNO0FBQUEsRUFDUjtBQUNGO0FBRUEsU0FBUyxxQkFBcUIsV0FBNEM7QUFDeEUsU0FBTztBQUFBLElBQ0wsT0FBTztBQUFBLE1BQ0wsVUFBVTtBQUFBLE1BQ1YsT0FBTztBQUFBLFFBQ0wsWUFBWTtBQUFBLFFBQ1osY0FBYztBQUFBLFFBQ2QsT0FBTztBQUFBLFFBQ1AsU0FBUztBQUFBLFFBQ1QsWUFBWTtBQUFBLFFBQ1osVUFBVSxHQUFHLE9BQU8sbUJBQW1CLENBQUM7QUFBQSxRQUN4QyxXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsUUFDWixjQUFjO0FBQUEsUUFDZCxVQUFVO0FBQUEsUUFDVixTQUFTO0FBQUEsTUFDWDtBQUFBLElBQ0Y7QUFBQSxJQUNBLE1BQU07QUFBQSxFQUNSO0FBQ0Y7IiwibmFtZXMiOltdfQ==
@@ -0,0 +1,41 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Generates an Open Graph card for every documentation page, reusing the cards whose inputs did not change.
6
+ */
7
+ /**
8
+ * Options for {@link generateOgImages}.
9
+ */
10
+ export interface GenerateOgImagesParams {
11
+ /**
12
+ * The text every card's footer carries, normally the package's name.
13
+ */
14
+ readonly brandText: string;
15
+ /**
16
+ * The documentation content root, normally `<docs>/src/content/docs`. Every `.md` / `.mdx` page under it with a
17
+ * `title` gets a card.
18
+ */
19
+ readonly contentDocsDirectory: string;
20
+ /**
21
+ * The SVG logo drawn on every card. A missing file renders the cards without one.
22
+ */
23
+ readonly faviconPath: string;
24
+ /**
25
+ * The folder holding the fonts the cards are rendered with.
26
+ */
27
+ readonly fontsDirectory: string;
28
+ /**
29
+ * The folder the cards are written to, normally `<docs>/public/og`, served at `<base>/og/<slug>.png`.
30
+ */
31
+ readonly outputDirectory: string;
32
+ }
33
+ /**
34
+ * Generates the Open Graph cards.
35
+ *
36
+ * A card is re-rendered only when its title, description, signature or badge changed, tracked by a hash manifest
37
+ * beside the cards. Missing content or fonts skip the step with a warning rather than failing the build.
38
+ *
39
+ * @param options - The options.
40
+ */
41
+ export declare function generateOgImages(options: GenerateOgImagesParams): Promise<void>;
@@ -0,0 +1,156 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return '/';
11
+ },
12
+ env: {},
13
+ platform: 'android'
14
+ };
15
+
16
+ const existingProcess = globalThis.process;
17
+
18
+ if (!existingProcess) {
19
+ globalThis.process = browserProcess;
20
+ return;
21
+ }
22
+
23
+ if (existingProcess.versions?.node) {
24
+ return;
25
+ }
26
+
27
+ const existingProcessRecord = existingProcess;
28
+
29
+ for (const [key, value] of Object.entries(browserProcess)) {
30
+ existingProcessRecord[key] ??= value;
31
+ }
32
+
33
+ existingProcessRecord['browser'] = true;
34
+ }
35
+
36
+ ensureBrowserProcess();
37
+ })();
38
+
39
+ import { existsSync } from "node:fs";
40
+ import {
41
+ mkdir,
42
+ readdir,
43
+ readFile,
44
+ writeFile
45
+ } from "node:fs/promises";
46
+ import { dirname } from "node:path/posix";
47
+ import { parse as parseYaml } from "yaml";
48
+ import { getOgImagePageSlug } from "./og-image-page.mjs";
49
+ import {
50
+ computeOgHash,
51
+ loadFonts,
52
+ loadLogoDataUri,
53
+ renderOgImage
54
+ } from "./og-image.mjs";
55
+ const CONCURRENCY = 10;
56
+ const PROGRESS_LOG_INTERVAL = 100;
57
+ const MANIFEST_INDENT = 2;
58
+ const FRONT_MATTER_REG_EXP = /^---\r?\n(?<FrontMatter>[\s\S]*?)\r?\n---(?:\r?\n|$)/;
59
+ async function generateOgImages(options) {
60
+ const { brandText, contentDocsDirectory, faviconPath, fontsDirectory, outputDirectory } = options;
61
+ const manifestPath = `${outputDirectory}/.cache-manifest.json`;
62
+ if (!existsSync(contentDocsDirectory)) {
63
+ console.warn(`OG images: content dir not found (${contentDocsDirectory}); skipping.`);
64
+ return;
65
+ }
66
+ const fonts = await loadFonts(fontsDirectory);
67
+ if (!fonts) {
68
+ console.warn(`OG images: no fonts available in ${fontsDirectory}; skipping OG image generation.`);
69
+ return;
70
+ }
71
+ const pages = [];
72
+ await walkDirectory(contentDocsDirectory, contentDocsDirectory, pages);
73
+ console.warn(`OG images: found ${String(pages.length)} pages`);
74
+ const manifest = await loadCacheManifest(manifestPath);
75
+ const changedPages = pages.filter((page) => manifest[page.slug] !== page.hash);
76
+ console.warn(`OG images: ${String(changedPages.length)} changed / ${String(pages.length)} total`);
77
+ if (changedPages.length === 0) {
78
+ console.warn("All OG images up to date.");
79
+ return;
80
+ }
81
+ const logoDataUri = await loadLogoDataUri(faviconPath);
82
+ if (!logoDataUri) {
83
+ console.warn(`OG images: favicon not found (${faviconPath}); rendering cards without a logo.`);
84
+ }
85
+ await generateImagesWithPool({ brandText, changedPages, fonts, logoDataUri, manifest, outputDirectory });
86
+ await mkdir(dirname(manifestPath), { recursive: true });
87
+ await writeFile(manifestPath, JSON.stringify(manifest, null, MANIFEST_INDENT));
88
+ console.warn(`OG images: done. Generated ${String(changedPages.length)} images.`);
89
+ }
90
+ async function generateImagesWithPool(options) {
91
+ const { brandText, changedPages, fonts, logoDataUri, manifest, outputDirectory } = options;
92
+ let completed = 0;
93
+ let index = 0;
94
+ async function processNext() {
95
+ for (let page = changedPages[index++]; page !== void 0; page = changedPages[index++]) {
96
+ const outputPath = `${outputDirectory}/${page.slug}.png`;
97
+ await mkdir(dirname(outputPath), { recursive: true });
98
+ await writeFile(outputPath, await renderOgImage(page.params, { brandText, fonts, logoDataUri }));
99
+ manifest[page.slug] = page.hash;
100
+ completed++;
101
+ if (completed % PROGRESS_LOG_INTERVAL === 0) {
102
+ console.warn(` ${String(completed)}/${String(changedPages.length)} images generated...`);
103
+ }
104
+ }
105
+ }
106
+ await Promise.all(Array.from({ length: CONCURRENCY }, async () => {
107
+ await processNext();
108
+ }));
109
+ }
110
+ async function loadCacheManifest(manifestPath) {
111
+ return existsSync(manifestPath) ? JSON.parse(await readFile(manifestPath, "utf-8")) : {};
112
+ }
113
+ function parseFrontMatter(content) {
114
+ const frontMatter = FRONT_MATTER_REG_EXP.exec(content)?.groups?.["FrontMatter"];
115
+ return frontMatter === void 0 ? {} : parseYaml(frontMatter) ?? {};
116
+ }
117
+ async function parsePage(filePath, contentDocsDirectory) {
118
+ const data = parseFrontMatter(await readFile(filePath, "utf-8"));
119
+ const title = toOptionalString(data["title"]);
120
+ if (!title) {
121
+ return null;
122
+ }
123
+ const badge = data["sidebar"];
124
+ const params = {
125
+ badge: toOptionalString(badge?.["badge"]?.["text"]),
126
+ description: toOptionalString(data["description"]) ?? "",
127
+ signature: toOptionalString(data["signature"]) ?? "",
128
+ title
129
+ };
130
+ return {
131
+ hash: computeOgHash(params),
132
+ params,
133
+ slug: getOgImagePageSlug(data, filePath, contentDocsDirectory)
134
+ };
135
+ }
136
+ function toOptionalString(value) {
137
+ return typeof value === "string" ? value : void 0;
138
+ }
139
+ async function walkDirectory(directory, contentDocsDirectory, pages) {
140
+ const entries = await readdir(directory, { withFileTypes: true });
141
+ for (const entry of entries) {
142
+ const fullPath = `${directory}/${entry.name}`;
143
+ if (entry.isDirectory()) {
144
+ await walkDirectory(fullPath, contentDocsDirectory, pages);
145
+ } else if (entry.name.endsWith(".md") || entry.name.endsWith(".mdx")) {
146
+ const page = await parsePage(fullPath, contentDocsDirectory);
147
+ if (page) {
148
+ pages.push(page);
149
+ }
150
+ }
151
+ }
152
+ }
153
+ export {
154
+ generateOgImages
155
+ };
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvb2ctaW1hZ2VzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBHZW5lcmF0ZXMgYW4gT3BlbiBHcmFwaCBjYXJkIGZvciBldmVyeSBkb2N1bWVudGF0aW9uIHBhZ2UsIHJldXNpbmcgdGhlIGNhcmRzIHdob3NlIGlucHV0cyBkaWQgbm90IGNoYW5nZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZvbnQgfSBmcm9tICdzYXRvcmknO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICBta2RpcixcbiAgcmVhZGRpcixcbiAgcmVhZEZpbGUsXG4gIHdyaXRlRmlsZVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tICdub2RlOnBhdGgvcG9zaXgnO1xuaW1wb3J0IHsgcGFyc2UgYXMgcGFyc2VZYW1sIH0gZnJvbSAneWFtbCc7XG5cbmltcG9ydCB0eXBlIHsgT2dDYXJkQ29udGVudCB9IGZyb20gJy4vb2ctaW1hZ2UudHMnO1xuXG5pbXBvcnQgeyBnZXRPZ0ltYWdlUGFnZVNsdWcgfSBmcm9tICcuL29nLWltYWdlLXBhZ2UudHMnO1xuaW1wb3J0IHtcbiAgY29tcHV0ZU9nSGFzaCxcbiAgbG9hZEZvbnRzLFxuICBsb2FkTG9nb0RhdGFVcmksXG4gIHJlbmRlck9nSW1hZ2Vcbn0gZnJvbSAnLi9vZy1pbWFnZS50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdlbmVyYXRlT2dJbWFnZXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlT2dJbWFnZXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHRleHQgZXZlcnkgY2FyZCdzIGZvb3RlciBjYXJyaWVzLCBub3JtYWxseSB0aGUgcGFja2FnZSdzIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBicmFuZFRleHQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRvY3VtZW50YXRpb24gY29udGVudCByb290LCBub3JtYWxseSBgPGRvY3M+L3NyYy9jb250ZW50L2RvY3NgLiBFdmVyeSBgLm1kYCAvIGAubWR4YCBwYWdlIHVuZGVyIGl0IHdpdGggYVxuICAgKiBgdGl0bGVgIGdldHMgYSBjYXJkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudERvY3NEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFNWRyBsb2dvIGRyYXduIG9uIGV2ZXJ5IGNhcmQuIEEgbWlzc2luZyBmaWxlIHJlbmRlcnMgdGhlIGNhcmRzIHdpdGhvdXQgb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgZmF2aWNvblBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZvbGRlciBob2xkaW5nIHRoZSBmb250cyB0aGUgY2FyZHMgYXJlIHJlbmRlcmVkIHdpdGguXG4gICAqL1xuICByZWFkb25seSBmb250c0RpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHRoZSBjYXJkcyBhcmUgd3JpdHRlbiB0bywgbm9ybWFsbHkgYDxkb2NzPi9wdWJsaWMvb2dgLCBzZXJ2ZWQgYXQgYDxiYXNlPi9vZy88c2x1Zz4ucG5nYC5cbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dERpcmVjdG9yeTogc3RyaW5nO1xufVxuXG50eXBlIENhY2hlTWFuaWZlc3QgPSBQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuXG5pbnRlcmZhY2UgR2VuZXJhdGVJbWFnZXNXaXRoUG9vbE9wdGlvbnMge1xuICByZWFkb25seSBicmFuZFRleHQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY2hhbmdlZFBhZ2VzOiBQYWdlRW50cnlbXTtcbiAgcmVhZG9ubHkgZm9udHM6IEZvbnRbXTtcbiAgcmVhZG9ubHkgbG9nb0RhdGFVcmk6IG51bGwgfCBzdHJpbmc7XG4gIHJlYWRvbmx5IG1hbmlmZXN0OiBDYWNoZU1hbmlmZXN0O1xuICByZWFkb25seSBvdXRwdXREaXJlY3Rvcnk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBhZ2VFbnRyeSB7XG4gIGhhc2g6IHN0cmluZztcbiAgcGFyYW1zOiBPZ0NhcmRDb250ZW50O1xuICBzbHVnOiBzdHJpbmc7XG59XG5cbmNvbnN0IENPTkNVUlJFTkNZID0gMTA7XG5jb25zdCBQUk9HUkVTU19MT0dfSU5URVJWQUwgPSAxMDA7XG5jb25zdCBNQU5JRkVTVF9JTkRFTlQgPSAyO1xuXG4vLyBGcm9udG1hdHRlciBpcyBwYXJzZWQgaGVyZSByYXRoZXIgdGhhbiB3aXRoIGBncmF5LW1hdHRlcmAuIEl0cyBgbGliL2VuZ2luZXMuanNgIGJpbmRzIGpzLXlhbWwnc1xuLy8gYHNhZmVMb2FkYC9gc2FmZUR1bXBgIGF0IE1PRFVMRS1MT0FEIHRpbWUsIGFuZCBib3RoIHdlcmUgcmVtb3ZlZCBpbiBqcy15YW1sIHY0IOKAlCBzbyBtZXJlbHlcbi8vIElNUE9SVElORyBgZ3JheS1tYXR0ZXJgIHRocm93cyBgQ2Fubm90IHJlYWQgcHJvcGVydGllcyBvZiB1bmRlZmluZWQgKHJlYWRpbmcgJ2JpbmQnKWAsIGJlZm9yZSBhblxuLy8gYGVuZ2luZXNgIG9wdGlvbiBjb3VsZCBvdmVycmlkZSB0aGUgZGVmYXVsdC4gT25seSB0aGUgZnJvbnRtYXR0ZXIgb2JqZWN0IGlzIG5lZWRlZCBoZXJlLlxuY29uc3QgRlJPTlRfTUFUVEVSX1JFR19FWFAgPSAvXi0tLVxccj9cXG4oPzxGcm9udE1hdHRlcj5bXFxzXFxTXSo/KVxccj9cXG4tLS0oPzpcXHI/XFxufCQpLztcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIE9wZW4gR3JhcGggY2FyZHMuXG4gKlxuICogQSBjYXJkIGlzIHJlLXJlbmRlcmVkIG9ubHkgd2hlbiBpdHMgdGl0bGUsIGRlc2NyaXB0aW9uLCBzaWduYXR1cmUgb3IgYmFkZ2UgY2hhbmdlZCwgdHJhY2tlZCBieSBhIGhhc2ggbWFuaWZlc3RcbiAqIGJlc2lkZSB0aGUgY2FyZHMuIE1pc3NpbmcgY29udGVudCBvciBmb250cyBza2lwIHRoZSBzdGVwIHdpdGggYSB3YXJuaW5nIHJhdGhlciB0aGFuIGZhaWxpbmcgdGhlIGJ1aWxkLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU9nSW1hZ2VzKG9wdGlvbnM6IEdlbmVyYXRlT2dJbWFnZXNQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBicmFuZFRleHQsIGNvbnRlbnREb2NzRGlyZWN0b3J5LCBmYXZpY29uUGF0aCwgZm9udHNEaXJlY3RvcnksIG91dHB1dERpcmVjdG9yeSB9ID0gb3B0aW9ucztcbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gYCR7b3V0cHV0RGlyZWN0b3J5fS8uY2FjaGUtbWFuaWZlc3QuanNvbmA7XG5cbiAgaWYgKCFleGlzdHNTeW5jKGNvbnRlbnREb2NzRGlyZWN0b3J5KSkge1xuICAgIGNvbnNvbGUud2FybihgT0cgaW1hZ2VzOiBjb250ZW50IGRpciBub3QgZm91bmQgKCR7Y29udGVudERvY3NEaXJlY3Rvcnl9KTsgc2tpcHBpbmcuYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gTG9hZCBmb250cyBmaXJzdCDigJQgc2F0b3JpIGNhbm5vdCByZW5kZXIgd2l0aG91dCB0aGVtLlxuICBjb25zdCBmb250cyA9IGF3YWl0IGxvYWRGb250cyhmb250c0RpcmVjdG9yeSk7XG4gIGlmICghZm9udHMpIHtcbiAgICBjb25zb2xlLndhcm4oYE9HIGltYWdlczogbm8gZm9udHMgYXZhaWxhYmxlIGluICR7Zm9udHNEaXJlY3Rvcnl9OyBza2lwcGluZyBPRyBpbWFnZSBnZW5lcmF0aW9uLmApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhZ2VzOiBQYWdlRW50cnlbXSA9IFtdO1xuICBhd2FpdCB3YWxrRGlyZWN0b3J5KGNvbnRlbnREb2NzRGlyZWN0b3J5LCBjb250ZW50RG9jc0RpcmVjdG9yeSwgcGFnZXMpO1xuICBjb25zb2xlLndhcm4oYE9HIGltYWdlczogZm91bmQgJHtTdHJpbmcocGFnZXMubGVuZ3RoKX0gcGFnZXNgKTtcblxuICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGxvYWRDYWNoZU1hbmlmZXN0KG1hbmlmZXN0UGF0aCk7XG4gIGNvbnN0IGNoYW5nZWRQYWdlcyA9IHBhZ2VzLmZpbHRlcigocGFnZSkgPT4gbWFuaWZlc3RbcGFnZS5zbHVnXSAhPT0gcGFnZS5oYXNoKTtcbiAgY29uc29sZS53YXJuKGBPRyBpbWFnZXM6ICR7U3RyaW5nKGNoYW5nZWRQYWdlcy5sZW5ndGgpfSBjaGFuZ2VkIC8gJHtTdHJpbmcocGFnZXMubGVuZ3RoKX0gdG90YWxgKTtcblxuICBpZiAoY2hhbmdlZFBhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUud2FybignQWxsIE9HIGltYWdlcyB1cCB0byBkYXRlLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFJhc3Rlcml6ZSB0aGUgc2l0ZSBsb2dvIG9uY2UgKHNoYXJlZCBhY3Jvc3MgZXZlcnkgY2FyZCk7IGRlZ3JhZGUgZ3JhY2VmdWxseSBpZiBhYnNlbnQuXG4gIGNvbnN0IGxvZ29EYXRhVXJpID0gYXdhaXQgbG9hZExvZ29EYXRhVXJpKGZhdmljb25QYXRoKTtcbiAgaWYgKCFsb2dvRGF0YVVyaSkge1xuICAgIGNvbnNvbGUud2FybihgT0cgaW1hZ2VzOiBmYXZpY29uIG5vdCBmb3VuZCAoJHtmYXZpY29uUGF0aH0pOyByZW5kZXJpbmcgY2FyZHMgd2l0aG91dCBhIGxvZ28uYCk7XG4gIH1cblxuICBhd2FpdCBnZW5lcmF0ZUltYWdlc1dpdGhQb29sKHsgYnJhbmRUZXh0LCBjaGFuZ2VkUGFnZXMsIGZvbnRzLCBsb2dvRGF0YVVyaSwgbWFuaWZlc3QsIG91dHB1dERpcmVjdG9yeSB9KTtcblxuICBhd2FpdCBta2RpcihkaXJuYW1lKG1hbmlmZXN0UGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCB3cml0ZUZpbGUobWFuaWZlc3RQYXRoLCBKU09OLnN0cmluZ2lmeShtYW5pZmVzdCwgbnVsbCwgTUFOSUZFU1RfSU5ERU5UKSk7XG4gIGNvbnNvbGUud2FybihgT0cgaW1hZ2VzOiBkb25lLiBHZW5lcmF0ZWQgJHtTdHJpbmcoY2hhbmdlZFBhZ2VzLmxlbmd0aCl9IGltYWdlcy5gKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVJbWFnZXNXaXRoUG9vbChvcHRpb25zOiBHZW5lcmF0ZUltYWdlc1dpdGhQb29sT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGJyYW5kVGV4dCwgY2hhbmdlZFBhZ2VzLCBmb250cywgbG9nb0RhdGFVcmksIG1hbmlmZXN0LCBvdXRwdXREaXJlY3RvcnkgfSA9IG9wdGlvbnM7XG4gIGxldCBjb21wbGV0ZWQgPSAwO1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NOZXh0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAobGV0IHBhZ2UgPSBjaGFuZ2VkUGFnZXNbaW5kZXgrK107IHBhZ2UgIT09IHVuZGVmaW5lZDsgcGFnZSA9IGNoYW5nZWRQYWdlc1tpbmRleCsrXSkge1xuICAgICAgY29uc3Qgb3V0cHV0UGF0aCA9IGAke291dHB1dERpcmVjdG9yeX0vJHtwYWdlLnNsdWd9LnBuZ2A7XG4gICAgICBhd2FpdCBta2RpcihkaXJuYW1lKG91dHB1dFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShvdXRwdXRQYXRoLCBhd2FpdCByZW5kZXJPZ0ltYWdlKHBhZ2UucGFyYW1zLCB7IGJyYW5kVGV4dCwgZm9udHMsIGxvZ29EYXRhVXJpIH0pKTtcbiAgICAgIG1hbmlmZXN0W3BhZ2Uuc2x1Z10gPSBwYWdlLmhhc2g7XG4gICAgICBjb21wbGV0ZWQrKztcbiAgICAgIGlmIChjb21wbGV0ZWQgJSBQUk9HUkVTU19MT0dfSU5URVJWQUwgPT09IDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAgICR7U3RyaW5nKGNvbXBsZXRlZCl9LyR7U3RyaW5nKGNoYW5nZWRQYWdlcy5sZW5ndGgpfSBpbWFnZXMgZ2VuZXJhdGVkLi4uYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwoQXJyYXkuZnJvbSh7IGxlbmd0aDogQ09OQ1VSUkVOQ1kgfSwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHByb2Nlc3NOZXh0KCk7XG4gIH0pKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZENhY2hlTWFuaWZlc3QobWFuaWZlc3RQYXRoOiBzdHJpbmcpOiBQcm9taXNlPENhY2hlTWFuaWZlc3Q+IHtcbiAgcmV0dXJuIGV4aXN0c1N5bmMobWFuaWZlc3RQYXRoKSA/IChKU09OLnBhcnNlKGF3YWl0IHJlYWRGaWxlKG1hbmlmZXN0UGF0aCwgJ3V0Zi04JykpIGFzIENhY2hlTWFuaWZlc3QpIDoge307XG59XG5cbmZ1bmN0aW9uIHBhcnNlRnJvbnRNYXR0ZXIoY29udGVudDogc3RyaW5nKTogUGFydGlhbDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCBmcm9udE1hdHRlciA9IEZST05UX01BVFRFUl9SRUdfRVhQLmV4ZWMoY29udGVudCk/Lmdyb3Vwcz8uWydGcm9udE1hdHRlciddO1xuICByZXR1cm4gZnJvbnRNYXR0ZXIgPT09IHVuZGVmaW5lZCA/IHt9IDogKHBhcnNlWWFtbChmcm9udE1hdHRlcikgYXMgbnVsbCB8IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KSA/PyB7fTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFyc2VQYWdlKGZpbGVQYXRoOiBzdHJpbmcsIGNvbnRlbnREb2NzRGlyZWN0b3J5OiBzdHJpbmcpOiBQcm9taXNlPG51bGwgfCBQYWdlRW50cnk+IHtcbiAgY29uc3QgZGF0YSA9IHBhcnNlRnJvbnRNYXR0ZXIoYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgsICd1dGYtOCcpKTtcblxuICBjb25zdCB0aXRsZSA9IHRvT3B0aW9uYWxTdHJpbmcoZGF0YVsndGl0bGUnXSk7XG4gIGlmICghdGl0bGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGJhZGdlID0gZGF0YVsnc2lkZWJhciddIGFzIFBhcnRpYWw8UmVjb3JkPHN0cmluZywgUGFydGlhbDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+PiB8IHVuZGVmaW5lZDtcbiAgY29uc3QgcGFyYW1zOiBPZ0NhcmRDb250ZW50ID0ge1xuICAgIGJhZGdlOiB0b09wdGlvbmFsU3RyaW5nKGJhZGdlPy5bJ2JhZGdlJ10/LlsndGV4dCddKSxcbiAgICBkZXNjcmlwdGlvbjogdG9PcHRpb25hbFN0cmluZyhkYXRhWydkZXNjcmlwdGlvbiddKSA/PyAnJyxcbiAgICBzaWduYXR1cmU6IHRvT3B0aW9uYWxTdHJpbmcoZGF0YVsnc2lnbmF0dXJlJ10pID8/ICcnLFxuICAgIHRpdGxlXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBoYXNoOiBjb21wdXRlT2dIYXNoKHBhcmFtcyksXG4gICAgcGFyYW1zLFxuICAgIHNsdWc6IGdldE9nSW1hZ2VQYWdlU2x1ZyhkYXRhLCBmaWxlUGF0aCwgY29udGVudERvY3NEaXJlY3RvcnkpXG4gIH07XG59XG5cbmZ1bmN0aW9uIHRvT3B0aW9uYWxTdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3YWxrRGlyZWN0b3J5KGRpcmVjdG9yeTogc3RyaW5nLCBjb250ZW50RG9jc0RpcmVjdG9yeTogc3RyaW5nLCBwYWdlczogUGFnZUVudHJ5W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IHJlYWRkaXIoZGlyZWN0b3J5LCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYCR7ZGlyZWN0b3J5fS8ke2VudHJ5Lm5hbWV9YDtcbiAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgYXdhaXQgd2Fsa0RpcmVjdG9yeShmdWxsUGF0aCwgY29udGVudERvY3NEaXJlY3RvcnksIHBhZ2VzKTtcbiAgICB9IGVsc2UgaWYgKGVudHJ5Lm5hbWUuZW5kc1dpdGgoJy5tZCcpIHx8IGVudHJ5Lm5hbWUuZW5kc1dpdGgoJy5tZHgnKSkge1xuICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHBhcnNlUGFnZShmdWxsUGF0aCwgY29udGVudERvY3NEaXJlY3RvcnkpO1xuICAgICAgaWYgKHBhZ2UpIHtcbiAgICAgICAgcGFnZXMucHVzaChwYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxTQUFTLGtCQUFrQjtBQUMzQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsU0FBUyxpQkFBaUI7QUFJbkMsU0FBUywwQkFBMEI7QUFDbkM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQWtEUCxNQUFNLGNBQWM7QUFDcEIsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSxrQkFBa0I7QUFNeEIsTUFBTSx1QkFBdUI7QUFVN0IsZUFBc0IsaUJBQWlCLFNBQWdEO0FBQ3JGLFFBQU0sRUFBRSxXQUFXLHNCQUFzQixhQUFhLGdCQUFnQixnQkFBZ0IsSUFBSTtBQUMxRixRQUFNLGVBQWUsR0FBRyxlQUFlO0FBRXZDLE1BQUksQ0FBQyxXQUFXLG9CQUFvQixHQUFHO0FBQ3JDLFlBQVEsS0FBSyxxQ0FBcUMsb0JBQW9CLGNBQWM7QUFDcEY7QUFBQSxFQUNGO0FBR0EsUUFBTSxRQUFRLE1BQU0sVUFBVSxjQUFjO0FBQzVDLE1BQUksQ0FBQyxPQUFPO0FBQ1YsWUFBUSxLQUFLLG9DQUFvQyxjQUFjLGlDQUFpQztBQUNoRztBQUFBLEVBQ0Y7QUFFQSxRQUFNLFFBQXFCLENBQUM7QUFDNUIsUUFBTSxjQUFjLHNCQUFzQixzQkFBc0IsS0FBSztBQUNyRSxVQUFRLEtBQUssb0JBQW9CLE9BQU8sTUFBTSxNQUFNLENBQUMsUUFBUTtBQUU3RCxRQUFNLFdBQVcsTUFBTSxrQkFBa0IsWUFBWTtBQUNyRCxRQUFNLGVBQWUsTUFBTSxPQUFPLENBQUMsU0FBUyxTQUFTLEtBQUssSUFBSSxNQUFNLEtBQUssSUFBSTtBQUM3RSxVQUFRLEtBQUssY0FBYyxPQUFPLGFBQWEsTUFBTSxDQUFDLGNBQWMsT0FBTyxNQUFNLE1BQU0sQ0FBQyxRQUFRO0FBRWhHLE1BQUksYUFBYSxXQUFXLEdBQUc7QUFDN0IsWUFBUSxLQUFLLDJCQUEyQjtBQUN4QztBQUFBLEVBQ0Y7QUFHQSxRQUFNLGNBQWMsTUFBTSxnQkFBZ0IsV0FBVztBQUNyRCxNQUFJLENBQUMsYUFBYTtBQUNoQixZQUFRLEtBQUssaUNBQWlDLFdBQVcsb0NBQW9DO0FBQUEsRUFDL0Y7QUFFQSxRQUFNLHVCQUF1QixFQUFFLFdBQVcsY0FBYyxPQUFPLGFBQWEsVUFBVSxnQkFBZ0IsQ0FBQztBQUV2RyxRQUFNLE1BQU0sUUFBUSxZQUFZLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUN0RCxRQUFNLFVBQVUsY0FBYyxLQUFLLFVBQVUsVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxVQUFRLEtBQUssOEJBQThCLE9BQU8sYUFBYSxNQUFNLENBQUMsVUFBVTtBQUNsRjtBQUVBLGVBQWUsdUJBQXVCLFNBQXVEO0FBQzNGLFFBQU0sRUFBRSxXQUFXLGNBQWMsT0FBTyxhQUFhLFVBQVUsZ0JBQWdCLElBQUk7QUFDbkYsTUFBSSxZQUFZO0FBQ2hCLE1BQUksUUFBUTtBQUVaLGlCQUFlLGNBQTZCO0FBQzFDLGFBQVMsT0FBTyxhQUFhLE9BQU8sR0FBRyxTQUFTLFFBQVcsT0FBTyxhQUFhLE9BQU8sR0FBRztBQUN2RixZQUFNLGFBQWEsR0FBRyxlQUFlLElBQUksS0FBSyxJQUFJO0FBQ2xELFlBQU0sTUFBTSxRQUFRLFVBQVUsR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQ3BELFlBQU0sVUFBVSxZQUFZLE1BQU0sY0FBYyxLQUFLLFFBQVEsRUFBRSxXQUFXLE9BQU8sWUFBWSxDQUFDLENBQUM7QUFDL0YsZUFBUyxLQUFLLElBQUksSUFBSSxLQUFLO0FBQzNCO0FBQ0EsVUFBSSxZQUFZLDBCQUEwQixHQUFHO0FBQzNDLGdCQUFRLEtBQUssS0FBSyxPQUFPLFNBQVMsQ0FBQyxJQUFJLE9BQU8sYUFBYSxNQUFNLENBQUMsc0JBQXNCO0FBQUEsTUFDMUY7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFFBQU0sUUFBUSxJQUFJLE1BQU0sS0FBSyxFQUFFLFFBQVEsWUFBWSxHQUFHLFlBQVk7QUFDaEUsVUFBTSxZQUFZO0FBQUEsRUFDcEIsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxlQUFlLGtCQUFrQixjQUE4QztBQUM3RSxTQUFPLFdBQVcsWUFBWSxJQUFLLEtBQUssTUFBTSxNQUFNLFNBQVMsY0FBYyxPQUFPLENBQUMsSUFBc0IsQ0FBQztBQUM1RztBQUVBLFNBQVMsaUJBQWlCLFNBQW1EO0FBQzNFLFFBQU0sY0FBYyxxQkFBcUIsS0FBSyxPQUFPLEdBQUcsU0FBUyxhQUFhO0FBQzlFLFNBQU8sZ0JBQWdCLFNBQVksQ0FBQyxJQUFLLFVBQVUsV0FBVyxLQUFpRCxDQUFDO0FBQ2xIO0FBRUEsZUFBZSxVQUFVLFVBQWtCLHNCQUF5RDtBQUNsRyxRQUFNLE9BQU8saUJBQWlCLE1BQU0sU0FBUyxVQUFVLE9BQU8sQ0FBQztBQUUvRCxRQUFNLFFBQVEsaUJBQWlCLEtBQUssT0FBTyxDQUFDO0FBQzVDLE1BQUksQ0FBQyxPQUFPO0FBQ1YsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFFBQVEsS0FBSyxTQUFTO0FBQzVCLFFBQU0sU0FBd0I7QUFBQSxJQUM1QixPQUFPLGlCQUFpQixRQUFRLE9BQU8sSUFBSSxNQUFNLENBQUM7QUFBQSxJQUNsRCxhQUFhLGlCQUFpQixLQUFLLGFBQWEsQ0FBQyxLQUFLO0FBQUEsSUFDdEQsV0FBVyxpQkFBaUIsS0FBSyxXQUFXLENBQUMsS0FBSztBQUFBLElBQ2xEO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFBQSxJQUNMLE1BQU0sY0FBYyxNQUFNO0FBQUEsSUFDMUI7QUFBQSxJQUNBLE1BQU0sbUJBQW1CLE1BQU0sVUFBVSxvQkFBb0I7QUFBQSxFQUMvRDtBQUNGO0FBRUEsU0FBUyxpQkFBaUIsT0FBb0M7QUFDNUQsU0FBTyxPQUFPLFVBQVUsV0FBVyxRQUFRO0FBQzdDO0FBRUEsZUFBZSxjQUFjLFdBQW1CLHNCQUE4QixPQUFtQztBQUMvRyxRQUFNLFVBQVUsTUFBTSxRQUFRLFdBQVcsRUFBRSxlQUFlLEtBQUssQ0FBQztBQUNoRSxhQUFXLFNBQVMsU0FBUztBQUMzQixVQUFNLFdBQVcsR0FBRyxTQUFTLElBQUksTUFBTSxJQUFJO0FBQzNDLFFBQUksTUFBTSxZQUFZLEdBQUc7QUFDdkIsWUFBTSxjQUFjLFVBQVUsc0JBQXNCLEtBQUs7QUFBQSxJQUMzRCxXQUFXLE1BQU0sS0FBSyxTQUFTLEtBQUssS0FBSyxNQUFNLEtBQUssU0FBUyxNQUFNLEdBQUc7QUFDcEUsWUFBTSxPQUFPLE1BQU0sVUFBVSxVQUFVLG9CQUFvQjtBQUMzRCxVQUFJLE1BQU07QUFDUixjQUFNLEtBQUssSUFBSTtBQUFBLE1BQ2pCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjsiLCJuYW1lcyI6W119
@@ -0,0 +1,14 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Adds per-page Open Graph and Twitter image metadata. `defineDocsSiteConfig` registers it as Starlight route
6
+ * middleware; the cards it points at are the ones `generateOgImages` writes.
7
+ */
8
+ import type { APIContext } from 'astro';
9
+ /**
10
+ * Adds Open Graph and Twitter image metadata to a Starlight documentation response.
11
+ *
12
+ * @param context - Astro's request context.
13
+ */
14
+ export declare function onRequest(context: APIContext): void;
@@ -0,0 +1,23 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ function onRequest(context) {
7
+ const { starlightRoute } = context.locals;
8
+ const { id } = starlightRoute;
9
+ const slug = id.replace(/\/index$/, "").replace(/\.\w+$/, "");
10
+ const base = starlightRoute.siteTitleHref.replace(/\/$/, "");
11
+ const origin = context.url.origin;
12
+ const ogImageUrl = `${origin}${base}/og/${slug || "index"}.png`;
13
+ starlightRoute.head.push(
14
+ { attrs: { content: ogImageUrl, property: "og:image" }, tag: "meta" },
15
+ { attrs: { content: "1200", property: "og:image:width" }, tag: "meta" },
16
+ { attrs: { content: "630", property: "og:image:height" }, tag: "meta" },
17
+ { attrs: { content: ogImageUrl, name: "twitter:image" }, tag: "meta" }
18
+ );
19
+ }
20
+ export {
21
+ onRequest
22
+ };
23
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9yb3V0ZS1kYXRhLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQWRkcyBwZXItcGFnZSBPcGVuIEdyYXBoIGFuZCBUd2l0dGVyIGltYWdlIG1ldGFkYXRhLiBgZGVmaW5lRG9jc1NpdGVDb25maWdgIHJlZ2lzdGVycyBpdCBhcyBTdGFybGlnaHQgcm91dGVcbiAqIG1pZGRsZXdhcmU7IHRoZSBjYXJkcyBpdCBwb2ludHMgYXQgYXJlIHRoZSBvbmVzIGBnZW5lcmF0ZU9nSW1hZ2VzYCB3cml0ZXMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBUElDb250ZXh0IH0gZnJvbSAnYXN0cm8nO1xuXG4vKipcbiAqIEFkZHMgT3BlbiBHcmFwaCBhbmQgVHdpdHRlciBpbWFnZSBtZXRhZGF0YSB0byBhIFN0YXJsaWdodCBkb2N1bWVudGF0aW9uIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IC0gQXN0cm8ncyByZXF1ZXN0IGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvblJlcXVlc3QoY29udGV4dDogQVBJQ29udGV4dCk6IHZvaWQge1xuICAvLyBTdGFybGlnaHQgc2V0cyB0aGlzIGRvY3VtZW50ZWQgcm91dGUtZGF0YSB2YWx1ZSBiZWZvcmUgaW52b2tpbmcgdXNlciBtaWRkbGV3YXJlLlxuICBjb25zdCB7IHN0YXJsaWdodFJvdXRlIH0gPSBjb250ZXh0LmxvY2FscztcbiAgY29uc3QgeyBpZCB9ID0gc3RhcmxpZ2h0Um91dGU7XG4gIGNvbnN0IHNsdWcgPSBpZFxuICAgIC5yZXBsYWNlKC9cXC9pbmRleCQvLCAnJylcbiAgICAucmVwbGFjZSgvXFwuXFx3KyQvLCAnJyk7XG4gIC8vIFRoZSBzaXRlIHRpdGxlIGxpbmtzIHRvIHRoZSBob21lIHBhZ2UsIHdoaWNoIGlzIHRoZSBiYXNlIHBhdGggb24gYSBzaXRlIHdpdGhvdXQgbG9jYWxlcy5cbiAgY29uc3QgYmFzZSA9IHN0YXJsaWdodFJvdXRlLnNpdGVUaXRsZUhyZWYucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgY29uc3Qgb3JpZ2luID0gY29udGV4dC51cmwub3JpZ2luO1xuICBjb25zdCBvZ0ltYWdlVXJsID0gYCR7b3JpZ2lufSR7YmFzZX0vb2cvJHtzbHVnIHx8ICdpbmRleCd9LnBuZ2A7XG5cbiAgc3RhcmxpZ2h0Um91dGUuaGVhZC5wdXNoKFxuICAgIHsgYXR0cnM6IHsgY29udGVudDogb2dJbWFnZVVybCwgcHJvcGVydHk6ICdvZzppbWFnZScgfSwgdGFnOiAnbWV0YScgfSxcbiAgICB7IGF0dHJzOiB7IGNvbnRlbnQ6ICcxMjAwJywgcHJvcGVydHk6ICdvZzppbWFnZTp3aWR0aCcgfSwgdGFnOiAnbWV0YScgfSxcbiAgICB7IGF0dHJzOiB7IGNvbnRlbnQ6ICc2MzAnLCBwcm9wZXJ0eTogJ29nOmltYWdlOmhlaWdodCcgfSwgdGFnOiAnbWV0YScgfSxcbiAgICB7IGF0dHJzOiB7IGNvbnRlbnQ6IG9nSW1hZ2VVcmwsIG5hbWU6ICd0d2l0dGVyOmltYWdlJyB9LCB0YWc6ICdtZXRhJyB9XG4gICk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQWNPLFNBQVMsVUFBVSxTQUEyQjtBQUVuRCxRQUFNLEVBQUUsZUFBZSxJQUFJLFFBQVE7QUFDbkMsUUFBTSxFQUFFLEdBQUcsSUFBSTtBQUNmLFFBQU0sT0FBTyxHQUNWLFFBQVEsWUFBWSxFQUFFLEVBQ3RCLFFBQVEsVUFBVSxFQUFFO0FBRXZCLFFBQU0sT0FBTyxlQUFlLGNBQWMsUUFBUSxPQUFPLEVBQUU7QUFDM0QsUUFBTSxTQUFTLFFBQVEsSUFBSTtBQUMzQixRQUFNLGFBQWEsR0FBRyxNQUFNLEdBQUcsSUFBSSxPQUFPLFFBQVEsT0FBTztBQUV6RCxpQkFBZSxLQUFLO0FBQUEsSUFDbEIsRUFBRSxPQUFPLEVBQUUsU0FBUyxZQUFZLFVBQVUsV0FBVyxHQUFHLEtBQUssT0FBTztBQUFBLElBQ3BFLEVBQUUsT0FBTyxFQUFFLFNBQVMsUUFBUSxVQUFVLGlCQUFpQixHQUFHLEtBQUssT0FBTztBQUFBLElBQ3RFLEVBQUUsT0FBTyxFQUFFLFNBQVMsT0FBTyxVQUFVLGtCQUFrQixHQUFHLEtBQUssT0FBTztBQUFBLElBQ3RFLEVBQUUsT0FBTyxFQUFFLFNBQVMsWUFBWSxNQUFNLGdCQUFnQixHQUFHLEtBQUssT0FBTztBQUFBLEVBQ3ZFO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,31 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Sätteri mdast plugin that turns GitHub alerts (`> [!NOTE]` ...) into Starlight asides.
6
+ */
7
+ import type { MdastPluginDefinition } from 'satteri';
8
+ /**
9
+ * The Starlight aside variant each GitHub alert type renders as.
10
+ *
11
+ * Starlight has four variants for GitHub's five types, so `IMPORTANT` and `WARNING` share `caution`, and
12
+ * `CAUTION` - GitHub's most severe - takes `danger`. This is the mapping `starlight-github-alerts` uses.
13
+ */
14
+ export declare const GITHUB_ALERT_ASIDE_VARIANTS: ReadonlyMap<string, string>;
15
+ /**
16
+ * Sätteri mdast plugin that turns GitHub alerts into Starlight asides.
17
+ *
18
+ * The guides keep GitHub's `> [!TYPE]` syntax because it also renders on GitHub, where most people read
19
+ * the repository. The site used to rely on `starlight-github-alerts` for the conversion, and on
20
+ * Starlight `0.42` that plugin silently does nothing: it registers itself in front of an mdast plugin
21
+ * NAMED `starlight-asides`, while Starlight now registers its asides as an unnamed factory, so the lookup
22
+ * misses and the plugin returns without a word. Every alert then rendered as a plain blockquote opening
23
+ * with the literal `[!WARNING]`.
24
+ *
25
+ * This plugin does the same conversion from the site's own `mdastPlugins`, which run before every plugin
26
+ * Starlight appends: it replaces the blockquote with a `containerDirective` named after the aside variant,
27
+ * exactly what `:::caution` parses to, and Starlight's own asides plugin then renders it.
28
+ *
29
+ * @returns The plugin definition.
30
+ */
31
+ export declare function satteriGitHubAlerts(): MdastPluginDefinition;