@kensio/colophon 2.2.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 (350) hide show
  1. package/README.md +560 -24
  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 +27 -1
  33. package/dist/config.d.ts.map +1 -1
  34. package/dist/config.js +78 -2
  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 +69 -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/index.d.ts +15 -9
  129. package/dist/index.d.ts.map +1 -1
  130. package/dist/index.js +9 -5
  131. package/dist/index.js.map +1 -1
  132. package/dist/manifest/build.d.ts +14 -0
  133. package/dist/manifest/build.d.ts.map +1 -0
  134. package/dist/manifest/build.js +43 -0
  135. package/dist/manifest/build.js.map +1 -0
  136. package/dist/manifest/index.d.ts +27 -0
  137. package/dist/manifest/index.d.ts.map +1 -0
  138. package/dist/manifest/index.js +31 -0
  139. package/dist/manifest/index.js.map +1 -0
  140. package/dist/manifest/order.d.ts +12 -0
  141. package/dist/manifest/order.d.ts.map +1 -0
  142. package/dist/manifest/order.js +17 -0
  143. package/dist/manifest/order.js.map +1 -0
  144. package/dist/manifest/page.d.ts +24 -0
  145. package/dist/manifest/page.d.ts.map +1 -0
  146. package/dist/manifest/page.js +55 -0
  147. package/dist/manifest/page.js.map +1 -0
  148. package/dist/meta/html.d.ts +14 -0
  149. package/dist/meta/html.d.ts.map +1 -0
  150. package/dist/meta/html.js +24 -0
  151. package/dist/meta/html.js.map +1 -0
  152. package/dist/meta/index.d.ts +11 -0
  153. package/dist/meta/index.d.ts.map +1 -0
  154. package/dist/meta/index.js +11 -0
  155. package/dist/meta/index.js.map +1 -0
  156. package/dist/meta/tags.d.ts +21 -0
  157. package/dist/meta/tags.d.ts.map +1 -0
  158. package/dist/meta/tags.js +72 -0
  159. package/dist/meta/tags.js.map +1 -0
  160. package/dist/meta/url.d.ts +15 -0
  161. package/dist/meta/url.d.ts.map +1 -0
  162. package/dist/meta/url.js +34 -0
  163. package/dist/meta/url.js.map +1 -0
  164. package/dist/placement/check.d.ts +16 -0
  165. package/dist/placement/check.d.ts.map +1 -0
  166. package/dist/placement/check.js +40 -0
  167. package/dist/placement/check.js.map +1 -0
  168. package/dist/placement/index.d.ts +29 -0
  169. package/dist/placement/index.d.ts.map +1 -0
  170. package/dist/placement/index.js +61 -0
  171. package/dist/placement/index.js.map +1 -0
  172. package/dist/placement/relative.d.ts +31 -0
  173. package/dist/placement/relative.d.ts.map +1 -0
  174. package/dist/placement/relative.js +53 -0
  175. package/dist/placement/relative.js.map +1 -0
  176. package/dist/pool.d.ts +18 -0
  177. package/dist/pool.d.ts.map +1 -0
  178. package/dist/pool.js +56 -0
  179. package/dist/pool.js.map +1 -0
  180. package/dist/render/index.d.ts +10 -0
  181. package/dist/render/index.d.ts.map +1 -0
  182. package/dist/render/index.js +27 -0
  183. package/dist/render/index.js.map +1 -0
  184. package/dist/render/png.d.ts +10 -0
  185. package/dist/render/png.d.ts.map +1 -0
  186. package/dist/render/png.js +30 -0
  187. package/dist/render/png.js.map +1 -0
  188. package/dist/render/svg.d.ts +10 -0
  189. package/dist/render/svg.d.ts.map +1 -0
  190. package/dist/render/svg.js +20 -0
  191. package/dist/render/svg.js.map +1 -0
  192. package/dist/render/template.d.ts +9 -0
  193. package/dist/render/template.d.ts.map +1 -0
  194. package/dist/render/template.js +17 -0
  195. package/dist/render/template.js.map +1 -0
  196. package/dist/render.d.ts +6 -2
  197. package/dist/render.d.ts.map +1 -1
  198. package/dist/render.js +31 -10
  199. package/dist/render.js.map +1 -1
  200. package/dist/stamp/chunk.d.ts +16 -0
  201. package/dist/stamp/chunk.d.ts.map +1 -0
  202. package/dist/stamp/chunk.js +46 -0
  203. package/dist/stamp/chunk.js.map +1 -0
  204. package/dist/stamp/config-digest.d.ts +11 -0
  205. package/dist/stamp/config-digest.d.ts.map +1 -0
  206. package/dist/stamp/config-digest.js +43 -0
  207. package/dist/stamp/config-digest.js.map +1 -0
  208. package/dist/stamp/digest.d.ts +8 -0
  209. package/dist/stamp/digest.d.ts.map +1 -0
  210. package/dist/stamp/digest.js +20 -0
  211. package/dist/stamp/digest.js.map +1 -0
  212. package/dist/stamp/index.d.ts +20 -0
  213. package/dist/stamp/index.d.ts.map +1 -0
  214. package/dist/stamp/index.js +40 -0
  215. package/dist/stamp/index.js.map +1 -0
  216. package/dist/stamp/read.d.ts +7 -0
  217. package/dist/stamp/read.d.ts.map +1 -0
  218. package/dist/stamp/read.js +62 -0
  219. package/dist/stamp/read.js.map +1 -0
  220. package/dist/stamp.d.ts +29 -0
  221. package/dist/stamp.d.ts.map +1 -0
  222. package/dist/stamp.js +198 -0
  223. package/dist/stamp.js.map +1 -0
  224. package/dist/templates/banner/badge.d.ts +7 -0
  225. package/dist/templates/banner/badge.d.ts.map +1 -0
  226. package/dist/templates/banner/badge.js +24 -0
  227. package/dist/templates/banner/badge.js.map +1 -0
  228. package/dist/templates/banner/index.d.ts +9 -0
  229. package/dist/templates/banner/index.d.ts.map +1 -0
  230. package/dist/templates/banner/index.js +66 -0
  231. package/dist/templates/banner/index.js.map +1 -0
  232. package/dist/templates/banner/lines.d.ts +27 -0
  233. package/dist/templates/banner/lines.d.ts.map +1 -0
  234. package/dist/templates/banner/lines.js +46 -0
  235. package/dist/templates/banner/lines.js.map +1 -0
  236. package/dist/templates/card/index.d.ts +7 -0
  237. package/dist/templates/card/index.d.ts.map +1 -0
  238. package/dist/templates/card/index.js +43 -0
  239. package/dist/templates/card/index.js.map +1 -0
  240. package/dist/templates/card/lines.d.ts +17 -0
  241. package/dist/templates/card/lines.d.ts.map +1 -0
  242. package/dist/templates/card/lines.js +32 -0
  243. package/dist/templates/card/lines.js.map +1 -0
  244. package/dist/templates/code/chrome.d.ts +9 -0
  245. package/dist/templates/code/chrome.d.ts.map +1 -0
  246. package/dist/templates/code/chrome.js +32 -0
  247. package/dist/templates/code/chrome.js.map +1 -0
  248. package/dist/templates/code/clip.d.ts +18 -0
  249. package/dist/templates/code/clip.d.ts.map +1 -0
  250. package/dist/templates/code/clip.js +44 -0
  251. package/dist/templates/code/clip.js.map +1 -0
  252. package/dist/templates/code/ellipsis.d.ts +3 -0
  253. package/dist/templates/code/ellipsis.d.ts.map +1 -0
  254. package/dist/templates/code/ellipsis.js +3 -0
  255. package/dist/templates/code/ellipsis.js.map +1 -0
  256. package/dist/templates/code/fit.d.ts +27 -0
  257. package/dist/templates/code/fit.d.ts.map +1 -0
  258. package/dist/templates/code/fit.js +59 -0
  259. package/dist/templates/code/fit.js.map +1 -0
  260. package/dist/templates/code/index.d.ts +12 -0
  261. package/dist/templates/code/index.d.ts.map +1 -0
  262. package/dist/templates/code/index.js +64 -0
  263. package/dist/templates/code/index.js.map +1 -0
  264. package/dist/templates/code/layout.d.ts +21 -0
  265. package/dist/templates/code/layout.d.ts.map +1 -0
  266. package/dist/templates/code/layout.js +21 -0
  267. package/dist/templates/code/layout.js.map +1 -0
  268. package/dist/templates/code/panel.d.ts +17 -0
  269. package/dist/templates/code/panel.d.ts.map +1 -0
  270. package/dist/templates/code/panel.js +20 -0
  271. package/dist/templates/code/panel.js.map +1 -0
  272. package/dist/templates/code/plate.d.ts +15 -0
  273. package/dist/templates/code/plate.d.ts.map +1 -0
  274. package/dist/templates/code/plate.js +32 -0
  275. package/dist/templates/code/plate.js.map +1 -0
  276. package/dist/templates/code/spans.d.ts +19 -0
  277. package/dist/templates/code/spans.d.ts.map +1 -0
  278. package/dist/templates/code/spans.js +36 -0
  279. package/dist/templates/code/spans.js.map +1 -0
  280. package/dist/templates/code/warn.d.ts +11 -0
  281. package/dist/templates/code/warn.d.ts.map +1 -0
  282. package/dist/templates/code/warn.js +24 -0
  283. package/dist/templates/code/warn.js.map +1 -0
  284. package/dist/templates/footer.d.ts +21 -0
  285. package/dist/templates/footer.d.ts.map +1 -0
  286. package/dist/templates/footer.js +25 -0
  287. package/dist/templates/footer.js.map +1 -0
  288. package/dist/templates/index.d.ts +3 -3
  289. package/dist/templates/index.d.ts.map +1 -1
  290. package/dist/templates/index.js +6 -6
  291. package/dist/templates/index.js.map +1 -1
  292. package/dist/text/element.d.ts +18 -0
  293. package/dist/text/element.d.ts.map +1 -0
  294. package/dist/text/element.js +19 -0
  295. package/dist/text/element.js.map +1 -0
  296. package/dist/text/escape.d.ts +5 -0
  297. package/dist/text/escape.d.ts.map +1 -0
  298. package/dist/text/escape.js +12 -0
  299. package/dist/text/escape.js.map +1 -0
  300. package/dist/text/index.d.ts +7 -0
  301. package/dist/text/index.d.ts.map +1 -0
  302. package/dist/text/index.js +5 -0
  303. package/dist/text/index.js.map +1 -0
  304. package/dist/text/stack.d.ts +24 -0
  305. package/dist/text/stack.d.ts.map +1 -0
  306. package/dist/text/stack.js +18 -0
  307. package/dist/text/stack.js.map +1 -0
  308. package/dist/text/wrap.d.ts +12 -0
  309. package/dist/text/wrap.d.ts.map +1 -0
  310. package/dist/text/wrap.js +33 -0
  311. package/dist/text/wrap.js.map +1 -0
  312. package/dist/types.d.ts +326 -2
  313. package/dist/types.d.ts.map +1 -1
  314. package/dist/validate/check.d.ts +13 -0
  315. package/dist/validate/check.d.ts.map +1 -0
  316. package/dist/validate/check.js +34 -0
  317. package/dist/validate/check.js.map +1 -0
  318. package/dist/validate/index.d.ts +15 -0
  319. package/dist/validate/index.d.ts.map +1 -0
  320. package/dist/validate/index.js +41 -0
  321. package/dist/validate/index.js.map +1 -0
  322. package/dist/validate/keys.d.ts +58 -0
  323. package/dist/validate/keys.d.ts.map +1 -0
  324. package/dist/validate/keys.js +166 -0
  325. package/dist/validate/keys.js.map +1 -0
  326. package/dist/validate/overrides.d.ts +5 -0
  327. package/dist/validate/overrides.d.ts.map +1 -0
  328. package/dist/validate/overrides.js +43 -0
  329. package/dist/validate/overrides.js.map +1 -0
  330. package/dist/validate/placement.d.ts +10 -0
  331. package/dist/validate/placement.d.ts.map +1 -0
  332. package/dist/validate/placement.js +38 -0
  333. package/dist/validate/placement.js.map +1 -0
  334. package/dist/validate/sizes.d.ts +9 -0
  335. package/dist/validate/sizes.d.ts.map +1 -0
  336. package/dist/validate/sizes.js +27 -0
  337. package/dist/validate/sizes.js.map +1 -0
  338. package/dist/validate/suggest.d.ts +10 -0
  339. package/dist/validate/suggest.d.ts.map +1 -0
  340. package/dist/validate/suggest.js +55 -0
  341. package/dist/validate/suggest.js.map +1 -0
  342. package/dist/validate/values.d.ts +21 -0
  343. package/dist/validate/values.d.ts.map +1 -0
  344. package/dist/validate/values.js +57 -0
  345. package/dist/validate/values.js.map +1 -0
  346. package/dist/validate.d.ts +15 -0
  347. package/dist/validate.d.ts.map +1 -0
  348. package/dist/validate.js +300 -0
  349. package/dist/validate.js.map +1 -0
  350. package/package.json +13 -6
