@kensio/colophon 2.4.0 → 2.6.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 (687) hide show
  1. package/README.md +139 -13
  2. package/dist/astro/index.d.ts +49 -0
  3. package/dist/astro/index.d.ts.map +1 -0
  4. package/dist/astro/index.js +42 -0
  5. package/dist/astro/index.js.map +1 -0
  6. package/dist/background/gradient.d.ts +12 -0
  7. package/dist/background/gradient.d.ts.map +1 -0
  8. package/dist/background/gradient.js +21 -0
  9. package/dist/background/gradient.js.map +1 -0
  10. package/dist/background/image.d.ts +14 -0
  11. package/dist/background/image.d.ts.map +1 -0
  12. package/dist/background/image.js +36 -0
  13. package/dist/background/image.js.map +1 -0
  14. package/dist/{background.d.ts → background/index.d.ts} +5 -5
  15. package/dist/background/index.d.ts.map +1 -0
  16. package/dist/background/index.js +27 -0
  17. package/dist/background/index.js.map +1 -0
  18. package/dist/background/mesh.d.ts +12 -0
  19. package/dist/background/mesh.d.ts.map +1 -0
  20. package/dist/background/mesh.js +43 -0
  21. package/dist/background/mesh.js.map +1 -0
  22. package/dist/cli/args/command.d.ts +13 -0
  23. package/dist/cli/args/command.d.ts.map +1 -0
  24. package/dist/cli/args/command.js +22 -0
  25. package/dist/cli/args/command.js.map +1 -0
  26. package/dist/cli/args/index.d.ts +28 -0
  27. package/dist/cli/args/index.d.ts.map +1 -0
  28. package/dist/cli/args/index.js +75 -0
  29. package/dist/cli/args/index.js.map +1 -0
  30. package/dist/cli/args/switches.d.ts +18 -0
  31. package/dist/cli/args/switches.d.ts.map +1 -0
  32. package/dist/cli/args/switches.js +42 -0
  33. package/dist/cli/args/switches.js.map +1 -0
  34. package/dist/cli/args/usage.d.ts +3 -0
  35. package/dist/cli/args/usage.d.ts.map +1 -0
  36. package/dist/cli/args/usage.js +34 -0
  37. package/dist/cli/args/usage.js.map +1 -0
  38. package/dist/cli/args/values.d.ts +11 -0
  39. package/dist/cli/args/values.d.ts.map +1 -0
  40. package/dist/cli/args/values.js +29 -0
  41. package/dist/cli/args/values.js.map +1 -0
  42. package/dist/cli/build.d.ts +10 -0
  43. package/dist/cli/build.d.ts.map +1 -0
  44. package/dist/cli/build.js +41 -0
  45. package/dist/cli/build.js.map +1 -0
  46. package/dist/cli/eject/adapters.d.ts +20 -0
  47. package/dist/cli/eject/adapters.d.ts.map +1 -0
  48. package/dist/cli/eject/adapters.js +29 -0
  49. package/dist/cli/eject/adapters.js.map +1 -0
  50. package/dist/cli/eject/astro.d.ts +13 -0
  51. package/dist/cli/eject/astro.d.ts.map +1 -0
  52. package/dist/cli/eject/astro.js +35 -0
  53. package/dist/cli/eject/astro.js.map +1 -0
  54. package/dist/cli/eject/hugo.d.ts +19 -0
  55. package/dist/cli/eject/hugo.d.ts.map +1 -0
  56. package/dist/cli/eject/hugo.js +127 -0
  57. package/dist/cli/eject/hugo.js.map +1 -0
  58. package/dist/cli/eject/index.d.ts +15 -0
  59. package/dist/cli/eject/index.d.ts.map +1 -0
  60. package/dist/cli/eject/index.js +46 -0
  61. package/dist/cli/eject/index.js.map +1 -0
  62. package/dist/cli/index.js +25 -20
  63. package/dist/cli/index.js.map +1 -1
  64. package/dist/cli/init/fs.d.ts +5 -0
  65. package/dist/cli/init/fs.d.ts.map +1 -0
  66. package/dist/cli/init/fs.js +19 -0
  67. package/dist/cli/init/fs.js.map +1 -0
  68. package/dist/cli/init/guess.d.ts +9 -0
  69. package/dist/cli/init/guess.d.ts.map +1 -0
  70. package/dist/cli/init/guess.js +27 -0
  71. package/dist/cli/init/guess.js.map +1 -0
  72. package/dist/cli/init/index.d.ts +11 -0
  73. package/dist/cli/init/index.d.ts.map +1 -0
  74. package/dist/cli/init/index.js +36 -0
  75. package/dist/cli/init/index.js.map +1 -0
  76. package/dist/cli/init/module.d.ts +12 -0
  77. package/dist/cli/init/module.d.ts.map +1 -0
  78. package/dist/cli/init/module.js +45 -0
  79. package/dist/cli/init/module.js.map +1 -0
  80. package/dist/cli/init/scaffold.d.ts +10 -0
  81. package/dist/cli/init/scaffold.d.ts.map +1 -0
  82. package/dist/cli/init/scaffold.js +52 -0
  83. package/dist/cli/init/scaffold.js.map +1 -0
  84. package/dist/cli/message.d.ts +7 -0
  85. package/dist/cli/message.d.ts.map +1 -0
  86. package/dist/cli/message.js +9 -0
  87. package/dist/cli/message.js.map +1 -0
  88. package/dist/cli/preview/index.d.ts +13 -0
  89. package/dist/cli/preview/index.d.ts.map +1 -0
  90. package/dist/cli/preview/index.js +27 -0
  91. package/dist/cli/preview/index.js.map +1 -0
  92. package/dist/cli/preview/open.d.ts +10 -0
  93. package/dist/cli/preview/open.d.ts.map +1 -0
  94. package/dist/cli/preview/open.js +32 -0
  95. package/dist/cli/preview/open.js.map +1 -0
  96. package/dist/cli/preview/render.d.ts +23 -0
  97. package/dist/cli/preview/render.d.ts.map +1 -0
  98. package/dist/cli/preview/render.js +40 -0
  99. package/dist/cli/preview/render.js.map +1 -0
  100. package/dist/cli/preview/root.d.ts +17 -0
  101. package/dist/cli/preview/root.d.ts.map +1 -0
  102. package/dist/cli/preview/root.js +22 -0
  103. package/dist/cli/preview/root.js.map +1 -0
  104. package/dist/cli/preview/size.d.ts +7 -0
  105. package/dist/cli/preview/size.d.ts.map +1 -0
  106. package/dist/cli/preview/size.js +13 -0
  107. package/dist/cli/preview/size.js.map +1 -0
  108. package/dist/cli/report.d.ts +6 -0
  109. package/dist/cli/report.d.ts.map +1 -0
  110. package/dist/cli/report.js +23 -0
  111. package/dist/cli/report.js.map +1 -0
  112. package/dist/cli/watch/filter.d.ts +14 -0
  113. package/dist/cli/watch/filter.d.ts.map +1 -0
  114. package/dist/cli/watch/filter.js +16 -0
  115. package/dist/cli/watch/filter.js.map +1 -0
  116. package/dist/cli/watch/index.d.ts +27 -0
  117. package/dist/cli/watch/index.d.ts.map +1 -0
  118. package/dist/cli/watch/index.js +38 -0
  119. package/dist/cli/watch/index.js.map +1 -0
  120. package/dist/cli/watch/queue.d.ts +24 -0
  121. package/dist/cli/watch/queue.d.ts.map +1 -0
  122. package/dist/cli/watch/queue.js +57 -0
  123. package/dist/cli/watch/queue.js.map +1 -0
  124. package/dist/config/defaults.d.ts +39 -1
  125. package/dist/config/defaults.d.ts.map +1 -1
  126. package/dist/config/defaults.js +38 -0
  127. package/dist/config/defaults.js.map +1 -1
  128. package/dist/config/index.d.ts +2 -2
  129. package/dist/config/index.d.ts.map +1 -1
  130. package/dist/config/index.js +27 -6
  131. package/dist/config/index.js.map +1 -1
  132. package/dist/config/output.d.ts +26 -0
  133. package/dist/config/output.d.ts.map +1 -0
  134. package/dist/config/output.js +45 -0
  135. package/dist/config/output.js.map +1 -0
  136. package/dist/config/resolve.d.ts +10 -0
  137. package/dist/config/resolve.d.ts.map +1 -1
  138. package/dist/config/resolve.js +20 -1
  139. package/dist/config/resolve.js.map +1 -1
  140. package/dist/config/size.d.ts +6 -0
  141. package/dist/config/size.d.ts.map +1 -1
  142. package/dist/config/size.js +20 -8
  143. package/dist/config/size.js.map +1 -1
  144. package/dist/content/index.d.ts +1 -0
  145. package/dist/content/index.d.ts.map +1 -1
  146. package/dist/content/index.js +1 -0
  147. package/dist/content/index.js.map +1 -1
  148. package/dist/content/read.d.ts +15 -0
  149. package/dist/content/read.d.ts.map +1 -0
  150. package/dist/content/read.js +36 -0
  151. package/dist/content/read.js.map +1 -0
  152. package/dist/content/walk.d.ts.map +1 -1
  153. package/dist/content/walk.js +4 -30
  154. package/dist/content/walk.js.map +1 -1
  155. package/dist/core/index.d.ts +37 -0
  156. package/dist/core/index.d.ts.map +1 -0
  157. package/dist/core/index.js +13 -0
  158. package/dist/core/index.js.map +1 -0
  159. package/dist/encode/fit.d.ts +16 -0
  160. package/dist/encode/fit.d.ts.map +1 -0
  161. package/dist/encode/fit.js +23 -0
  162. package/dist/encode/fit.js.map +1 -0
  163. package/dist/encode/format.d.ts +12 -0
  164. package/dist/encode/format.d.ts.map +1 -0
  165. package/dist/encode/format.js +40 -0
  166. package/dist/encode/format.js.map +1 -0
  167. package/dist/encode/index.d.ts +14 -0
  168. package/dist/encode/index.d.ts.map +1 -0
  169. package/dist/encode/index.js +52 -0
  170. package/dist/encode/index.js.map +1 -0
  171. package/dist/encode/sharp.d.ts +19 -0
  172. package/dist/encode/sharp.d.ts.map +1 -0
  173. package/dist/encode/sharp.js +57 -0
  174. package/dist/encode/sharp.js.map +1 -0
  175. package/dist/encode/warn.d.ts +10 -0
  176. package/dist/encode/warn.d.ts.map +1 -0
  177. package/dist/encode/warn.js +31 -0
  178. package/dist/encode/warn.js.map +1 -0
  179. package/dist/fonts/resolve.d.ts.map +1 -1
  180. package/dist/fonts/resolve.js +2 -8
  181. package/dist/fonts/resolve.js.map +1 -1
  182. package/dist/generate/index.d.ts +4 -0
  183. package/dist/generate/index.d.ts.map +1 -1
  184. package/dist/generate/index.js +10 -4
  185. package/dist/generate/index.js.map +1 -1
  186. package/dist/generate/options.d.ts +11 -1
  187. package/dist/generate/options.d.ts.map +1 -1
  188. package/dist/generate/options.js.map +1 -1
  189. package/dist/generate/output-path.d.ts +6 -2
  190. package/dist/generate/output-path.d.ts.map +1 -1
  191. package/dist/generate/output-path.js +7 -2
  192. package/dist/generate/output-path.js.map +1 -1
  193. package/dist/generate/plan.d.ts.map +1 -1
  194. package/dist/generate/plan.js +3 -3
  195. package/dist/generate/plan.js.map +1 -1
  196. package/dist/generate/render-image.d.ts +6 -0
  197. package/dist/generate/render-image.d.ts.map +1 -1
  198. package/dist/generate/render-image.js +14 -4
  199. package/dist/generate/render-image.js.map +1 -1
  200. package/dist/image/index.d.ts +3 -1
  201. package/dist/image/index.d.ts.map +1 -1
  202. package/dist/image/index.js +4 -3
  203. package/dist/image/index.js.map +1 -1
  204. package/dist/image/jpeg.d.ts +5 -4
  205. package/dist/image/jpeg.d.ts.map +1 -1
  206. package/dist/image/jpeg.js +13 -36
  207. package/dist/image/jpeg.js.map +1 -1
  208. package/dist/image/load.d.ts.map +1 -1
  209. package/dist/image/load.js +4 -15
  210. package/dist/image/load.js.map +1 -1
  211. package/dist/image/resolve.d.ts.map +1 -1
  212. package/dist/image/resolve.js +2 -8
  213. package/dist/image/resolve.js.map +1 -1
  214. package/dist/image/uri.d.ts.map +1 -1
  215. package/dist/image/uri.js +2 -3
  216. package/dist/image/uri.js.map +1 -1
  217. package/dist/index.d.ts +10 -5
  218. package/dist/index.d.ts.map +1 -1
  219. package/dist/index.js +12 -4
  220. package/dist/index.js.map +1 -1
  221. package/dist/jpeg/index.d.ts +10 -0
  222. package/dist/jpeg/index.d.ts.map +1 -0
  223. package/dist/jpeg/index.js +2 -0
  224. package/dist/jpeg/index.js.map +1 -0
  225. package/dist/jpeg/segments.d.ts +32 -0
  226. package/dist/jpeg/segments.d.ts.map +1 -0
  227. package/dist/jpeg/segments.js +66 -0
  228. package/dist/jpeg/segments.js.map +1 -0
  229. package/dist/layout/draw.d.ts +20 -0
  230. package/dist/layout/draw.d.ts.map +1 -0
  231. package/dist/layout/draw.js +32 -0
  232. package/dist/layout/draw.js.map +1 -0
  233. package/dist/layout/extent.d.ts +19 -0
  234. package/dist/layout/extent.d.ts.map +1 -0
  235. package/dist/layout/extent.js +24 -0
  236. package/dist/layout/extent.js.map +1 -0
  237. package/dist/layout/index.d.ts +7 -4
  238. package/dist/layout/index.d.ts.map +1 -1
  239. package/dist/layout/index.js +5 -3
  240. package/dist/layout/index.js.map +1 -1
  241. package/dist/layout/lines.d.ts +0 -17
  242. package/dist/layout/lines.d.ts.map +1 -1
  243. package/dist/layout/lines.js +2 -35
  244. package/dist/layout/lines.js.map +1 -1
  245. package/dist/measure/faces.d.ts.map +1 -1
  246. package/dist/measure/faces.js +8 -2
  247. package/dist/measure/faces.js.map +1 -1
  248. package/dist/meta/index.d.ts +1 -0
  249. package/dist/meta/index.d.ts.map +1 -1
  250. package/dist/meta/index.js +1 -0
  251. package/dist/meta/index.js.map +1 -1
  252. package/dist/meta/path.d.ts +24 -0
  253. package/dist/meta/path.d.ts.map +1 -0
  254. package/dist/meta/path.js +41 -0
  255. package/dist/meta/path.js.map +1 -0
  256. package/dist/meta/tags.d.ts.map +1 -1
  257. package/dist/meta/tags.js +6 -1
  258. package/dist/meta/tags.js.map +1 -1
  259. package/dist/placement/index.d.ts +7 -2
  260. package/dist/placement/index.d.ts.map +1 -1
  261. package/dist/placement/index.js +9 -3
  262. package/dist/placement/index.js.map +1 -1
  263. package/dist/placement/relative.d.ts +8 -3
  264. package/dist/placement/relative.d.ts.map +1 -1
  265. package/dist/placement/relative.js +12 -5
  266. package/dist/placement/relative.js.map +1 -1
  267. package/dist/platform/base64.d.ts +13 -0
  268. package/dist/platform/base64.d.ts.map +1 -0
  269. package/dist/platform/base64.js +35 -0
  270. package/dist/platform/base64.js.map +1 -0
  271. package/dist/platform/rasteriser.browser.d.ts +16 -0
  272. package/dist/platform/rasteriser.browser.d.ts.map +1 -0
  273. package/dist/platform/rasteriser.browser.js +20 -0
  274. package/dist/platform/rasteriser.browser.js.map +1 -0
  275. package/dist/platform/rasteriser.node.d.ts +2 -0
  276. package/dist/platform/rasteriser.node.d.ts.map +1 -0
  277. package/dist/platform/rasteriser.node.js +2 -0
  278. package/dist/platform/rasteriser.node.js.map +1 -0
  279. package/dist/platform/read-file.browser.d.ts +17 -0
  280. package/dist/platform/read-file.browser.d.ts.map +1 -0
  281. package/dist/platform/read-file.browser.js +23 -0
  282. package/dist/platform/read-file.browser.js.map +1 -0
  283. package/dist/platform/read-file.node.d.ts +19 -0
  284. package/dist/platform/read-file.node.d.ts.map +1 -0
  285. package/dist/platform/read-file.node.js +31 -0
  286. package/dist/platform/read-file.node.js.map +1 -0
  287. package/dist/png/chunk.d.ts +23 -0
  288. package/dist/png/chunk.d.ts.map +1 -0
  289. package/dist/png/chunk.js +48 -0
  290. package/dist/png/chunk.js.map +1 -0
  291. package/dist/png/index.d.ts +13 -0
  292. package/dist/png/index.d.ts.map +1 -0
  293. package/dist/png/index.js +3 -0
  294. package/dist/png/index.js.map +1 -0
  295. package/dist/png/recompress.d.ts +23 -0
  296. package/dist/png/recompress.d.ts.map +1 -0
  297. package/dist/png/recompress.js +81 -0
  298. package/dist/png/recompress.js.map +1 -0
  299. package/dist/props.d.ts +11 -0
  300. package/dist/props.d.ts.map +1 -1
  301. package/dist/props.js +16 -0
  302. package/dist/props.js.map +1 -1
  303. package/dist/render/image.d.ts +20 -0
  304. package/dist/render/image.d.ts.map +1 -0
  305. package/dist/render/image.js +29 -0
  306. package/dist/render/image.js.map +1 -0
  307. package/dist/render/index.d.ts +2 -1
  308. package/dist/render/index.d.ts.map +1 -1
  309. package/dist/render/index.js +5 -4
  310. package/dist/render/index.js.map +1 -1
  311. package/dist/render/png.d.ts +14 -4
  312. package/dist/render/png.d.ts.map +1 -1
  313. package/dist/render/png.js +22 -23
  314. package/dist/render/png.js.map +1 -1
  315. package/dist/render/rasterise.d.ts +15 -0
  316. package/dist/render/rasterise.d.ts.map +1 -0
  317. package/dist/render/rasterise.js +34 -0
  318. package/dist/render/rasterise.js.map +1 -0
  319. package/dist/render/svg.d.ts.map +1 -1
  320. package/dist/render/svg.js +10 -2
  321. package/dist/render/svg.js.map +1 -1
  322. package/dist/sign/base64url.d.ts +16 -0
  323. package/dist/sign/base64url.d.ts.map +1 -0
  324. package/dist/sign/base64url.js +24 -0
  325. package/dist/sign/base64url.js.map +1 -0
  326. package/dist/sign/index.d.ts +49 -0
  327. package/dist/sign/index.d.ts.map +1 -0
  328. package/dist/sign/index.js +133 -0
  329. package/dist/sign/index.js.map +1 -0
  330. package/dist/stamp/carrier/index.d.ts +7 -0
  331. package/dist/stamp/carrier/index.d.ts.map +1 -0
  332. package/dist/stamp/carrier/index.js +27 -0
  333. package/dist/stamp/carrier/index.js.map +1 -0
  334. package/dist/stamp/carrier/isobmff.d.ts +7 -0
  335. package/dist/stamp/carrier/isobmff.d.ts.map +1 -0
  336. package/dist/stamp/carrier/isobmff.js +55 -0
  337. package/dist/stamp/carrier/isobmff.js.map +1 -0
  338. package/dist/stamp/carrier/jpeg.d.ts +4 -0
  339. package/dist/stamp/carrier/jpeg.d.ts.map +1 -0
  340. package/dist/stamp/carrier/jpeg.js +76 -0
  341. package/dist/stamp/carrier/jpeg.js.map +1 -0
  342. package/dist/stamp/carrier/png.d.ts +7 -0
  343. package/dist/stamp/carrier/png.d.ts.map +1 -0
  344. package/dist/stamp/carrier/png.js +50 -0
  345. package/dist/stamp/carrier/png.js.map +1 -0
  346. package/dist/stamp/carrier/riff.d.ts +4 -0
  347. package/dist/stamp/carrier/riff.d.ts.map +1 -0
  348. package/dist/stamp/carrier/riff.js +54 -0
  349. package/dist/stamp/carrier/riff.js.map +1 -0
  350. package/dist/stamp/carrier/types.d.ts +25 -0
  351. package/dist/stamp/carrier/types.d.ts.map +1 -0
  352. package/dist/stamp/carrier/types.js +2 -0
  353. package/dist/stamp/carrier/types.js.map +1 -0
  354. package/dist/stamp/chunk.d.ts +0 -2
  355. package/dist/stamp/chunk.d.ts.map +1 -1
  356. package/dist/stamp/chunk.js +10 -18
  357. package/dist/stamp/chunk.js.map +1 -1
  358. package/dist/stamp/config-digest.d.ts +18 -0
  359. package/dist/stamp/config-digest.d.ts.map +1 -1
  360. package/dist/stamp/config-digest.js +25 -0
  361. package/dist/stamp/config-digest.js.map +1 -1
  362. package/dist/stamp/index.d.ts +2 -2
  363. package/dist/stamp/index.d.ts.map +1 -1
  364. package/dist/stamp/index.js +2 -2
  365. package/dist/stamp/index.js.map +1 -1
  366. package/dist/stamp/payload.d.ts +28 -0
  367. package/dist/stamp/payload.d.ts.map +1 -0
  368. package/dist/stamp/payload.js +42 -0
  369. package/dist/stamp/payload.js.map +1 -0
  370. package/dist/stamp/read.d.ts +5 -4
  371. package/dist/stamp/read.d.ts.map +1 -1
  372. package/dist/stamp/read.js +26 -43
  373. package/dist/stamp/read.js.map +1 -1
  374. package/dist/stamp/window.d.ts +11 -0
  375. package/dist/stamp/window.d.ts.map +1 -0
  376. package/dist/stamp/window.js +11 -0
  377. package/dist/stamp/window.js.map +1 -0
  378. package/dist/stamp/write.d.ts +21 -0
  379. package/dist/stamp/write.d.ts.map +1 -0
  380. package/dist/stamp/write.js +31 -0
  381. package/dist/stamp/write.js.map +1 -0
  382. package/dist/templates/article/bottom.d.ts +15 -0
  383. package/dist/templates/article/bottom.d.ts.map +1 -0
  384. package/dist/templates/article/bottom.js +61 -0
  385. package/dist/templates/article/bottom.js.map +1 -0
  386. package/dist/templates/article/index.d.ts +12 -0
  387. package/dist/templates/article/index.d.ts.map +1 -0
  388. package/dist/templates/article/index.js +42 -0
  389. package/dist/templates/article/index.js.map +1 -0
  390. package/dist/templates/article/lines.d.ts +27 -0
  391. package/dist/templates/article/lines.d.ts.map +1 -0
  392. package/dist/templates/article/lines.js +53 -0
  393. package/dist/templates/article/lines.js.map +1 -0
  394. package/dist/templates/article/tags.d.ts +25 -0
  395. package/dist/templates/article/tags.d.ts.map +1 -0
  396. package/dist/templates/article/tags.js +63 -0
  397. package/dist/templates/article/tags.js.map +1 -0
  398. package/dist/templates/attribution.d.ts +2 -6
  399. package/dist/templates/attribution.d.ts.map +1 -1
  400. package/dist/templates/attribution.js +8 -22
  401. package/dist/templates/attribution.js.map +1 -1
  402. package/dist/templates/banner/badge-props.d.ts +16 -0
  403. package/dist/templates/banner/badge-props.d.ts.map +1 -0
  404. package/dist/templates/banner/badge-props.js +58 -0
  405. package/dist/templates/banner/badge-props.js.map +1 -0
  406. package/dist/templates/banner/index.d.ts.map +1 -1
  407. package/dist/templates/banner/index.js +6 -4
  408. package/dist/templates/banner/index.js.map +1 -1
  409. package/dist/templates/banner/version.d.ts.map +1 -1
  410. package/dist/templates/banner/version.js +4 -4
  411. package/dist/templates/banner/version.js.map +1 -1
  412. package/dist/templates/bottom.d.ts +23 -0
  413. package/dist/templates/bottom.d.ts.map +1 -0
  414. package/dist/templates/bottom.js +37 -0
  415. package/dist/templates/bottom.js.map +1 -0
  416. package/dist/templates/byline.d.ts +19 -0
  417. package/dist/templates/byline.d.ts.map +1 -0
  418. package/dist/templates/byline.js +45 -0
  419. package/dist/templates/byline.js.map +1 -0
  420. package/dist/templates/code/clip.js +1 -1
  421. package/dist/templates/code/clip.js.map +1 -1
  422. package/dist/templates/code/fit.js +1 -1
  423. package/dist/templates/code/fit.js.map +1 -1
  424. package/dist/templates/code/warn.d.ts +1 -1
  425. package/dist/templates/code/warn.d.ts.map +1 -1
  426. package/dist/templates/code/warn.js +2 -2
  427. package/dist/templates/code/warn.js.map +1 -1
  428. package/dist/templates/docs/chrome.d.ts +17 -0
  429. package/dist/templates/docs/chrome.d.ts.map +1 -0
  430. package/dist/templates/docs/chrome.js +44 -0
  431. package/dist/templates/docs/chrome.js.map +1 -0
  432. package/dist/templates/docs/crumbs.d.ts +14 -0
  433. package/dist/templates/docs/crumbs.d.ts.map +1 -0
  434. package/dist/templates/docs/crumbs.js +32 -0
  435. package/dist/templates/docs/crumbs.js.map +1 -0
  436. package/dist/templates/docs/index.d.ts +13 -0
  437. package/dist/templates/docs/index.d.ts.map +1 -0
  438. package/dist/templates/docs/index.js +47 -0
  439. package/dist/templates/docs/index.js.map +1 -0
  440. package/dist/templates/docs/lines.d.ts +14 -0
  441. package/dist/templates/docs/lines.d.ts.map +1 -0
  442. package/dist/templates/docs/lines.js +29 -0
  443. package/dist/templates/docs/lines.js.map +1 -0
  444. package/dist/templates/event/index.d.ts +12 -0
  445. package/dist/templates/event/index.d.ts.map +1 -0
  446. package/dist/templates/event/index.js +59 -0
  447. package/dist/templates/event/index.js.map +1 -0
  448. package/dist/templates/event/lines.d.ts +14 -0
  449. package/dist/templates/event/lines.d.ts.map +1 -0
  450. package/dist/templates/event/lines.js +29 -0
  451. package/dist/templates/event/lines.js.map +1 -0
  452. package/dist/templates/event/plate.d.ts +16 -0
  453. package/dist/templates/event/plate.d.ts.map +1 -0
  454. package/dist/templates/event/plate.js +36 -0
  455. package/dist/templates/event/plate.js.map +1 -0
  456. package/dist/templates/frame.d.ts +68 -0
  457. package/dist/templates/frame.d.ts.map +1 -0
  458. package/dist/templates/frame.js +63 -0
  459. package/dist/templates/frame.js.map +1 -0
  460. package/dist/templates/index.d.ts +9 -0
  461. package/dist/templates/index.d.ts.map +1 -1
  462. package/dist/templates/index.js +27 -0
  463. package/dist/templates/index.js.map +1 -1
  464. package/dist/templates/photo/index.d.ts +17 -0
  465. package/dist/templates/photo/index.d.ts.map +1 -0
  466. package/dist/templates/photo/index.js +51 -0
  467. package/dist/templates/photo/index.js.map +1 -0
  468. package/dist/templates/photo/lines.d.ts +21 -0
  469. package/dist/templates/photo/lines.d.ts.map +1 -0
  470. package/dist/templates/photo/lines.js +36 -0
  471. package/dist/templates/photo/lines.js.map +1 -0
  472. package/dist/templates/pill.d.ts +33 -0
  473. package/dist/templates/pill.d.ts.map +1 -0
  474. package/dist/templates/pill.js +50 -0
  475. package/dist/templates/pill.js.map +1 -0
  476. package/dist/templates/portrait.d.ts +40 -0
  477. package/dist/templates/portrait.d.ts.map +1 -0
  478. package/dist/templates/portrait.js +56 -0
  479. package/dist/templates/portrait.js.map +1 -0
  480. package/dist/templates/quote/index.d.ts +11 -0
  481. package/dist/templates/quote/index.d.ts.map +1 -0
  482. package/dist/templates/quote/index.js +60 -0
  483. package/dist/templates/quote/index.js.map +1 -0
  484. package/dist/templates/quote/lines.d.ts +24 -0
  485. package/dist/templates/quote/lines.d.ts.map +1 -0
  486. package/dist/templates/quote/lines.js +35 -0
  487. package/dist/templates/quote/lines.js.map +1 -0
  488. package/dist/templates/quote/mark.d.ts +13 -0
  489. package/dist/templates/quote/mark.d.ts.map +1 -0
  490. package/dist/templates/quote/mark.js +39 -0
  491. package/dist/templates/quote/mark.js.map +1 -0
  492. package/dist/templates/quote/speaker.d.ts +18 -0
  493. package/dist/templates/quote/speaker.d.ts.map +1 -0
  494. package/dist/templates/quote/speaker.js +41 -0
  495. package/dist/templates/quote/speaker.js.map +1 -0
  496. package/dist/templates/release/block.d.ts +8 -0
  497. package/dist/templates/release/block.d.ts.map +1 -0
  498. package/dist/templates/release/block.js +16 -0
  499. package/dist/templates/release/block.js.map +1 -0
  500. package/dist/templates/release/changes.d.ts +23 -0
  501. package/dist/templates/release/changes.d.ts.map +1 -0
  502. package/dist/templates/release/changes.js +45 -0
  503. package/dist/templates/release/changes.js.map +1 -0
  504. package/dist/templates/release/index.d.ts +11 -0
  505. package/dist/templates/release/index.d.ts.map +1 -0
  506. package/dist/templates/release/index.js +55 -0
  507. package/dist/templates/release/index.js.map +1 -0
  508. package/dist/templates/release/lines.d.ts +21 -0
  509. package/dist/templates/release/lines.d.ts.map +1 -0
  510. package/dist/templates/release/lines.js +36 -0
  511. package/dist/templates/release/lines.js.map +1 -0
  512. package/dist/templates/stat/index.d.ts +11 -0
  513. package/dist/templates/stat/index.d.ts.map +1 -0
  514. package/dist/templates/stat/index.js +43 -0
  515. package/dist/templates/stat/index.js.map +1 -0
  516. package/dist/templates/stat/lines.d.ts +23 -0
  517. package/dist/templates/stat/lines.d.ts.map +1 -0
  518. package/dist/templates/stat/lines.js +47 -0
  519. package/dist/templates/stat/lines.js.map +1 -0
  520. package/dist/templates/terminal/index.d.ts +16 -0
  521. package/dist/templates/terminal/index.d.ts.map +1 -0
  522. package/dist/templates/terminal/index.js +62 -0
  523. package/dist/templates/terminal/index.js.map +1 -0
  524. package/dist/templates/terminal/session.d.ts +17 -0
  525. package/dist/templates/terminal/session.d.ts.map +1 -0
  526. package/dist/templates/terminal/session.js +86 -0
  527. package/dist/templates/terminal/session.js.map +1 -0
  528. package/dist/templates/terminal/window.d.ts +14 -0
  529. package/dist/templates/terminal/window.d.ts.map +1 -0
  530. package/dist/templates/terminal/window.js +84 -0
  531. package/dist/templates/terminal/window.js.map +1 -0
  532. package/dist/templates/version.d.ts +16 -0
  533. package/dist/templates/version.d.ts.map +1 -0
  534. package/dist/templates/version.js +23 -0
  535. package/dist/templates/version.js.map +1 -0
  536. package/dist/templates/wordmark/index.d.ts +13 -0
  537. package/dist/templates/wordmark/index.d.ts.map +1 -0
  538. package/dist/templates/wordmark/index.js +53 -0
  539. package/dist/templates/wordmark/index.js.map +1 -0
  540. package/dist/templates/wordmark/lines.d.ts +22 -0
  541. package/dist/templates/wordmark/lines.d.ts.map +1 -0
  542. package/dist/templates/wordmark/lines.js +61 -0
  543. package/dist/templates/wordmark/lines.js.map +1 -0
  544. package/dist/templates/wordmark/mark.d.ts +16 -0
  545. package/dist/templates/wordmark/mark.d.ts.map +1 -0
  546. package/dist/templates/wordmark/mark.js +30 -0
  547. package/dist/templates/wordmark/mark.js.map +1 -0
  548. package/dist/text/clamp.d.ts +12 -0
  549. package/dist/text/clamp.d.ts.map +1 -0
  550. package/dist/text/clamp.js +41 -0
  551. package/dist/text/clamp.js.map +1 -0
  552. package/dist/text/ellipsis.d.ts +3 -0
  553. package/dist/text/ellipsis.d.ts.map +1 -0
  554. package/dist/text/ellipsis.js +3 -0
  555. package/dist/text/ellipsis.js.map +1 -0
  556. package/dist/text/index.d.ts +2 -0
  557. package/dist/text/index.d.ts.map +1 -1
  558. package/dist/text/index.js +2 -0
  559. package/dist/text/index.js.map +1 -1
  560. package/dist/texture/grain.d.ts +17 -0
  561. package/dist/texture/grain.d.ts.map +1 -0
  562. package/dist/texture/grain.js +29 -0
  563. package/dist/texture/grain.js.map +1 -0
  564. package/dist/texture/index.d.ts +11 -0
  565. package/dist/texture/index.d.ts.map +1 -0
  566. package/dist/texture/index.js +20 -0
  567. package/dist/texture/index.js.map +1 -0
  568. package/dist/texture/pattern.d.ts +17 -0
  569. package/dist/texture/pattern.d.ts.map +1 -0
  570. package/dist/texture/pattern.js +45 -0
  571. package/dist/texture/pattern.js.map +1 -0
  572. package/dist/texture/resolve.d.ts +16 -0
  573. package/dist/texture/resolve.d.ts.map +1 -0
  574. package/dist/texture/resolve.js +20 -0
  575. package/dist/texture/resolve.js.map +1 -0
  576. package/dist/theme/index.d.ts +27 -0
  577. package/dist/theme/index.d.ts.map +1 -0
  578. package/dist/theme/index.js +41 -0
  579. package/dist/theme/index.js.map +1 -0
  580. package/dist/theme/presets.d.ts +38 -0
  581. package/dist/theme/presets.d.ts.map +1 -0
  582. package/dist/theme/presets.js +150 -0
  583. package/dist/theme/presets.js.map +1 -0
  584. package/dist/types.d.ts +281 -10
  585. package/dist/types.d.ts.map +1 -1
  586. package/dist/validate/background.d.ts +12 -0
  587. package/dist/validate/background.d.ts.map +1 -0
  588. package/dist/validate/background.js +53 -0
  589. package/dist/validate/background.js.map +1 -0
  590. package/dist/validate/collect.d.ts +9 -0
  591. package/dist/validate/collect.d.ts.map +1 -0
  592. package/dist/validate/collect.js +35 -0
  593. package/dist/validate/collect.js.map +1 -0
  594. package/dist/validate/index.d.ts.map +1 -1
  595. package/dist/validate/index.js +2 -20
  596. package/dist/validate/index.js.map +1 -1
  597. package/dist/validate/keys.d.ts +22 -0
  598. package/dist/validate/keys.d.ts.map +1 -1
  599. package/dist/validate/keys.js +69 -0
  600. package/dist/validate/keys.js.map +1 -1
  601. package/dist/validate/overrides.d.ts.map +1 -1
  602. package/dist/validate/overrides.js +5 -1
  603. package/dist/validate/overrides.js.map +1 -1
  604. package/dist/validate/texture.d.ts +11 -0
  605. package/dist/validate/texture.d.ts.map +1 -0
  606. package/dist/validate/texture.js +34 -0
  607. package/dist/validate/texture.js.map +1 -0
  608. package/dist/validate/values.d.ts +16 -10
  609. package/dist/validate/values.d.ts.map +1 -1
  610. package/dist/validate/values.js +31 -44
  611. package/dist/validate/values.js.map +1 -1
  612. package/package.json +16 -2
  613. package/dist/background.d.ts.map +0 -1
  614. package/dist/background.js +0 -65
  615. package/dist/background.js.map +0 -1
  616. package/dist/cli/args.d.ts +0 -14
  617. package/dist/cli/args.d.ts.map +0 -1
  618. package/dist/cli/args.js +0 -67
  619. package/dist/cli/args.js.map +0 -1
  620. package/dist/cli.d.ts +0 -3
  621. package/dist/cli.d.ts.map +0 -1
  622. package/dist/cli.js +0 -102
  623. package/dist/cli.js.map +0 -1
  624. package/dist/config.d.ts +0 -95
  625. package/dist/config.d.ts.map +0 -1
  626. package/dist/config.js +0 -208
  627. package/dist/config.js.map +0 -1
  628. package/dist/fonts.d.ts +0 -18
  629. package/dist/fonts.d.ts.map +0 -1
  630. package/dist/fonts.js +0 -102
  631. package/dist/fonts.js.map +0 -1
  632. package/dist/generate.d.ts +0 -63
  633. package/dist/generate.d.ts.map +0 -1
  634. package/dist/generate.js +0 -109
  635. package/dist/generate.js.map +0 -1
  636. package/dist/highlight.d.ts +0 -75
  637. package/dist/highlight.d.ts.map +0 -1
  638. package/dist/highlight.js +0 -137
  639. package/dist/highlight.js.map +0 -1
  640. package/dist/render.d.ts +0 -24
  641. package/dist/render.d.ts.map +0 -1
  642. package/dist/render.js +0 -77
  643. package/dist/render.js.map +0 -1
  644. package/dist/stamp.d.ts +0 -29
  645. package/dist/stamp.d.ts.map +0 -1
  646. package/dist/stamp.js +0 -198
  647. package/dist/stamp.js.map +0 -1
  648. package/dist/templates/banner.d.ts +0 -9
  649. package/dist/templates/banner.d.ts.map +0 -1
  650. package/dist/templates/banner.js +0 -115
  651. package/dist/templates/banner.js.map +0 -1
  652. package/dist/templates/card.d.ts +0 -7
  653. package/dist/templates/card.d.ts.map +0 -1
  654. package/dist/templates/card.js +0 -72
  655. package/dist/templates/card.js.map +0 -1
  656. package/dist/templates/code.d.ts +0 -12
  657. package/dist/templates/code.d.ts.map +0 -1
  658. package/dist/templates/code.js +0 -275
  659. package/dist/templates/code.js.map +0 -1
  660. package/dist/templates/measure.d.ts +0 -11
  661. package/dist/templates/measure.d.ts.map +0 -1
  662. package/dist/templates/measure.js +0 -11
  663. package/dist/templates/measure.js.map +0 -1
  664. package/dist/templates/props.d.ts +0 -7
  665. package/dist/templates/props.d.ts.map +0 -1
  666. package/dist/templates/props.js +0 -17
  667. package/dist/templates/props.js.map +0 -1
  668. package/dist/templates/text.d.ts +0 -37
  669. package/dist/templates/text.d.ts.map +0 -1
  670. package/dist/templates/text.js +0 -26
  671. package/dist/templates/text.js.map +0 -1
  672. package/dist/text/stack.d.ts +0 -24
  673. package/dist/text/stack.d.ts.map +0 -1
  674. package/dist/text/stack.js +0 -18
  675. package/dist/text/stack.js.map +0 -1
  676. package/dist/text.d.ts +0 -56
  677. package/dist/text.d.ts.map +0 -1
  678. package/dist/text.js +0 -78
  679. package/dist/text.js.map +0 -1
  680. package/dist/validate/sizes.d.ts +0 -9
  681. package/dist/validate/sizes.d.ts.map +0 -1
  682. package/dist/validate/sizes.js +0 -27
  683. package/dist/validate/sizes.js.map +0 -1
  684. package/dist/validate.d.ts +0 -15
  685. package/dist/validate.d.ts.map +0 -1
  686. package/dist/validate.js +0 -300
  687. package/dist/validate.js.map +0 -1
