@kensio/colophon 2.1.0 → 2.3.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 (357) hide show
  1. package/README.md +608 -34
  2. package/dist/cli/args.d.ts +14 -0
  3. package/dist/cli/args.d.ts.map +1 -0
  4. package/dist/cli/args.js +67 -0
  5. package/dist/cli/args.js.map +1 -0
  6. package/dist/cli/config.d.ts +12 -0
  7. package/dist/cli/config.d.ts.map +1 -0
  8. package/dist/cli/config.js +43 -0
  9. package/dist/cli/config.js.map +1 -0
  10. package/dist/cli/index.d.ts +3 -0
  11. package/dist/cli/index.d.ts.map +1 -0
  12. package/dist/cli/index.js +35 -0
  13. package/dist/cli/index.js.map +1 -0
  14. package/dist/cli.js +34 -6
  15. package/dist/cli.js.map +1 -1
  16. package/dist/config/defaults.d.ts +64 -0
  17. package/dist/config/defaults.d.ts.map +1 -0
  18. package/dist/config/defaults.js +64 -0
  19. package/dist/config/defaults.js.map +1 -0
  20. package/dist/config/index.d.ts +22 -0
  21. package/dist/config/index.d.ts.map +1 -0
  22. package/dist/config/index.js +52 -0
  23. package/dist/config/index.js.map +1 -0
  24. package/dist/config/resolve.d.ts +24 -0
  25. package/dist/config/resolve.d.ts.map +1 -0
  26. package/dist/config/resolve.js +66 -0
  27. package/dist/config/resolve.js.map +1 -0
  28. package/dist/config/size.d.ts +20 -0
  29. package/dist/config/size.d.ts.map +1 -0
  30. package/dist/config/size.js +46 -0
  31. package/dist/config/size.js.map +1 -0
  32. package/dist/config.d.ts +33 -2
  33. package/dist/config.d.ts.map +1 -1
  34. package/dist/config.js +94 -4
  35. package/dist/config.js.map +1 -1
  36. package/dist/content/index.d.ts +5 -51
  37. package/dist/content/index.d.ts.map +1 -1
  38. package/dist/content/index.js +3 -115
  39. package/dist/content/index.js.map +1 -1
  40. package/dist/content/props.d.ts +15 -0
  41. package/dist/content/props.d.ts.map +1 -0
  42. package/dist/content/props.js +71 -0
  43. package/dist/content/props.js.map +1 -0
  44. package/dist/content/slug.d.ts +23 -0
  45. package/dist/content/slug.d.ts.map +1 -0
  46. package/dist/content/slug.js +52 -0
  47. package/dist/content/slug.js.map +1 -0
  48. package/dist/content/walk.d.ts +17 -0
  49. package/dist/content/walk.d.ts.map +1 -0
  50. package/dist/content/walk.js +57 -0
  51. package/dist/content/walk.js.map +1 -0
  52. package/dist/fonts/index.d.ts +10 -0
  53. package/dist/fonts/index.d.ts.map +1 -0
  54. package/dist/fonts/index.js +11 -0
  55. package/dist/fonts/index.js.map +1 -0
  56. package/dist/fonts/materialise.d.ts +7 -0
  57. package/dist/fonts/materialise.d.ts.map +1 -0
  58. package/dist/fonts/materialise.js +47 -0
  59. package/dist/fonts/materialise.js.map +1 -0
  60. package/dist/fonts/resolve.d.ts +7 -0
  61. package/dist/fonts/resolve.d.ts.map +1 -0
  62. package/dist/fonts/resolve.js +50 -0
  63. package/dist/fonts/resolve.js.map +1 -0
  64. package/dist/fonts.d.ts +18 -0
  65. package/dist/fonts.d.ts.map +1 -0
  66. package/dist/fonts.js +102 -0
  67. package/dist/fonts.js.map +1 -0
  68. package/dist/generate/extra.d.ts +16 -0
  69. package/dist/generate/extra.d.ts.map +1 -0
  70. package/dist/generate/extra.js +60 -0
  71. package/dist/generate/extra.js.map +1 -0
  72. package/dist/generate/index.d.ts +19 -0
  73. package/dist/generate/index.d.ts.map +1 -0
  74. package/dist/generate/index.js +46 -0
  75. package/dist/generate/index.js.map +1 -0
  76. package/dist/generate/job.d.ts +35 -0
  77. package/dist/generate/job.d.ts.map +1 -0
  78. package/dist/generate/job.js +2 -0
  79. package/dist/generate/job.js.map +1 -0
  80. package/dist/generate/options.d.ts +56 -0
  81. package/dist/generate/options.d.ts.map +1 -0
  82. package/dist/generate/options.js +17 -0
  83. package/dist/generate/options.js.map +1 -0
  84. package/dist/generate/output-path.d.ts +12 -0
  85. package/dist/generate/output-path.d.ts.map +1 -0
  86. package/dist/generate/output-path.js +18 -0
  87. package/dist/generate/output-path.js.map +1 -0
  88. package/dist/generate/outputs.d.ts +28 -0
  89. package/dist/generate/outputs.d.ts.map +1 -0
  90. package/dist/generate/outputs.js +71 -0
  91. package/dist/generate/outputs.js.map +1 -0
  92. package/dist/generate/plan.d.ts +21 -0
  93. package/dist/generate/plan.d.ts.map +1 -0
  94. package/dist/generate/plan.js +72 -0
  95. package/dist/generate/plan.js.map +1 -0
  96. package/dist/generate/render-image.d.ts +11 -0
  97. package/dist/generate/render-image.d.ts.map +1 -0
  98. package/dist/generate/render-image.js +27 -0
  99. package/dist/generate/render-image.js.map +1 -0
  100. package/dist/generate.d.ts +27 -6
  101. package/dist/generate.d.ts.map +1 -1
  102. package/dist/generate.js +77 -15
  103. package/dist/generate.js.map +1 -1
  104. package/dist/highlight/color.d.ts +9 -0
  105. package/dist/highlight/color.d.ts.map +1 -0
  106. package/dist/highlight/color.js +15 -0
  107. package/dist/highlight/color.js.map +1 -0
  108. package/dist/highlight/grid.d.ts +14 -0
  109. package/dist/highlight/grid.d.ts.map +1 -0
  110. package/dist/highlight/grid.js +36 -0
  111. package/dist/highlight/grid.js.map +1 -0
  112. package/dist/highlight/index.d.ts +12 -0
  113. package/dist/highlight/index.d.ts.map +1 -0
  114. package/dist/highlight/index.js +31 -0
  115. package/dist/highlight/index.js.map +1 -0
  116. package/dist/highlight/language.d.ts +14 -0
  117. package/dist/highlight/language.d.ts.map +1 -0
  118. package/dist/highlight/language.js +42 -0
  119. package/dist/highlight/language.js.map +1 -0
  120. package/dist/highlight/normalise.d.ts +17 -0
  121. package/dist/highlight/normalise.d.ts.map +1 -0
  122. package/dist/highlight/normalise.js +37 -0
  123. package/dist/highlight/normalise.js.map +1 -0
  124. package/dist/highlight/types.d.ts +40 -0
  125. package/dist/highlight/types.d.ts.map +1 -0
  126. package/dist/highlight/types.js +2 -0
  127. package/dist/highlight/types.js.map +1 -0
  128. package/dist/highlight.d.ts +10 -0
  129. package/dist/highlight.d.ts.map +1 -1
  130. package/dist/highlight.js +25 -2
  131. package/dist/highlight.js.map +1 -1
  132. package/dist/index.d.ts +15 -9
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +9 -5
  135. package/dist/index.js.map +1 -1
  136. package/dist/manifest/build.d.ts +14 -0
  137. package/dist/manifest/build.d.ts.map +1 -0
  138. package/dist/manifest/build.js +43 -0
  139. package/dist/manifest/build.js.map +1 -0
  140. package/dist/manifest/index.d.ts +27 -0
  141. package/dist/manifest/index.d.ts.map +1 -0
  142. package/dist/manifest/index.js +31 -0
  143. package/dist/manifest/index.js.map +1 -0
  144. package/dist/manifest/order.d.ts +12 -0
  145. package/dist/manifest/order.d.ts.map +1 -0
  146. package/dist/manifest/order.js +17 -0
  147. package/dist/manifest/order.js.map +1 -0
  148. package/dist/manifest/page.d.ts +24 -0
  149. package/dist/manifest/page.d.ts.map +1 -0
  150. package/dist/manifest/page.js +55 -0
  151. package/dist/manifest/page.js.map +1 -0
  152. package/dist/meta/html.d.ts +14 -0
  153. package/dist/meta/html.d.ts.map +1 -0
  154. package/dist/meta/html.js +24 -0
  155. package/dist/meta/html.js.map +1 -0
  156. package/dist/meta/index.d.ts +11 -0
  157. package/dist/meta/index.d.ts.map +1 -0
  158. package/dist/meta/index.js +11 -0
  159. package/dist/meta/index.js.map +1 -0
  160. package/dist/meta/tags.d.ts +21 -0
  161. package/dist/meta/tags.d.ts.map +1 -0
  162. package/dist/meta/tags.js +72 -0
  163. package/dist/meta/tags.js.map +1 -0
  164. package/dist/meta/url.d.ts +15 -0
  165. package/dist/meta/url.d.ts.map +1 -0
  166. package/dist/meta/url.js +34 -0
  167. package/dist/meta/url.js.map +1 -0
  168. package/dist/placement/check.d.ts +16 -0
  169. package/dist/placement/check.d.ts.map +1 -0
  170. package/dist/placement/check.js +40 -0
  171. package/dist/placement/check.js.map +1 -0
  172. package/dist/placement/index.d.ts +29 -0
  173. package/dist/placement/index.d.ts.map +1 -0
  174. package/dist/placement/index.js +61 -0
  175. package/dist/placement/index.js.map +1 -0
  176. package/dist/placement/relative.d.ts +31 -0
  177. package/dist/placement/relative.d.ts.map +1 -0
  178. package/dist/placement/relative.js +53 -0
  179. package/dist/placement/relative.js.map +1 -0
  180. package/dist/pool.d.ts +18 -0
  181. package/dist/pool.d.ts.map +1 -0
  182. package/dist/pool.js +56 -0
  183. package/dist/pool.js.map +1 -0
  184. package/dist/render/index.d.ts +10 -0
  185. package/dist/render/index.d.ts.map +1 -0
  186. package/dist/render/index.js +27 -0
  187. package/dist/render/index.js.map +1 -0
  188. package/dist/render/png.d.ts +10 -0
  189. package/dist/render/png.d.ts.map +1 -0
  190. package/dist/render/png.js +30 -0
  191. package/dist/render/png.js.map +1 -0
  192. package/dist/render/svg.d.ts +10 -0
  193. package/dist/render/svg.d.ts.map +1 -0
  194. package/dist/render/svg.js +20 -0
  195. package/dist/render/svg.js.map +1 -0
  196. package/dist/render/template.d.ts +9 -0
  197. package/dist/render/template.d.ts.map +1 -0
  198. package/dist/render/template.js +17 -0
  199. package/dist/render/template.js.map +1 -0
  200. package/dist/render.d.ts +6 -2
  201. package/dist/render.d.ts.map +1 -1
  202. package/dist/render.js +31 -10
  203. package/dist/render.js.map +1 -1
  204. package/dist/stamp/chunk.d.ts +16 -0
  205. package/dist/stamp/chunk.d.ts.map +1 -0
  206. package/dist/stamp/chunk.js +46 -0
  207. package/dist/stamp/chunk.js.map +1 -0
  208. package/dist/stamp/config-digest.d.ts +11 -0
  209. package/dist/stamp/config-digest.d.ts.map +1 -0
  210. package/dist/stamp/config-digest.js +43 -0
  211. package/dist/stamp/config-digest.js.map +1 -0
  212. package/dist/stamp/digest.d.ts +8 -0
  213. package/dist/stamp/digest.d.ts.map +1 -0
  214. package/dist/stamp/digest.js +20 -0
  215. package/dist/stamp/digest.js.map +1 -0
  216. package/dist/stamp/index.d.ts +20 -0
  217. package/dist/stamp/index.d.ts.map +1 -0
  218. package/dist/stamp/index.js +40 -0
  219. package/dist/stamp/index.js.map +1 -0
  220. package/dist/stamp/read.d.ts +7 -0
  221. package/dist/stamp/read.d.ts.map +1 -0
  222. package/dist/stamp/read.js +62 -0
  223. package/dist/stamp/read.js.map +1 -0
  224. package/dist/stamp.d.ts +29 -0
  225. package/dist/stamp.d.ts.map +1 -0
  226. package/dist/stamp.js +198 -0
  227. package/dist/stamp.js.map +1 -0
  228. package/dist/templates/banner/badge.d.ts +7 -0
  229. package/dist/templates/banner/badge.d.ts.map +1 -0
  230. package/dist/templates/banner/badge.js +24 -0
  231. package/dist/templates/banner/badge.js.map +1 -0
  232. package/dist/templates/banner/index.d.ts +9 -0
  233. package/dist/templates/banner/index.d.ts.map +1 -0
  234. package/dist/templates/banner/index.js +66 -0
  235. package/dist/templates/banner/index.js.map +1 -0
  236. package/dist/templates/banner/lines.d.ts +27 -0
  237. package/dist/templates/banner/lines.d.ts.map +1 -0
  238. package/dist/templates/banner/lines.js +46 -0
  239. package/dist/templates/banner/lines.js.map +1 -0
  240. package/dist/templates/card/index.d.ts +7 -0
  241. package/dist/templates/card/index.d.ts.map +1 -0
  242. package/dist/templates/card/index.js +43 -0
  243. package/dist/templates/card/index.js.map +1 -0
  244. package/dist/templates/card/lines.d.ts +17 -0
  245. package/dist/templates/card/lines.d.ts.map +1 -0
  246. package/dist/templates/card/lines.js +32 -0
  247. package/dist/templates/card/lines.js.map +1 -0
  248. package/dist/templates/code/chrome.d.ts +9 -0
  249. package/dist/templates/code/chrome.d.ts.map +1 -0
  250. package/dist/templates/code/chrome.js +32 -0
  251. package/dist/templates/code/chrome.js.map +1 -0
  252. package/dist/templates/code/clip.d.ts +18 -0
  253. package/dist/templates/code/clip.d.ts.map +1 -0
  254. package/dist/templates/code/clip.js +44 -0
  255. package/dist/templates/code/clip.js.map +1 -0
  256. package/dist/templates/code/ellipsis.d.ts +3 -0
  257. package/dist/templates/code/ellipsis.d.ts.map +1 -0
  258. package/dist/templates/code/ellipsis.js +3 -0
  259. package/dist/templates/code/ellipsis.js.map +1 -0
  260. package/dist/templates/code/fit.d.ts +27 -0
  261. package/dist/templates/code/fit.d.ts.map +1 -0
  262. package/dist/templates/code/fit.js +59 -0
  263. package/dist/templates/code/fit.js.map +1 -0
  264. package/dist/templates/code/index.d.ts +12 -0
  265. package/dist/templates/code/index.d.ts.map +1 -0
  266. package/dist/templates/code/index.js +64 -0
  267. package/dist/templates/code/index.js.map +1 -0
  268. package/dist/templates/code/layout.d.ts +21 -0
  269. package/dist/templates/code/layout.d.ts.map +1 -0
  270. package/dist/templates/code/layout.js +21 -0
  271. package/dist/templates/code/layout.js.map +1 -0
  272. package/dist/templates/code/panel.d.ts +17 -0
  273. package/dist/templates/code/panel.d.ts.map +1 -0
  274. package/dist/templates/code/panel.js +20 -0
  275. package/dist/templates/code/panel.js.map +1 -0
  276. package/dist/templates/code/plate.d.ts +15 -0
  277. package/dist/templates/code/plate.d.ts.map +1 -0
  278. package/dist/templates/code/plate.js +32 -0
  279. package/dist/templates/code/plate.js.map +1 -0
  280. package/dist/templates/code/spans.d.ts +19 -0
  281. package/dist/templates/code/spans.d.ts.map +1 -0
  282. package/dist/templates/code/spans.js +36 -0
  283. package/dist/templates/code/spans.js.map +1 -0
  284. package/dist/templates/code/warn.d.ts +11 -0
  285. package/dist/templates/code/warn.d.ts.map +1 -0
  286. package/dist/templates/code/warn.js +24 -0
  287. package/dist/templates/code/warn.js.map +1 -0
  288. package/dist/templates/code.d.ts.map +1 -1
  289. package/dist/templates/code.js +101 -29
  290. package/dist/templates/code.js.map +1 -1
  291. package/dist/templates/footer.d.ts +21 -0
  292. package/dist/templates/footer.d.ts.map +1 -0
  293. package/dist/templates/footer.js +25 -0
  294. package/dist/templates/footer.js.map +1 -0
  295. package/dist/templates/index.d.ts +3 -3
  296. package/dist/templates/index.d.ts.map +1 -1
  297. package/dist/templates/index.js +6 -6
  298. package/dist/templates/index.js.map +1 -1
  299. package/dist/text/element.d.ts +18 -0
  300. package/dist/text/element.d.ts.map +1 -0
  301. package/dist/text/element.js +19 -0
  302. package/dist/text/element.js.map +1 -0
  303. package/dist/text/escape.d.ts +5 -0
  304. package/dist/text/escape.d.ts.map +1 -0
  305. package/dist/text/escape.js +12 -0
  306. package/dist/text/escape.js.map +1 -0
  307. package/dist/text/index.d.ts +7 -0
  308. package/dist/text/index.d.ts.map +1 -0
  309. package/dist/text/index.js +5 -0
  310. package/dist/text/index.js.map +1 -0
  311. package/dist/text/stack.d.ts +24 -0
  312. package/dist/text/stack.d.ts.map +1 -0
  313. package/dist/text/stack.js +18 -0
  314. package/dist/text/stack.js.map +1 -0
  315. package/dist/text/wrap.d.ts +12 -0
  316. package/dist/text/wrap.d.ts.map +1 -0
  317. package/dist/text/wrap.js +33 -0
  318. package/dist/text/wrap.js.map +1 -0
  319. package/dist/types.d.ts +345 -6
  320. package/dist/types.d.ts.map +1 -1
  321. package/dist/validate/check.d.ts +13 -0
  322. package/dist/validate/check.d.ts.map +1 -0
  323. package/dist/validate/check.js +34 -0
  324. package/dist/validate/check.js.map +1 -0
  325. package/dist/validate/index.d.ts +15 -0
  326. package/dist/validate/index.d.ts.map +1 -0
  327. package/dist/validate/index.js +41 -0
  328. package/dist/validate/index.js.map +1 -0
  329. package/dist/validate/keys.d.ts +58 -0
  330. package/dist/validate/keys.d.ts.map +1 -0
  331. package/dist/validate/keys.js +166 -0
  332. package/dist/validate/keys.js.map +1 -0
  333. package/dist/validate/overrides.d.ts +5 -0
  334. package/dist/validate/overrides.d.ts.map +1 -0
  335. package/dist/validate/overrides.js +43 -0
  336. package/dist/validate/overrides.js.map +1 -0
  337. package/dist/validate/placement.d.ts +10 -0
  338. package/dist/validate/placement.d.ts.map +1 -0
  339. package/dist/validate/placement.js +38 -0
  340. package/dist/validate/placement.js.map +1 -0
  341. package/dist/validate/sizes.d.ts +9 -0
  342. package/dist/validate/sizes.d.ts.map +1 -0
  343. package/dist/validate/sizes.js +27 -0
  344. package/dist/validate/sizes.js.map +1 -0
  345. package/dist/validate/suggest.d.ts +10 -0
  346. package/dist/validate/suggest.d.ts.map +1 -0
  347. package/dist/validate/suggest.js +55 -0
  348. package/dist/validate/suggest.js.map +1 -0
  349. package/dist/validate/values.d.ts +21 -0
  350. package/dist/validate/values.d.ts.map +1 -0
  351. package/dist/validate/values.js +57 -0
  352. package/dist/validate/values.js.map +1 -0
  353. package/dist/validate.d.ts +15 -0
  354. package/dist/validate.d.ts.map +1 -0
  355. package/dist/validate.js +300 -0
  356. package/dist/validate.js.map +1 -0
  357. package/package.json +14 -7