@@ -0,0 +1,13 @@
1
+ /** Whether a value is a plain object, and so has keys worth checking. */
2
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
3
+ /** Whether a value is a list, and so has entries worth checking. */
4
+ export declare function isList(value: unknown): value is readonly unknown[];
5
+ /**
6
+ * Report every key of one config object that is not a known option. Anything
7
+ * that is not an object is left alone: the shape of a value is the type
8
+ * checker's business, and there are no keys to judge either way.
9
+ */
10
+ export declare function checkKeys(value: unknown, path: string, known: readonly string[], problems: string[]): void;
11
+ /** Check every entry of a list, naming each by its index. */
12
+ export declare function checkEach(values: unknown, path: string, known: readonly string[], problems: string[]): void;
13
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/validate/check.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,oEAAoE;AACpE,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,OAAO,EAAE,CAElE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,QAAQ,EAAE,MAAM,EAAE,GACjB,IAAI,CAYN;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CACvB,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,QAAQ,EAAE,MAAM,EAAE,GACjB,IAAI,CAQN"}
@@ -0,0 +1,34 @@
1
+ import { describeUnknownOption } from "./suggest.js";
2
+ /** Whether a value is a plain object, and so has keys worth checking. */
3
+ export function isRecord(value) {
4
+ return typeof value === "object" && value !== null && !Array.isArray(value);
5
+ }
6
+ /** Whether a value is a list, and so has entries worth checking. */
7
+ export function isList(value) {
8
+ return Array.isArray(value);
9
+ }
10
+ /**
11
+ * Report every key of one config object that is not a known option. Anything
12
+ * that is not an object is left alone: the shape of a value is the type
13
+ * checker's business, and there are no keys to judge either way.
14
+ */
15
+ export function checkKeys(value, path, known, problems) {
16
+ if (!isRecord(value)) {
17
+ return;
18
+ }
19
+ for (const key of Object.keys(value)) {
20
+ if (!known.includes(key)) {
21
+ problems.push(describeUnknownOption(path === "" ? key : `${path}.${key}`, key, known));
22
+ }
23
+ }
24
+ }
25
+ /** Check every entry of a list, naming each by its index. */
26
+ export function checkEach(values, path, known, problems) {
27
+ if (!isList(values)) {
28
+ return;
29
+ }
30
+ for (const [index, value] of values.entries()) {
31
+ checkKeys(value, `${path}[${String(index)}]`, known, problems);
32
+ }
33
+ }
34
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/validate/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,yEAAyE;AACzE,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,KAAc,EACd,IAAY,EACZ,KAAwB,EACxB,QAAkB;IAElB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CACX,qBAAqB,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CACxE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,SAAS,CACvB,MAAe,EACf,IAAY,EACZ,KAAwB,EACxB,QAAkB;IAElB,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,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;AACH,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=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validate/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAclD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAsC3D"}
@@ -0,0 +1,41 @@
1
+ import { checkEach, checkKeys } from "./check.js";
2
+ import { badgeKeys, codeKeys, colorKeys, configKeys, contentKeys, fontKeys, } from "./keys.js";
3
+ import { checkExtras, checkSizes } from "./overrides.js";
4
+ import { checkPlacement } from "./placement.js";
5
+ import { checkBackground, checkSlugStrategy } from "./values.js";
6
+ /**
7
+ * Reject a config carrying options Colophon does not know.
8
+ *
9
+ * An unrecognised key is otherwise ignored in silence: the build succeeds, the
10
+ * option does nothing, and the images come out with the defaults in its place.
11
+ * That is at its worst across an upgrade, where a config that still reads
12
+ * correctly is describing images nobody is rendering.
13
+ *
14
+ * Only the closed parts of the config are checked. The names in `templates`
15
+ * are the project's own, and a post's props are open by design — a template
16
+ * reads whatever fields it understands.
17
+ */
18
+ export function validateConfig(config) {
19
+ // The types say what should be here; validation exists for when it is not.
20
+ const raw = config;
21
+ const problems = [];
22
+ checkKeys(config, "", configKeys, problems);
23
+ checkKeys(raw.colors, "colors", colorKeys, problems);
24
+ checkKeys(raw.badge, "badge", badgeKeys, problems);
25
+ checkKeys(raw.code, "code", codeKeys, problems);
26
+ checkKeys(raw.content, "content", contentKeys, problems);
27
+ checkSlugStrategy(raw.content, problems);
28
+ checkSizes(raw.sizes, problems);
29
+ checkExtras(raw.extra, problems);
30
+ checkEach(raw.fonts, "fonts", fontKeys, problems);
31
+ checkBackground(raw.background, "background", problems);
32
+ checkPlacement(raw.placement, problems);
33
+ const [first, ...rest] = problems;
34
+ if (first === undefined) {
35
+ return;
36
+ }
37
+ throw new Error(rest.length === 0
38
+ ? first
39
+ : `Invalid config:\n${problems.map((problem) => ` - ${problem}`).join("\n")}`);
40
+ }
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validate/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EACL,SAAS,EACT,QAAQ,EACR,SAAS,EACT,UAAU,EACV,WAAW,EACX,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,2EAA2E;IAC3E,MAAM,GAAG,GAAG,MAUX,CAAC;IACF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC5C,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACrD,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnD,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChD,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACzD,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAChC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACjC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAClD,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IACxD,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAExC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC;IAElC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,MAAM,KAAK,CAAC;QACf,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,oBAAoB,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,58 @@
1
+ /** Top-level config options. */
2
+ export declare const configKeys: readonly string[];
3
+ /** Keys of a placement that writes each image beside its post. */
4
+ export declare const besideContentKeys: readonly string[];
5
+ /** Keys of a placement that gathers images into one directory. */
6
+ export declare const publicDirKeys: readonly string[];
7
+ /** Keys of a placement that works both halves out for itself. */
8
+ export declare const customPlacementKeys: readonly string[];
9
+ /**
10
+ * The placement strategies, for the same reason as {@link backgroundTypes}: a
11
+ * mistyped one would otherwise be reported as an unknown key on whichever
12
+ * variant it was guessed to be.
13
+ *
14
+ * Two of the names are hyphenated because they are values a user writes in a
15
+ * config, not identifiers — the casing rule is about the latter. Keeping them
16
+ * as keys is what keeps the list exhaustive, which is the whole point of it.
17
+ */
18
+ export declare const placementStrategies: readonly string[];
19
+ /** One ad hoc image declared in config. */
20
+ export declare const extraKeys: readonly string[];
21
+ /** Options for reading a project's own frontmatter. */
22
+ export declare const contentKeys: readonly string[];
23
+ /** Brand palette shades. */
24
+ export declare const colorKeys: readonly string[];
25
+ /** Corner-badge options. */
26
+ export declare const badgeKeys: readonly string[];
27
+ /** `code` template styling options. */
28
+ export declare const codeKeys: readonly string[];
29
+ /** One output size, including the overrides it may carry. */
30
+ export declare const sizeKeys: readonly string[];
31
+ /**
32
+ * Both font variants at once. Which of `path` and `data` a font may carry is
33
+ * `fonts/resolve.ts`'s ruling to make, and it has a better message for it than
34
+ * a list of keys could.
35
+ */
36
+ export declare const fontKeys: string[];
37
+ /** Keys of a solid background. */
38
+ export declare const solidBackgroundKeys: readonly string[];
39
+ /** Keys of a gradient background. */
40
+ export declare const gradientBackgroundKeys: readonly string[];
41
+ /** Keys of one gradient stop. */
42
+ export declare const gradientStopKeys: readonly string[];
43
+ /** Keys of a gradient's `from` and `to` points. */
44
+ export declare const gradientPointKeys: readonly string[];
45
+ /**
46
+ * The background variants, as values to check a declared `type` against. Typed
47
+ * against the union for the same reason the key lists are: a variant added to
48
+ * `Background` and not listed here would otherwise be reported as an unknown
49
+ * type, rejecting a config that is perfectly valid.
50
+ */
51
+ export declare const backgroundTypes: readonly string[];
52
+ /**
53
+ * The slug strategies, for the same reason as {@link backgroundTypes}:
54
+ * `slugFromPath` treats anything that is not `basename` as a route, so a
55
+ * mistyped `rout` would quietly re-slug a whole site rather than complain.
56
+ */
57
+ export declare const slugStrategies: readonly string[];
58
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/validate/keys.ts"],"names":[],"mappings":"AA0CA,gCAAgC;AAChC,eAAO,MAAM,UAAU,mBAgBrB,CAAC;AAEH,kEAAkE;AAClE,eAAO,MAAM,iBAAiB,mBAI5B,CAAC;AAEH,kEAAkE;AAClE,eAAO,MAAM,aAAa,mBAKxB,CAAC;AAEH,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,mBAI9B,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,mBAQ9B,CAAC;AAEH,2CAA2C;AAC3C,eAAO,MAAM,SAAS,mBAIpB,CAAC;AAEH,uDAAuD;AACvD,eAAO,MAAM,WAAW,mBAQtB,CAAC;AAEH,4BAA4B;AAC5B,eAAO,MAAM,SAAS,mBAKpB,CAAC;AAEH,4BAA4B;AAC5B,eAAO,MAAM,SAAS,mBAIpB,CAAC;AAEH,uCAAuC;AACvC,eAAO,MAAM,QAAQ,mBASnB,CAAC;AAEH,6DAA6D;AAC7D,eAAO,MAAM,QAAQ,mBAUnB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,QAAQ,UAKpB,CAAC;AAEF,kCAAkC;AAClC,eAAO,MAAM,mBAAmB,mBAG9B,CAAC;AAEH,qCAAqC;AACrC,eAAO,MAAM,sBAAsB,mBAKjC,CAAC;AAEH,iCAAiC;AACjC,eAAO,MAAM,gBAAgB,mBAG3B,CAAC;AAEH,mDAAmD;AACnD,eAAO,MAAM,iBAAiB,mBAAiD,CAAC;AAEhF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,mBAG1B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc,mBAGzB,CAAC"}
@@ -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":"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"}
@@ -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"}