@@ -1,31 +1,19 @@
1
- import { crc32 } from "node:zlib";
1
+ import { chunkBytes, pngSignature } from "../png/chunk.js";
2
2
  /**
3
3
  * PNG `tEXt` keyword the stamp is stored under. Keeping it in the image means
4
4
  * there is no sidecar file to fall out of sync, and deleting an image deletes
5
5
  * its stamp with it.
6
6
  */
7
7
  export const stampKeyword = "colophon";
8
- /** The eight bytes every PNG file starts with. */
9
- export const pngSignature = Buffer.from([
10
- 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
11
- ]);
12
8
  /** Signature + the whole `IHDR` chunk: length, type, 13 bytes of data, CRC. */
13
9
  export const afterHeader = pngSignature.length + 4 + 4 + 13 + 4;
14
- /**
15
- * A PNG `tEXt` chunk: length, type, `keyword\0text`, CRC over type and data.
16
- */
17
- function textChunk(keyword, text) {
18
- const data = Buffer.concat([
10
+ /** What a `tEXt` chunk carries: `keyword\0text`. */
11
+ function textData(keyword, text) {
12
+ return Buffer.concat([
19
13
  Buffer.from(keyword, "latin1"),
20
14
  Buffer.from([0]),
21
15
  Buffer.from(text, "latin1"),
22
16
  ]);
23
- const chunk = Buffer.alloc(4 + 4 + data.length + 4);
24
- chunk.writeUInt32BE(data.length, 0);
25
- chunk.write("tEXt", 4, "latin1");
26
- data.copy(chunk, 8);
27
- chunk.writeUInt32BE(crc32(chunk.subarray(4, 8 + data.length)), 8 + data.length);
28
- return chunk;
29
17
  }
30
18
  /**
31
19
  * Return `png` with the stamp embedded as a `tEXt` chunk, inserted straight
@@ -35,11 +23,15 @@ export function stampPng(png, stamp) {
35
23
  if (png.length < afterHeader ||
36
24
  !png.subarray(0, pngSignature.length).equals(pngSignature) ||
37
25
  png.toString("latin1", 12, 16) !== "IHDR") {
38
- throw new Error("Cannot stamp: not a PNG image.");
26
+ // Reachable in practice only through a configured rasteriser, since resvg
27
+ // writes nothing else. Saying why beats leaving someone to work out that
28
+ // the stamp is the reason their WebP backend cannot be used yet.
29
+ throw new Error("Cannot stamp: not a PNG image. The rebuild stamp is a PNG chunk, so a" +
30
+ " rasteriser has to produce PNG for a build to be able to skip it.");
39
31
  }
40
32
  return Buffer.concat([
41
33
  png.subarray(0, afterHeader),
42
- textChunk(stampKeyword, stamp),
34
+ chunkBytes("tEXt", textData(stampKeyword, stamp)),
43
35
  png.subarray(afterHeader),
44
36
  ]);
45
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"chunk.js","sourceRoot":"","sources":["../../src/stamp/chunk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AAEvC,kDAAkD;AAClD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC;IACtC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CAC/C,CAAC,CAAC;AAEH,+EAA+E;AAC/E,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAEhE;;GAEG;AACH,SAAS,SAAS,CAAC,OAAe,EAAE,IAAY;IAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;KAC5B,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEpD,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACpC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpB,KAAK,CAAC,aAAa,CACjB,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EACzC,CAAC,GAAG,IAAI,CAAC,MAAM,CAChB,CAAC;IAEF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,KAAa;IACjD,IACE,GAAG,CAAC,MAAM,GAAG,WAAW;QACxB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QAC1D,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,MAAM,EACzC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC;QAC5B,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC;QAC9B,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC1B,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"chunk.js","sourceRoot":"","sources":["../../src/stamp/chunk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AAEvC,+EAA+E;AAC/E,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAEhE,oDAAoD;AACpD,SAAS,QAAQ,CAAC,OAAe,EAAE,IAAY;IAC7C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;KAC5B,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,KAAa;IACjD,IACE,GAAG,CAAC,MAAM,GAAG,WAAW;QACxB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QAC1D,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,MAAM,EACzC,CAAC;QACD,0EAA0E;QAC1E,yEAAyE;QACzE,iEAAiE;QACjE,MAAM,IAAI,KAAK,CACb,uEAAuE;YACrE,mEAAmE,CACtE,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC;QAC5B,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACjD,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC1B,CAAC,CAAC;AACL,CAAC"}
@@ -6,6 +6,24 @@ import type { ResolvedConfig } from "../types.js";
6
6
  * `templates`: the one size and the one template an image actually uses go into
7
7
  * its own stamp, so adding a third size or an unrelated custom template does
8
8
  * not invalidate everything already on disk.
9
+ *
10
+ * `compressionLevel` is in even though it cannot change a pixel, which is the
11
+ * rule `onWarning` is left out under. What it changes is every byte of every
12
+ * file, and a project turning it up wants the images it already has rewritten:
13
+ * without this the setting would appear to do nothing until each post next
14
+ * changed, which is the sort of gap that gets reported as a bug.
15
+ *
16
+ * `format`, `quality` and `maxBytes` are in for the same reason, and `emitSvg`
17
+ * for a version of it: turning it on has to write the documents for images that
18
+ * are already on disk, and without this it would write them only for the posts
19
+ * that happened to change next.
20
+ *
21
+ * The rasteriser is in, by its source, since swapping the backend is one of the
22
+ * few config changes that alters every pixel of every image. It is hashed the
23
+ * way a custom template is, with the same gap: source text cannot see a value
24
+ * the function closed over, so a rasteriser configured by something outside
25
+ * itself needs `--force`. For the default it adds nothing the package version
26
+ * was not already saying, which is why there is no special case for it.
9
27
  */
10
28
  export declare function configDigest(config: ResolvedConfig): Promise<string>;
11
29
  //# sourceMappingURL=config-digest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-digest.d.ts","sourceRoot":"","sources":["../../src/stamp/config-digest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAIV,cAAc,EACf,MAAM,aAAa,CAAC;AA6CrB;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB1E"}
1
+ {"version":3,"file":"config-digest.d.ts","sourceRoot":"","sources":["../../src/stamp/config-digest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAIV,cAAc,EACf,MAAM,aAAa,CAAC;AA6CrB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA4B1E"}
@@ -42,6 +42,24 @@ async function backgroundDigest(background) {
42
42
  * `templates`: the one size and the one template an image actually uses go into
43
43
  * its own stamp, so adding a third size or an unrelated custom template does
44
44
  * not invalidate everything already on disk.
45
+ *
46
+ * `compressionLevel` is in even though it cannot change a pixel, which is the
47
+ * rule `onWarning` is left out under. What it changes is every byte of every
48
+ * file, and a project turning it up wants the images it already has rewritten:
49
+ * without this the setting would appear to do nothing until each post next
50
+ * changed, which is the sort of gap that gets reported as a bug.
51
+ *
52
+ * `format`, `quality` and `maxBytes` are in for the same reason, and `emitSvg`
53
+ * for a version of it: turning it on has to write the documents for images that
54
+ * are already on disk, and without this it would write them only for the posts
55
+ * that happened to change next.
56
+ *
57
+ * The rasteriser is in, by its source, since swapping the backend is one of the
58
+ * few config changes that alters every pixel of every image. It is hashed the
59
+ * way a custom template is, with the same gap: source text cannot see a value
60
+ * the function closed over, so a rasteriser configured by something outside
61
+ * itself needs `--force`. For the default it adds nothing the package version
62
+ * was not already saying, which is why there is no special case for it.
45
63
  */
46
64
  export async function configDigest(config) {
47
65
  const fonts = await Promise.all(config.fonts.map(async (font) => fontDigest(font)));
@@ -50,6 +68,7 @@ export async function configDigest(config) {
50
68
  version: await packageVersion(),
51
69
  colors: config.colors,
52
70
  background: await backgroundDigest(config.background),
71
+ texture: config.texture,
53
72
  fonts,
54
73
  logo,
55
74
  systemFonts: config.systemFonts,
@@ -57,6 +76,12 @@ export async function configDigest(config) {
57
76
  footer: config.footer,
58
77
  badge: config.badge,
59
78
  code: config.code,
79
+ rasteriser: config.rasteriser.toString(),
80
+ compressionLevel: config.compressionLevel,
81
+ format: config.format,
82
+ quality: config.quality,
83
+ maxBytes: config.maxBytes,
84
+ emitSvg: config.emitSvg,
60
85
  }));
61
86
  }
62
87
  //# sourceMappingURL=config-digest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-digest.js","sourceRoot":"","sources":["../../src/stamp/config-digest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAQ5C,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEtD;;;;;GAKG;AACH,KAAK,UAAU,cAAc;IAC3B,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAC7B,IAAI,GAAG,CAAC,oBAAoB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAC9C,MAAM,CACP,CAAC;IACF,OAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAyB,CAAC,OAAO,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,UAAU,CAAC,IAAgB;IACxC,MAAM,KAAK,GAAG,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrE,OAAO,MAAM,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,WAAW,CAAC,MAAmB;IAC5C,OAAO,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAAC,UAAsB;IACpD,OAAO,UAAU,CAAC,IAAI,KAAK,OAAO;QAChC,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QACjE,CAAC,CAAC,UAAU,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAsB;IACvD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CACnD,CAAC;IACF,MAAM,IAAI,GACR,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEzE,OAAO,MAAM,CACX,eAAe,CAAC;QACd,OAAO,EAAE,MAAM,cAAc,EAAE;QAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,MAAM,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC;QACrD,KAAK;QACL,IAAI;QACJ,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config-digest.js","sourceRoot":"","sources":["../../src/stamp/config-digest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAQ5C,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEtD;;;;;GAKG;AACH,KAAK,UAAU,cAAc;IAC3B,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAC7B,IAAI,GAAG,CAAC,oBAAoB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAC9C,MAAM,CACP,CAAC;IACF,OAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAyB,CAAC,OAAO,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,UAAU,CAAC,IAAgB;IACxC,MAAM,KAAK,GAAG,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrE,OAAO,MAAM,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,WAAW,CAAC,MAAmB;IAC5C,OAAO,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAAC,UAAsB;IACpD,OAAO,UAAU,CAAC,IAAI,KAAK,OAAO;QAChC,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QACjE,CAAC,CAAC,UAAU,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAsB;IACvD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CACnD,CAAC;IACF,MAAM,IAAI,GACR,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEzE,OAAO,MAAM,CACX,eAAe,CAAC;QACd,OAAO,EAAE,MAAM,cAAc,EAAE;QAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,MAAM,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC;QACrD,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK;QACL,IAAI;QACJ,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE;QACxC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { MetaImageProps, OutputSize, ResolvedConfig } from "../types.js";
2
- export { stampPng } from "./chunk.js";
3
- export { readPngStamp } from "./read.js";
2
+ export { stampImage } from "./write.js";
3
+ export { readImageStamp } from "./read.js";
4
4
  /**
5
5
  * Computes stamps for the images rendered from one resolved config.
6
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stamp/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI9E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;CACxD;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAqC5E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stamp/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI9E,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;CACxD;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAqC5E"}
@@ -1,7 +1,7 @@
1
1
  import { configDigest } from "./config-digest.js";
2
2
  import { sha256, stableStringify } from "./digest.js";
3
- export { stampPng } from "./chunk.js";
4
- export { readPngStamp } from "./read.js";
3
+ export { stampImage } from "./write.js";
4
+ export { readImageStamp } from "./read.js";
5
5
  /**
6
6
  * Build a {@link Stamper} for a resolved config. Asynchronous because it reads
7
7
  * the configured font files; do it once per run rather than once per image.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stamp/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAczC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAsB;IACxD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAElD,4EAA4E;IAC5E,4EAA4E;IAC5E,4EAA4E;IAC5E,0EAA0E;IAC1E,8EAA8E;IAC9E,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE;QAC9C,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,MAAM,GACV,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnE,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,CAAC,KAAK,EAAE,IAAI;YACf,OAAO,MAAM,CACX,eAAe,CAAC;gBACd,IAAI;gBACJ,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC9B,kEAAkE;gBAClE,kEAAkE;gBAClE,IAAI;gBACJ,KAAK;aACN,CAAC,CACH,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stamp/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAc3C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAsB;IACxD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAElD,4EAA4E;IAC5E,4EAA4E;IAC5E,4EAA4E;IAC5E,0EAA0E;IAC1E,8EAA8E;IAC9E,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE;QAC9C,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,MAAM,GACV,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnE,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,CAAC,KAAK,EAAE,IAAI;YACf,OAAO,MAAM,CACX,eAAe,CAAC;gBACd,IAAI;gBACJ,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC9B,kEAAkE;gBAClE,kEAAkE;gBAClE,IAAI;gBACJ,KAAK;aACN,CAAC,CACH,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Keyword the stamp is stored under, in whichever container it goes into.
3
+ * Keeping the stamp in the image means there is no sidecar file to fall out of
4
+ * sync, and deleting an image deletes its stamp with it.
5
+ */
6
+ export declare const stampKeyword = "colophon";
7
+ /**
8
+ * What a carrier stores: `keyword\0text`.
9
+ *
10
+ * That is the shape of a PNG `tEXt` chunk, which is where the stamp started,
11
+ * and the other containers reuse it rather than each inventing one. The keyword
12
+ * is what tells Colophon's own note from somebody else's, and where a container
13
+ * has the stamp appended to it, it is also what finds it again.
14
+ */
15
+ export declare function stampPayload(stamp: string): Buffer;
16
+ /** The stamp in `payload`, or `undefined` where the note is somebody else's. */
17
+ export declare function stampFromPayload(payload: Buffer): string | undefined;
18
+ /**
19
+ * Where the payload starts in a window taken from the end of a file, or `-1`.
20
+ *
21
+ * Searched backwards because the stamp is the last thing an appending carrier
22
+ * writes, so the last match is Colophon's own and anything earlier is the same
23
+ * eight letters happening to turn up in compressed image data. The header in
24
+ * front of it is then checked, which is what turns a likely match into a
25
+ * certain one.
26
+ */
27
+ export declare function findPayload(window: Buffer): number;
28
+ //# sourceMappingURL=payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../src/stamp/payload.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,YAAY,aAAa,CAAC;AAEvC;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOpE;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Keyword the stamp is stored under, in whichever container it goes into.
3
+ * Keeping the stamp in the image means there is no sidecar file to fall out of
4
+ * sync, and deleting an image deletes its stamp with it.
5
+ */
6
+ export const stampKeyword = "colophon";
7
+ /**
8
+ * What a carrier stores: `keyword\0text`.
9
+ *
10
+ * That is the shape of a PNG `tEXt` chunk, which is where the stamp started,
11
+ * and the other containers reuse it rather than each inventing one. The keyword
12
+ * is what tells Colophon's own note from somebody else's, and where a container
13
+ * has the stamp appended to it, it is also what finds it again.
14
+ */
15
+ export function stampPayload(stamp) {
16
+ return Buffer.concat([
17
+ Buffer.from(stampKeyword, "latin1"),
18
+ Buffer.from([0]),
19
+ Buffer.from(stamp, "latin1"),
20
+ ]);
21
+ }
22
+ /** The stamp in `payload`, or `undefined` where the note is somebody else's. */
23
+ export function stampFromPayload(payload) {
24
+ const separator = payload.indexOf(0);
25
+ return separator !== -1 &&
26
+ payload.toString("latin1", 0, separator) === stampKeyword
27
+ ? payload.toString("latin1", separator + 1)
28
+ : undefined;
29
+ }
30
+ /**
31
+ * Where the payload starts in a window taken from the end of a file, or `-1`.
32
+ *
33
+ * Searched backwards because the stamp is the last thing an appending carrier
34
+ * writes, so the last match is Colophon's own and anything earlier is the same
35
+ * eight letters happening to turn up in compressed image data. The header in
36
+ * front of it is then checked, which is what turns a likely match into a
37
+ * certain one.
38
+ */
39
+ export function findPayload(window) {
40
+ return window.lastIndexOf(Buffer.from(stampKeyword, "latin1"));
41
+ }
42
+ //# sourceMappingURL=payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../src/stamp/payload.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AAEvC;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;KAC7B,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAErC,OAAO,SAAS,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,KAAK,YAAY;QACzD,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,CAAC,CAAC;QAC3C,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjE,CAAC"}
@@ -1,7 +1,8 @@
1
1
  /**
2
- * Read the stamp out of a PNG file. Returns `undefined` when the file is
3
- * missing, unreadable, not a PNG, or carries no stamp, all of which mean the
4
- * image cannot be shown to be up to date, so it should be rendered again.
2
+ * Read the stamp out of an image file. Returns `undefined` when the file is
3
+ * missing, unreadable, in a format no carrier knows, or carries no stamp, all
4
+ * of which mean the image cannot be shown to be up to date, so it should be
5
+ * rendered again.
5
6
  */
6
- export declare function readPngStamp(file: string): Promise<string | undefined>;
7
+ export declare function readImageStamp(file: string): Promise<string | undefined>;
7
8
  //# sourceMappingURL=read.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/stamp/read.ts"],"names":[],"mappings":"AAqDA;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgB5E"}
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/stamp/read.ts"],"names":[],"mappings":"AAwCA;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAc7B"}
@@ -1,48 +1,33 @@
1
1
  import { open } from "node:fs/promises";
2
- import { pngSignature, stampKeyword } from "./chunk.js";
3
- /**
4
- * How much of a PNG to read when looking for a stamp. The stamp goes in
5
- * immediately after `IHDR`, so this only has to cover the header. Reading
6
- * whole images just to compare a hash would defeat the point of skipping them.
7
- */
8
- const headBytes = 4096;
9
- /**
10
- * Find the stamp in the leading bytes of a PNG, or `undefined` if there is
11
- * none, meaning the image was written by something else, or by a Colophon
12
- * that did not stamp yet.
13
- */
14
- function findStamp(head) {
15
- if (!head.subarray(0, pngSignature.length).equals(pngSignature)) {
16
- return undefined;
17
- }
18
- let offset = pngSignature.length;
19
- while (offset + 8 <= head.length) {
20
- const length = head.readUInt32BE(offset);
21
- const type = head.toString("latin1", offset + 4, offset + 8);
22
- const start = offset + 8;
23
- const end = start + length;
24
- // Image data starts here; anything past it is not worth reading for a hash.
25
- if (type === "IDAT" || type === "IEND" || end > head.length) {
26
- return undefined;
27
- }
28
- if (type === "tEXt") {
29
- const data = head.subarray(start, end);
30
- const separator = data.indexOf(0);
31
- if (separator !== -1 &&
32
- data.toString("latin1", 0, separator) === stampKeyword) {
33
- return data.toString("latin1", separator + 1);
34
- }
35
- }
36
- offset = end + 4;
2
+ import { carrierFor } from "./carrier/index.js";
3
+ import { stampWindow } from "./window.js";
4
+ async function readAt(handle, position, length) {
5
+ const buffer = Buffer.alloc(length);
6
+ const { bytesRead } = await handle.read(buffer, 0, length, position);
7
+ return buffer.subarray(0, bytesRead);
8
+ }
9
+ /** The window a carrier reads from; for a short file that is the whole of it. */
10
+ async function windowFor(carrier, handle, head) {
11
+ if (carrier.end === "head" || head.length < stampWindow) {
12
+ return head;
37
13
  }
38
- return undefined;
14
+ const { size } = await handle.stat();
15
+ return readAt(handle, size - stampWindow, stampWindow);
16
+ }
17
+ async function stampIn(handle) {
18
+ const head = await readAt(handle, 0, stampWindow);
19
+ const carrier = carrierFor(head);
20
+ return carrier === undefined
21
+ ? undefined
22
+ : carrier.read(await windowFor(carrier, handle, head));
39
23
  }
40
24
  /**
41
- * Read the stamp out of a PNG file. Returns `undefined` when the file is
42
- * missing, unreadable, not a PNG, or carries no stamp, all of which mean the
43
- * image cannot be shown to be up to date, so it should be rendered again.
25
+ * Read the stamp out of an image file. Returns `undefined` when the file is
26
+ * missing, unreadable, in a format no carrier knows, or carries no stamp, all
27
+ * of which mean the image cannot be shown to be up to date, so it should be
28
+ * rendered again.
44
29
  */
45
- export async function readPngStamp(file) {
30
+ export async function readImageStamp(file) {
46
31
  let handle;
47
32
  try {
48
33
  handle = await open(file, "r");
@@ -51,9 +36,7 @@ export async function readPngStamp(file) {
51
36
  return undefined;
52
37
  }
53
38
  try {
54
- const buffer = Buffer.alloc(headBytes);
55
- const { bytesRead } = await handle.read(buffer, 0, headBytes, 0);
56
- return findStamp(buffer.subarray(0, bytesRead));
39
+ return await stampIn(handle);
57
40
  }
58
41
  finally {
59
42
  await handle.close();
@@ -1 +1 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/stamp/read.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAExD;;;;GAIG;AACH,MAAM,SAAS,GAAG,IAAI,CAAC;AAEvB;;;;GAIG;AACH,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAChE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IAEjC,OAAO,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,KAAK,GAAG,MAAM,CAAC;QAE3B,4EAA4E;QAC5E,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5D,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAElC,IACE,SAAS,KAAK,CAAC,CAAC;gBAChB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,KAAK,YAAY,EACtD,CAAC;gBACD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,IAAI,MAAkB,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QACjE,OAAO,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAClD,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/stamp/read.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,KAAK,UAAU,MAAM,CACnB,MAAkB,EAClB,QAAgB,EAChB,MAAc;IAEd,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,iFAAiF;AACjF,KAAK,UAAU,SAAS,CACtB,OAAqB,EACrB,MAAkB,EAClB,IAAY;IAEZ,IAAI,OAAO,CAAC,GAAG,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACrC,OAAO,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,WAAW,EAAE,WAAW,CAAC,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,MAAkB;IACvC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAEjC,OAAO,OAAO,KAAK,SAAS;QAC1B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAY;IAEZ,IAAI,MAAkB,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * How close to one end of a file a stamp has to sit.
3
+ *
4
+ * A build reads this much and stops, at the front for a carrier that writes
5
+ * near the header and at the back for one that appends, so deciding to skip an
6
+ * image never means reading the whole of it. Both halves need the number: the
7
+ * reader to know how much to take, and a carrier that chooses where to write to
8
+ * keep inside it.
9
+ */
10
+ export declare const stampWindow = 4096;
11
+ //# sourceMappingURL=window.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../src/stamp/window.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,OAAO,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * How close to one end of a file a stamp has to sit.
3
+ *
4
+ * A build reads this much and stops, at the front for a carrier that writes
5
+ * near the header and at the back for one that appends, so deciding to skip an
6
+ * image never means reading the whole of it. Both halves need the number: the
7
+ * reader to know how much to take, and a carrier that chooses where to write to
8
+ * keep inside it.
9
+ */
10
+ export const stampWindow = 4096;
11
+ //# sourceMappingURL=window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"window.js","sourceRoot":"","sources":["../../src/stamp/window.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Return `image` with `stamp` embedded, so that the build after this one can
3
+ * read it back and leave the file alone.
4
+ *
5
+ * The stamp goes inside the image rather than into a file beside it, which is
6
+ * what keeps the two from parting company: an image carries its stamp when it
7
+ * is copied, and loses it when it is deleted or rewritten by something else,
8
+ * both of which are the answer a build wants.
9
+ *
10
+ * Nothing about the picture changes. A PNG gains a `tEXt` chunk and a JPEG a
11
+ * `COM` segment, both among the metadata before the image data; a WebP gains a
12
+ * chunk and an AVIF a `uuid` box, both on the end, since those two locate their
13
+ * picture by an offset that inserting bytes earlier would move.
14
+ *
15
+ * A format none of the carriers knows throws rather than being written
16
+ * unstamped, because an image no build can ever skip is a worse thing to hand
17
+ * back quietly than an error naming what went wrong. Reachable only through a
18
+ * configured rasteriser, since resvg writes PNG and nothing else.
19
+ */
20
+ export declare function stampImage(image: Buffer, stamp: string): Buffer;
21
+ //# sourceMappingURL=write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/stamp/write.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAY/D"}
@@ -0,0 +1,31 @@
1
+ import { carrierFor, carrierFormats } from "./carrier/index.js";
2
+ import { stampPayload } from "./payload.js";
3
+ /**
4
+ * Return `image` with `stamp` embedded, so that the build after this one can
5
+ * read it back and leave the file alone.
6
+ *
7
+ * The stamp goes inside the image rather than into a file beside it, which is
8
+ * what keeps the two from parting company: an image carries its stamp when it
9
+ * is copied, and loses it when it is deleted or rewritten by something else,
10
+ * both of which are the answer a build wants.
11
+ *
12
+ * Nothing about the picture changes. A PNG gains a `tEXt` chunk and a JPEG a
13
+ * `COM` segment, both among the metadata before the image data; a WebP gains a
14
+ * chunk and an AVIF a `uuid` box, both on the end, since those two locate their
15
+ * picture by an offset that inserting bytes earlier would move.
16
+ *
17
+ * A format none of the carriers knows throws rather than being written
18
+ * unstamped, because an image no build can ever skip is a worse thing to hand
19
+ * back quietly than an error naming what went wrong. Reachable only through a
20
+ * configured rasteriser, since resvg writes PNG and nothing else.
21
+ */
22
+ export function stampImage(image, stamp) {
23
+ const carrier = carrierFor(image);
24
+ if (carrier === undefined) {
25
+ throw new Error("Cannot stamp: unrecognised image format. The rebuild stamp goes inside" +
26
+ " the image, so a rasteriser has to produce one of" +
27
+ ` ${carrierFormats()} for a build to be able to skip it.`);
28
+ }
29
+ return carrier.write(image, stampPayload(stamp));
30
+ }
31
+ //# sourceMappingURL=write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/stamp/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,KAAa;IACrD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAElC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,wEAAwE;YACtE,mDAAmD;YACnD,IAAI,cAAc,EAAE,qCAAqC,CAC5D,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ImageAsset, MeasureText, ResolvedConfig } from "../../types.js";
2
+ import type { Frame } from "../frame.js";
3
+ /**
4
+ * The bottom line: who wrote the post at the left, whose site it is at the
5
+ * right.
6
+ *
7
+ * The two are measured against each other rather than drawn and hoped for. A
8
+ * byline is a person's name and a date, a footer is a domain, and both are as
9
+ * long as they are, so on a landscape image they meet in the middle and
10
+ * overlap. The site's footer keeps its room, since it is the same on every
11
+ * image and a build can be sure it fits, and the byline takes what is left and
12
+ * is cut to it.
13
+ */
14
+ export declare function articleBottom(said: readonly string[], config: ResolvedConfig, frame: Frame, imageWidth: number, avatar: ImageAsset | undefined, measure: MeasureText): string;
15
+ //# sourceMappingURL=bottom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bottom.d.ts","sourceRoot":"","sources":["../../../src/templates/article/bottom.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAG9E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAyBzC;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,OAAO,EAAE,WAAW,GACnB,MAAM,CA+CR"}
@@ -0,0 +1,61 @@
1
+ import { clampLine, measureIn } from "../../layout/index.js";
2
+ import { byline } from "../byline.js";
3
+ import { footerElement, hasFooter } from "../footer.js";
4
+ import { portraitAdvance } from "../portrait.js";
5
+ /** Clear space between the byline and the footer at the other end. */
6
+ const gapScale = 1.2;
7
+ /**
8
+ * The longest form of the byline that fits the room it has, cut only when even
9
+ * the shortest of them does not.
10
+ */
11
+ function fitByline(parts, room, measure, fontSize) {
12
+ for (const part of parts) {
13
+ if (measure(part, fontSize) <= room) {
14
+ return part;
15
+ }
16
+ }
17
+ return clampLine(parts.at(-1) ?? "", room, measure, fontSize);
18
+ }
19
+ /**
20
+ * The bottom line: who wrote the post at the left, whose site it is at the
21
+ * right.
22
+ *
23
+ * The two are measured against each other rather than drawn and hoped for. A
24
+ * byline is a person's name and a date, a footer is a domain, and both are as
25
+ * long as they are, so on a landscape image they meet in the middle and
26
+ * overlap. The site's footer keeps its room, since it is the same on every
27
+ * image and a build can be sure it fits, and the byline takes what is left and
28
+ * is cut to it.
29
+ */
30
+ export function articleBottom(said, config, frame, imageWidth, avatar, measure) {
31
+ const { pad, footerFontSize: fontSize } = frame;
32
+ const footer = hasFooter(config) ? (config.footer ?? "") : "";
33
+ const footerWidth = footer === ""
34
+ ? 0
35
+ : measureIn(measure, config.fontFamily, 500)(footer, fontSize) +
36
+ fontSize * gapScale;
37
+ const room = imageWidth -
38
+ pad * 2 -
39
+ Math.round(footerWidth) -
40
+ (avatar === undefined ? 0 : portraitAdvance(fontSize));
41
+ return (byline(fitByline(said, room, measureIn(measure, config.fontFamily, 600), fontSize), {
42
+ x: pad,
43
+ y: frame.footerY,
44
+ fontSize,
45
+ opacity: 0.9,
46
+ left: pad,
47
+ width: imageWidth - pad * 2,
48
+ }, {
49
+ fontFamily: config.fontFamily,
50
+ fontWeight: 600,
51
+ fill: config.colors.foreground,
52
+ }, avatar, measure) +
53
+ footerElement(config, {
54
+ x: imageWidth - pad,
55
+ y: frame.footerY,
56
+ fontSize,
57
+ opacity: 0.7,
58
+ anchor: "end",
59
+ }));
60
+ }
61
+ //# sourceMappingURL=bottom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bottom.js","sourceRoot":"","sources":["../../../src/templates/article/bottom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAG7D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,sEAAsE;AACtE,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB;;;GAGG;AACH,SAAS,SAAS,CAChB,KAAwB,EACxB,IAAY,EACZ,OAAkB,EAClB,QAAgB;IAEhB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAuB,EACvB,MAAsB,EACtB,KAAY,EACZ,UAAkB,EAClB,MAA8B,EAC9B,OAAoB;IAEpB,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAChD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,MAAM,WAAW,GACf,MAAM,KAAK,EAAE;QACX,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC;YAC5D,QAAQ,GAAG,QAAQ,CAAC;IAE1B,MAAM,IAAI,GACR,UAAU;QACV,GAAG,GAAG,CAAC;QACP,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;QACvB,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEzD,OAAO,CACL,MAAM,CACJ,SAAS,CACP,IAAI,EACJ,IAAI,EACJ,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,EAC1C,QAAQ,CACT,EACD;QACE,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,KAAK,CAAC,OAAO;QAChB,QAAQ;QACR,OAAO,EAAE,GAAG;QACZ,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,UAAU,GAAG,GAAG,GAAG,CAAC;KAC5B,EACD;QACE,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,GAAG;QACf,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;KAC/B,EACD,MAAM,EACN,OAAO,CACR;QACD,aAAa,CAAC,MAAM,EAAE;YACpB,CAAC,EAAE,UAAU,GAAG,GAAG;YACnB,CAAC,EAAE,KAAK,CAAC,OAAO;YAChB,QAAQ;YACR,OAAO,EAAE,GAAG;YACZ,MAAM,EAAE,KAAK;SACd,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Template } from "../../types.js";
2
+ /**
3
+ * The default blog card: tags along the top, the headline and its standfirst
4
+ * in the middle, and who wrote it and when along the bottom.
5
+ *
6
+ * It reads `tags`, `author` and `date` on top of the usual `title` and
7
+ * `subtitle`, and draws the `avatar` prop beside the byline rather than beside
8
+ * the footer. That leaves the two ends of the bottom line saying different
9
+ * things: who wrote this post at the left, and whose site it is at the right.
10
+ */
11
+ export declare const articleTemplate: Template;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/article/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,gBAAgB,CAAC;AAOhE;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,EAAE,QAmD7B,CAAC"}