@@ -0,0 +1,166 @@
1
+ /**
2
+ * The keys of one config object, as a list to check incoming keys against.
3
+ *
4
+ * Taking a `Record<keyof T, true>` rather than a plain array of strings is
5
+ * what keeps the list honest: adding an option to `types.ts` without listing
6
+ * it here fails the build, which is much better than the new option quietly
7
+ * becoming an unknown one.
8
+ */
9
+ function knownKeys(shape) {
10
+ return Object.keys(shape);
11
+ }
12
+ /** Top-level config options. */
13
+ export const configKeys = knownKeys({
14
+ colors: true,
15
+ background: true,
16
+ fonts: true,
17
+ systemFonts: true,
18
+ fontFamily: true,
19
+ footer: true,
20
+ badge: true,
21
+ code: true,
22
+ onWarning: true,
23
+ sizes: true,
24
+ templates: true,
25
+ content: true,
26
+ placement: true,
27
+ manifest: true,
28
+ extra: true,
29
+ });
30
+ /** Keys of a placement that writes each image beside its post. */
31
+ export const besideContentKeys = knownKeys({
32
+ strategy: true,
33
+ urlBase: true,
34
+ hash: true,
35
+ });
36
+ /** Keys of a placement that gathers images into one directory. */
37
+ export const publicDirKeys = knownKeys({
38
+ strategy: true,
39
+ dir: true,
40
+ urlBase: true,
41
+ hash: true,
42
+ });
43
+ /** Keys of a placement that works both halves out for itself. */
44
+ export const customPlacementKeys = knownKeys({
45
+ strategy: true,
46
+ path: true,
47
+ url: true,
48
+ });
49
+ /**
50
+ * The placement strategies, for the same reason as {@link backgroundTypes}: a
51
+ * mistyped one would otherwise be reported as an unknown key on whichever
52
+ * variant it was guessed to be.
53
+ *
54
+ * Two of the names are hyphenated because they are values a user writes in a
55
+ * config, not identifiers — the casing rule is about the latter. Keeping them
56
+ * as keys is what keeps the list exhaustive, which is the whole point of it.
57
+ */
58
+ export const placementStrategies = knownKeys({
59
+ // eslint-disable-next-line @typescript-eslint/naming-convention
60
+ "beside-content": true,
61
+ // eslint-disable-next-line @typescript-eslint/naming-convention
62
+ "public-dir": true,
63
+ custom: true,
64
+ });
65
+ /** One ad hoc image declared in config. */
66
+ export const extraKeys = knownKeys({
67
+ props: true,
68
+ output: true,
69
+ size: true,
70
+ });
71
+ /** Options for reading a project's own frontmatter. */
72
+ export const contentKeys = knownKeys({
73
+ propsKey: true,
74
+ templateField: true,
75
+ defaultTemplate: true,
76
+ props: true,
77
+ slugField: true,
78
+ slugStrategy: true,
79
+ extensions: true,
80
+ });
81
+ /** Brand palette shades. */
82
+ export const colorKeys = knownKeys({
83
+ brand: true,
84
+ brandDark: true,
85
+ brandWarm: true,
86
+ foreground: true,
87
+ });
88
+ /** Corner-badge options. */
89
+ export const badgeKeys = knownKeys({
90
+ text: true,
91
+ color: true,
92
+ background: true,
93
+ });
94
+ /** `code` template styling options. */
95
+ export const codeKeys = knownKeys({
96
+ theme: true,
97
+ fontFamily: true,
98
+ charWidthRatio: true,
99
+ lineHeight: true,
100
+ tabSize: true,
101
+ cornerScale: true,
102
+ maxFontScale: true,
103
+ minFontScale: true,
104
+ });
105
+ /** One output size, including the overrides it may carry. */
106
+ export const sizeKeys = knownKeys({
107
+ name: true,
108
+ width: true,
109
+ height: true,
110
+ colors: true,
111
+ background: true,
112
+ fontFamily: true,
113
+ footer: true,
114
+ badge: true,
115
+ code: true,
116
+ });
117
+ /**
118
+ * Both font variants at once. Which of `path` and `data` a font may carry is
119
+ * `fonts/resolve.ts`'s ruling to make, and it has a better message for it than
120
+ * a list of keys could.
121
+ */
122
+ export const fontKeys = [
123
+ ...new Set([
124
+ ...knownKeys({ family: true, path: true }),
125
+ ...knownKeys({ family: true, data: true }),
126
+ ]),
127
+ ];
128
+ /** Keys of a solid background. */
129
+ export const solidBackgroundKeys = knownKeys({
130
+ type: true,
131
+ color: true,
132
+ });
133
+ /** Keys of a gradient background. */
134
+ export const gradientBackgroundKeys = knownKeys({
135
+ type: true,
136
+ stops: true,
137
+ from: true,
138
+ to: true,
139
+ });
140
+ /** Keys of one gradient stop. */
141
+ export const gradientStopKeys = knownKeys({
142
+ offset: true,
143
+ color: true,
144
+ });
145
+ /** Keys of a gradient's `from` and `to` points. */
146
+ export const gradientPointKeys = knownKeys({ x: true, y: true });
147
+ /**
148
+ * The background variants, as values to check a declared `type` against. Typed
149
+ * against the union for the same reason the key lists are: a variant added to
150
+ * `Background` and not listed here would otherwise be reported as an unknown
151
+ * type, rejecting a config that is perfectly valid.
152
+ */
153
+ export const backgroundTypes = knownKeys({
154
+ solid: true,
155
+ gradient: true,
156
+ });
157
+ /**
158
+ * The slug strategies, for the same reason as {@link backgroundTypes}:
159
+ * `slugFromPath` treats anything that is not `basename` as a route, so a
160
+ * mistyped `rout` would quietly re-slug a whole site rather than complain.
161
+ */
162
+ export const slugStrategies = knownKeys({
163
+ basename: true,
164
+ route: true,
165
+ });
166
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/validate/keys.ts"],"names":[],"mappings":"AAeA;;;;;;;GAOG;AACH,SAAS,SAAS,CAAI,KAA4B;IAChD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAiBD,gCAAgC;AAChC,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAiB;IAClD,MAAM,EAAE,IAAI;IACZ,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,IAAI;IACX,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,IAAI;CACZ,CAAC,CAAC;AAEH,kEAAkE;AAClE,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAkB;IAC1D,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;CACX,CAAC,CAAC;AAEH,kEAAkE;AAClE,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAqB;IACzD,QAAQ,EAAE,IAAI;IACd,GAAG,EAAE,IAAI;IACT,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;CACX,CAAC,CAAC;AAEH,iEAAiE;AACjE,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAkB;IAC5D,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,IAAI;CACV,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAE1C;IACA,gEAAgE;IAChE,gBAAgB,EAAE,IAAI;IACtB,gEAAgE;IAChE,YAAY,EAAE,IAAI;IAClB,MAAM,EAAE,IAAI;CACb,CAAC,CAAC;AAEH,2CAA2C;AAC3C,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAa;IAC7C,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;CACX,CAAC,CAAC;AAEH,uDAAuD;AACvD,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAiB;IACnD,QAAQ,EAAE,IAAI;IACd,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE,IAAI;IACrB,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,IAAI;IAClB,UAAU,EAAE,IAAI;CACjB,CAAC,CAAC;AAEH,4BAA4B;AAC5B,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAc;IAC9C,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,IAAI;CACjB,CAAC,CAAC;AAEH,4BAA4B;AAC5B,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAQ;IACxC,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,IAAI;CACjB,CAAC,CAAC;AAEH,uCAAuC;AACvC,MAAM,CAAC,MAAM,QAAQ,GAAG,SAAS,CAAY;IAC3C,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,IAAI;IAChB,cAAc,EAAE,IAAI;IACpB,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,IAAI;IACjB,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;CACnB,CAAC,CAAC;AAEH,6DAA6D;AAC7D,MAAM,CAAC,MAAM,QAAQ,GAAG,SAAS,CAAa;IAC5C,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;CACX,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,GAAG,IAAI,GAAG,CAAC;QACT,GAAG,SAAS,CAAa,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACtD,GAAG,SAAS,CAAa,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;KACvD,CAAC;CACH,CAAC;AAEF,kCAAkC;AAClC,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAkB;IAC5D,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;CACZ,CAAC,CAAC;AAEH,qCAAqC;AACrC,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAqB;IAClE,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,EAAE,EAAE,IAAI;CACT,CAAC,CAAC;AAEH,iCAAiC;AACjC,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAe;IACtD,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;CACZ,CAAC,CAAC;AAEH,mDAAmD;AACnD,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAEhF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAsC;IAC5E,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAgC;IACrE,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,IAAI;CACZ,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** Check each output size, and the overrides it carries. */
2
+ export declare function checkSizes(sizes: unknown, problems: string[]): void;
3
+ /** Check each extra image, and the size it renders at. */
4
+ export declare function checkExtras(extras: unknown, problems: string[]): void;
5
+ //# sourceMappingURL=overrides.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../../src/validate/overrides.ts"],"names":[],"mappings":"AAwBA,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAQnE;AAED,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAarE"}
@@ -0,0 +1,43 @@
1
+ import { checkKeys, isList, isRecord } from "./check.js";
2
+ import { badgeKeys, codeKeys, colorKeys, extraKeys, sizeKeys } from "./keys.js";
3
+ import { checkBackground } from "./values.js";
4
+ /**
5
+ * Check one output size, and the overrides it carries.
6
+ *
7
+ * A size is the one place the same option names appear twice over, so the paths
8
+ * matter more here than anywhere else: `sizes[1].code.minFontScal` has to say
9
+ * which size it is talking about to be worth reading at all.
10
+ */
11
+ function checkSize(size, path, problems) {
12
+ checkKeys(size, path, sizeKeys, problems);
13
+ if (!isRecord(size)) {
14
+ return;
15
+ }
16
+ checkKeys(size["colors"], `${path}.colors`, colorKeys, problems);
17
+ checkKeys(size["badge"], `${path}.badge`, badgeKeys, problems);
18
+ checkKeys(size["code"], `${path}.code`, codeKeys, problems);
19
+ checkBackground(size["background"], `${path}.background`, problems);
20
+ }
21
+ /** Check each output size, and the overrides it carries. */
22
+ export function checkSizes(sizes, problems) {
23
+ if (!isList(sizes)) {
24
+ return;
25
+ }
26
+ for (const [index, size] of sizes.entries()) {
27
+ checkSize(size, `sizes[${String(index)}]`, problems);
28
+ }
29
+ }
30
+ /** Check each extra image, and the size it renders at. */
31
+ export function checkExtras(extras, problems) {
32
+ if (!isList(extras)) {
33
+ return;
34
+ }
35
+ for (const [index, extra] of extras.entries()) {
36
+ const path = `extra[${String(index)}]`;
37
+ checkKeys(extra, path, extraKeys, problems);
38
+ if (isRecord(extra)) {
39
+ checkSize(extra["size"], `${path}.size`, problems);
40
+ }
41
+ }
42
+ }
43
+ //# sourceMappingURL=overrides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/validate/overrides.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,IAAa,EAAE,IAAY,EAAE,QAAkB;IAChE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IAED,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC/D,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC5D,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,aAAa,EAAE,QAAQ,CAAC,CAAC;AACtE,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,QAAkB;IAC3D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,WAAW,CAAC,MAAe,EAAE,QAAkB;IAC7D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,SAAS,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QACvC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE5C,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Check a placement against the keys of whichever strategy it declares.
3
+ *
4
+ * The strategy is required, unlike a background's `type`: a background with
5
+ * none still looks like the gradient it is rendered as, where a placement with
6
+ * none is a `dir` and a `urlBase` read by nobody and images written somewhere
7
+ * else entirely.
8
+ */
9
+ export declare function checkPlacement(placement: unknown, problems: string[]): void;
10
+ //# sourceMappingURL=placement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placement.d.ts","sourceRoot":"","sources":["../../src/validate/placement.ts"],"names":[],"mappings":"AAsBA;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CA6B3E"}
@@ -0,0 +1,38 @@
1
+ import { checkKeys, isRecord } from "./check.js";
2
+ import { besideContentKeys, customPlacementKeys, placementStrategies, publicDirKeys, } from "./keys.js";
3
+ import { describeUnknownValue } from "./values.js";
4
+ /** The keys one placement strategy accepts, or nothing if it names none. */
5
+ function placementKeys(strategy) {
6
+ if (strategy === "beside-content") {
7
+ return besideContentKeys;
8
+ }
9
+ if (strategy === "public-dir") {
10
+ return publicDirKeys;
11
+ }
12
+ return strategy === "custom" ? customPlacementKeys : undefined;
13
+ }
14
+ /**
15
+ * Check a placement against the keys of whichever strategy it declares.
16
+ *
17
+ * The strategy is required, unlike a background's `type`: a background with
18
+ * none still looks like the gradient it is rendered as, where a placement with
19
+ * none is a `dir` and a `urlBase` read by nobody and images written somewhere
20
+ * else entirely.
21
+ */
22
+ export function checkPlacement(placement, problems) {
23
+ if (!isRecord(placement)) {
24
+ return;
25
+ }
26
+ const strategy = placement["strategy"];
27
+ if (typeof strategy !== "string") {
28
+ problems.push(`placement needs a "strategy": ${placementStrategies.join(", ")}.`);
29
+ return;
30
+ }
31
+ const keys = placementKeys(strategy);
32
+ if (keys === undefined) {
33
+ problems.push(describeUnknownValue("placement strategy", "strategies", strategy, placementStrategies));
34
+ return;
35
+ }
36
+ checkKeys(placement, "placement", keys, problems);
37
+ }
38
+ //# sourceMappingURL=placement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placement.js","sourceRoot":"","sources":["../../src/validate/placement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,4EAA4E;AAC5E,SAAS,aAAa,CAAC,QAAgB;IACrC,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;QAClC,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,SAAkB,EAAE,QAAkB;IACnE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IAEvC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,QAAQ,CAAC,IAAI,CACX,iCAAiC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACnE,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAErC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CACX,oBAAoB,CAClB,oBAAoB,EACpB,YAAY,EACZ,QAAQ,EACR,mBAAmB,CACpB,CACF,CAAC;QACF,OAAO;IACT,CAAC;IAED,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Check each output size, and the overrides it carries.
3
+ *
4
+ * A size is the one place the same option names appear twice over, so the paths
5
+ * matter more here than anywhere else: `sizes[1].code.minFontScal` has to say
6
+ * which size it is talking about to be worth reading at all.
7
+ */
8
+ export declare function checkSizes(sizes: unknown, problems: string[]): void;
9
+ //# sourceMappingURL=sizes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sizes.d.ts","sourceRoot":"","sources":["../../src/validate/sizes.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAkBnE"}
@@ -0,0 +1,27 @@
1
+ import { checkKeys, isList, isRecord } from "./check.js";
2
+ import { badgeKeys, codeKeys, colorKeys, sizeKeys } from "./keys.js";
3
+ import { checkBackground } from "./values.js";
4
+ /**
5
+ * Check each output size, and the overrides it carries.
6
+ *
7
+ * A size is the one place the same option names appear twice over, so the paths
8
+ * matter more here than anywhere else: `sizes[1].code.minFontScal` has to say
9
+ * which size it is talking about to be worth reading at all.
10
+ */
11
+ export function checkSizes(sizes, problems) {
12
+ if (!isList(sizes)) {
13
+ return;
14
+ }
15
+ for (const [index, size] of sizes.entries()) {
16
+ const path = `sizes[${String(index)}]`;
17
+ checkKeys(size, path, sizeKeys, problems);
18
+ if (!isRecord(size)) {
19
+ continue;
20
+ }
21
+ checkKeys(size["colors"], `${path}.colors`, colorKeys, problems);
22
+ checkKeys(size["badge"], `${path}.badge`, badgeKeys, problems);
23
+ checkKeys(size["code"], `${path}.code`, codeKeys, problems);
24
+ checkBackground(size["background"], `${path}.background`, problems);
25
+ }
26
+ }
27
+ //# sourceMappingURL=sizes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sizes.js","sourceRoot":"","sources":["../../src/validate/sizes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,QAAkB;IAC3D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,SAAS,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QACvC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,SAAS;QACX,CAAC;QAED,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACjE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC/D,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5D,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,aAAa,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The known name a mistyped one was most likely meant to be, or `undefined`
3
+ * when nothing is close enough. A confident suggestion of something unrelated
4
+ * is worse than none, so the tolerance stays under the length of the name:
5
+ * a slip of a key or two earns a suggestion, a different word does not.
6
+ */
7
+ export declare function nearestName(name: string, known: readonly string[]): string | undefined;
8
+ /** Report one unknown option, naming the likeliest thing it was meant to be. */
9
+ export declare function describeUnknownOption(path: string, key: string, known: readonly string[]): string;
10
+ //# sourceMappingURL=suggest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/validate/suggest.ts"],"names":[],"mappings":"AAsCA;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,MAAM,GAAG,SAAS,CAmBpB;AAED,gFAAgF;AAChF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,MAAM,CAQR"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Options that have been renamed, keyed by where the old name turns up.
3
+ * Edit distance cannot connect a rename that changed the word — `dimensions`
4
+ * became `sizes` — and a config carried over from an older version is exactly
5
+ * where a bare "unknown option" helps least.
6
+ */
7
+ const renamedOptions = new Map([["dimensions", "sizes"]]);
8
+ /**
9
+ * Levenshtein distance between two strings, used to work out which option a
10
+ * typo was aiming at. Both strings are option names and the lists are a
11
+ * handful of entries long, so the plain two-row dynamic program is ample.
12
+ */
13
+ function editDistance(a, b) {
14
+ let previous = Array.from({ length: b.length + 1 }, (_, index) => index);
15
+ for (let row = 1; row <= a.length; row += 1) {
16
+ const current = [row];
17
+ for (let column = 1; column <= b.length; column += 1) {
18
+ const cost = a[row - 1] === b[column - 1] ? 0 : 1;
19
+ // Every index here is within the row by construction; the fallbacks are
20
+ // there for `noUncheckedIndexedAccess` rather than for any real case.
21
+ current.push(Math.min((previous[column - 1] ?? 0) + cost, (previous[column] ?? 0) + 1, (current[column - 1] ?? 0) + 1));
22
+ }
23
+ previous = current;
24
+ }
25
+ return previous[b.length] ?? 0;
26
+ }
27
+ /**
28
+ * The known name a mistyped one was most likely meant to be, or `undefined`
29
+ * when nothing is close enough. A confident suggestion of something unrelated
30
+ * is worse than none, so the tolerance stays under the length of the name:
31
+ * a slip of a key or two earns a suggestion, a different word does not.
32
+ */
33
+ export function nearestName(name, known) {
34
+ const tolerance = Math.min(name.length - 1, Math.max(2, Math.ceil(name.length / 4)));
35
+ let nearest;
36
+ let shortest = Infinity;
37
+ for (const candidate of known) {
38
+ // Case-insensitive: `tabsize` for `tabSize` is the same slip as a typo.
39
+ const distance = editDistance(name.toLowerCase(), candidate.toLowerCase());
40
+ if (distance < shortest) {
41
+ nearest = candidate;
42
+ shortest = distance;
43
+ }
44
+ }
45
+ return shortest <= tolerance ? nearest : undefined;
46
+ }
47
+ /** Report one unknown option, naming the likeliest thing it was meant to be. */
48
+ export function describeUnknownOption(path, key, known) {
49
+ const suggestion = renamedOptions.get(path) ?? nearestName(key, known);
50
+ if (suggestion !== undefined) {
51
+ return `Unknown option "${path}". Did you mean "${suggestion}"?`;
52
+ }
53
+ return `Unknown option "${path}". Valid options here: ${known.join(", ")}.`;
54
+ }
55
+ //# sourceMappingURL=suggest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/validate/suggest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAiB,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAE1E;;;;GAIG;AACH,SAAS,YAAY,CAAC,CAAS,EAAE,CAAS;IACxC,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAEzE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAEtB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,wEAAwE;YACxE,sEAAsE;YACtE,OAAO,CAAC,IAAI,CACV,IAAI,CAAC,GAAG,CACN,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAClC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAC3B,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAC/B,CACF,CAAC;QACJ,CAAC;QAED,QAAQ,GAAG,OAAO,CAAC;IACrB,CAAC;IAED,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,KAAwB;IAExB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,IAAI,CAAC,MAAM,GAAG,CAAC,EACf,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CACxC,CAAC;IACF,IAAI,OAA2B,CAAC;IAChC,IAAI,QAAQ,GAAG,QAAQ,CAAC;IAExB,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,wEAAwE;QACxE,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QAE3E,IAAI,QAAQ,GAAG,QAAQ,EAAE,CAAC;YACxB,OAAO,GAAG,SAAS,CAAC;YACpB,QAAQ,GAAG,QAAQ,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,GAAW,EACX,KAAwB;IAExB,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAEvE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,mBAAmB,IAAI,oBAAoB,UAAU,IAAI,CAAC;IACnE,CAAC;IAED,OAAO,mBAAmB,IAAI,0BAA0B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Report a value that is not one of the names a field accepts. `noun` names
3
+ * the field, `plural` heads the list of what it does accept.
4
+ */
5
+ export declare function describeUnknownValue(noun: string, plural: string, value: string, known: readonly string[]): string;
6
+ /**
7
+ * Check a background against the keys of whichever variant it declares.
8
+ *
9
+ * A misspelt `type` is worth reporting on its own: `backgroundSvg` treats
10
+ * anything that is not `solid` as a gradient, so `gradiant` silently becomes
11
+ * one and then falls over on the stops it does not have. A background with no
12
+ * `type` at all is left alone — the type is what says which keys apply, and
13
+ * guessing would report the keys rather than the omission.
14
+ */
15
+ export declare function checkBackground(background: unknown, path: string, problems: string[]): void;
16
+ /**
17
+ * Check the slug strategy names a real one. Only a string can be a strategy;
18
+ * anything else is a shape the type checker already covers, as elsewhere here.
19
+ */
20
+ export declare function checkSlugStrategy(content: unknown, problems: string[]): void;
21
+ //# sourceMappingURL=values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/validate/values.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,MAAM,CAMR;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,OAAO,EACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAAE,GACjB,IAAI,CAyBN;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAmB5E"}
@@ -0,0 +1,57 @@
1
+ import { checkEach, checkKeys, isRecord } from "./check.js";
2
+ import { backgroundTypes, gradientBackgroundKeys, gradientPointKeys, gradientStopKeys, slugStrategies, solidBackgroundKeys, } from "./keys.js";
3
+ import { nearestName } from "./suggest.js";
4
+ /**
5
+ * Report a value that is not one of the names a field accepts. `noun` names
6
+ * the field, `plural` heads the list of what it does accept.
7
+ */
8
+ export function describeUnknownValue(noun, plural, value, known) {
9
+ const suggestion = nearestName(value, known);
10
+ return suggestion === undefined
11
+ ? `Unknown ${noun} "${value}". Valid ${plural}: ${known.join(", ")}.`
12
+ : `Unknown ${noun} "${value}". Did you mean "${suggestion}"?`;
13
+ }
14
+ /**
15
+ * Check a background against the keys of whichever variant it declares.
16
+ *
17
+ * A misspelt `type` is worth reporting on its own: `backgroundSvg` treats
18
+ * anything that is not `solid` as a gradient, so `gradiant` silently becomes
19
+ * one and then falls over on the stops it does not have. A background with no
20
+ * `type` at all is left alone — the type is what says which keys apply, and
21
+ * guessing would report the keys rather than the omission.
22
+ */
23
+ export function checkBackground(background, path, problems) {
24
+ if (!isRecord(background)) {
25
+ return;
26
+ }
27
+ const { type, stops, from, to } = background;
28
+ if (type === "solid") {
29
+ checkKeys(background, path, solidBackgroundKeys, problems);
30
+ return;
31
+ }
32
+ if (type === "gradient") {
33
+ checkKeys(background, path, gradientBackgroundKeys, problems);
34
+ checkEach(stops, `${path}.stops`, gradientStopKeys, problems);
35
+ checkKeys(from, `${path}.from`, gradientPointKeys, problems);
36
+ checkKeys(to, `${path}.to`, gradientPointKeys, problems);
37
+ return;
38
+ }
39
+ if (typeof type === "string") {
40
+ problems.push(describeUnknownValue("background type", "types", type, backgroundTypes));
41
+ }
42
+ }
43
+ /**
44
+ * Check the slug strategy names a real one. Only a string can be a strategy;
45
+ * anything else is a shape the type checker already covers, as elsewhere here.
46
+ */
47
+ export function checkSlugStrategy(content, problems) {
48
+ if (!isRecord(content)) {
49
+ return;
50
+ }
51
+ const strategy = content["slugStrategy"];
52
+ if (typeof strategy !== "string" || slugStrategies.includes(strategy)) {
53
+ return;
54
+ }
55
+ problems.push(describeUnknownValue("slug strategy", "strategies", strategy, slugStrategies));
56
+ }
57
+ //# sourceMappingURL=values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.js","sourceRoot":"","sources":["../../src/validate/values.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,MAAc,EACd,KAAa,EACb,KAAwB;IAExB,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAE7C,OAAO,UAAU,KAAK,SAAS;QAC7B,CAAC,CAAC,WAAW,IAAI,KAAK,KAAK,YAAY,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QACrE,CAAC,CAAC,WAAW,IAAI,KAAK,KAAK,oBAAoB,UAAU,IAAI,CAAC;AAClE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,UAAmB,EACnB,IAAY,EACZ,QAAkB;IAElB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,UAAU,CAAC;IAE7C,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,sBAAsB,EAAE,QAAQ,CAAC,CAAC;QAC9D,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC9D,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,OAAO,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAC7D,SAAS,CAAC,EAAE,EAAE,GAAG,IAAI,KAAK,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CACX,oBAAoB,CAAC,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,CACxE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgB,EAAE,QAAkB;IACpE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAEzC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,OAAO;IACT,CAAC;IAED,QAAQ,CAAC,IAAI,CACX,oBAAoB,CAClB,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,cAAc,CACf,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ColophonConfig } from "./types.js";
2
+ /**
3
+ * Reject a config carrying options Colophon does not know.
4
+ *
5
+ * An unrecognised key is otherwise ignored in silence: the build succeeds, the
6
+ * option does nothing, and the images come out with the defaults in its place.
7
+ * That is at its worst across an upgrade, where a config that still reads
8
+ * correctly is describing images nobody is rendering.
9
+ *
10
+ * Only the closed parts of the config are checked. The names in `templates`
11
+ * are the project's own, and a post's props are open by design — a template
12
+ * reads whatever fields it understands.
13
+ */
14
+ export declare function validateConfig(config: ColophonConfig): void;
15
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,cAAc,EAMf,MAAM,YAAY,CAAC;AAsWpB;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAkC3D"}