@kensio/colophon 2.5.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 (622) hide show
  1. package/README.md +91 -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/cli/args/command.d.ts +13 -0
  7. package/dist/cli/args/command.d.ts.map +1 -0
  8. package/dist/cli/args/command.js +22 -0
  9. package/dist/cli/args/command.js.map +1 -0
  10. package/dist/cli/args/index.d.ts +28 -0
  11. package/dist/cli/args/index.d.ts.map +1 -0
  12. package/dist/cli/args/index.js +75 -0
  13. package/dist/cli/args/index.js.map +1 -0
  14. package/dist/cli/args/switches.d.ts +18 -0
  15. package/dist/cli/args/switches.d.ts.map +1 -0
  16. package/dist/cli/args/switches.js +42 -0
  17. package/dist/cli/args/switches.js.map +1 -0
  18. package/dist/cli/args/usage.d.ts +3 -0
  19. package/dist/cli/args/usage.d.ts.map +1 -0
  20. package/dist/cli/args/usage.js +34 -0
  21. package/dist/cli/args/usage.js.map +1 -0
  22. package/dist/cli/args/values.d.ts +11 -0
  23. package/dist/cli/args/values.d.ts.map +1 -0
  24. package/dist/cli/args/values.js +29 -0
  25. package/dist/cli/args/values.js.map +1 -0
  26. package/dist/cli/build.d.ts +10 -0
  27. package/dist/cli/build.d.ts.map +1 -0
  28. package/dist/cli/build.js +41 -0
  29. package/dist/cli/build.js.map +1 -0
  30. package/dist/cli/eject/adapters.d.ts +20 -0
  31. package/dist/cli/eject/adapters.d.ts.map +1 -0
  32. package/dist/cli/eject/adapters.js +29 -0
  33. package/dist/cli/eject/adapters.js.map +1 -0
  34. package/dist/cli/eject/astro.d.ts +13 -0
  35. package/dist/cli/eject/astro.d.ts.map +1 -0
  36. package/dist/cli/eject/astro.js +35 -0
  37. package/dist/cli/eject/astro.js.map +1 -0
  38. package/dist/cli/eject/hugo.d.ts +19 -0
  39. package/dist/cli/eject/hugo.d.ts.map +1 -0
  40. package/dist/cli/eject/hugo.js +127 -0
  41. package/dist/cli/eject/hugo.js.map +1 -0
  42. package/dist/cli/eject/index.d.ts +15 -0
  43. package/dist/cli/eject/index.d.ts.map +1 -0
  44. package/dist/cli/eject/index.js +46 -0
  45. package/dist/cli/eject/index.js.map +1 -0
  46. package/dist/cli/index.js +25 -20
  47. package/dist/cli/index.js.map +1 -1
  48. package/dist/cli/init/fs.d.ts +5 -0
  49. package/dist/cli/init/fs.d.ts.map +1 -0
  50. package/dist/cli/init/fs.js +19 -0
  51. package/dist/cli/init/fs.js.map +1 -0
  52. package/dist/cli/init/guess.d.ts +9 -0
  53. package/dist/cli/init/guess.d.ts.map +1 -0
  54. package/dist/cli/init/guess.js +27 -0
  55. package/dist/cli/init/guess.js.map +1 -0
  56. package/dist/cli/init/index.d.ts +11 -0
  57. package/dist/cli/init/index.d.ts.map +1 -0
  58. package/dist/cli/init/index.js +36 -0
  59. package/dist/cli/init/index.js.map +1 -0
  60. package/dist/cli/init/module.d.ts +12 -0
  61. package/dist/cli/init/module.d.ts.map +1 -0
  62. package/dist/cli/init/module.js +45 -0
  63. package/dist/cli/init/module.js.map +1 -0
  64. package/dist/cli/init/scaffold.d.ts +10 -0
  65. package/dist/cli/init/scaffold.d.ts.map +1 -0
  66. package/dist/cli/init/scaffold.js +52 -0
  67. package/dist/cli/init/scaffold.js.map +1 -0
  68. package/dist/cli/message.d.ts +7 -0
  69. package/dist/cli/message.d.ts.map +1 -0
  70. package/dist/cli/message.js +9 -0
  71. package/dist/cli/message.js.map +1 -0
  72. package/dist/cli/preview/index.d.ts +13 -0
  73. package/dist/cli/preview/index.d.ts.map +1 -0
  74. package/dist/cli/preview/index.js +27 -0
  75. package/dist/cli/preview/index.js.map +1 -0
  76. package/dist/cli/preview/open.d.ts +10 -0
  77. package/dist/cli/preview/open.d.ts.map +1 -0
  78. package/dist/cli/preview/open.js +32 -0
  79. package/dist/cli/preview/open.js.map +1 -0
  80. package/dist/cli/preview/render.d.ts +23 -0
  81. package/dist/cli/preview/render.d.ts.map +1 -0
  82. package/dist/cli/preview/render.js +40 -0
  83. package/dist/cli/preview/render.js.map +1 -0
  84. package/dist/cli/preview/root.d.ts +17 -0
  85. package/dist/cli/preview/root.d.ts.map +1 -0
  86. package/dist/cli/preview/root.js +22 -0
  87. package/dist/cli/preview/root.js.map +1 -0
  88. package/dist/cli/preview/size.d.ts +7 -0
  89. package/dist/cli/preview/size.d.ts.map +1 -0
  90. package/dist/cli/preview/size.js +13 -0
  91. package/dist/cli/preview/size.js.map +1 -0
  92. package/dist/cli/report.d.ts +6 -0
  93. package/dist/cli/report.d.ts.map +1 -0
  94. package/dist/cli/report.js +23 -0
  95. package/dist/cli/report.js.map +1 -0
  96. package/dist/cli/watch/filter.d.ts +14 -0
  97. package/dist/cli/watch/filter.d.ts.map +1 -0
  98. package/dist/cli/watch/filter.js +16 -0
  99. package/dist/cli/watch/filter.js.map +1 -0
  100. package/dist/cli/watch/index.d.ts +27 -0
  101. package/dist/cli/watch/index.d.ts.map +1 -0
  102. package/dist/cli/watch/index.js +38 -0
  103. package/dist/cli/watch/index.js.map +1 -0
  104. package/dist/cli/watch/queue.d.ts +24 -0
  105. package/dist/cli/watch/queue.d.ts.map +1 -0
  106. package/dist/cli/watch/queue.js +57 -0
  107. package/dist/cli/watch/queue.js.map +1 -0
  108. package/dist/config/defaults.d.ts +39 -1
  109. package/dist/config/defaults.d.ts.map +1 -1
  110. package/dist/config/defaults.js +38 -0
  111. package/dist/config/defaults.js.map +1 -1
  112. package/dist/config/index.d.ts +1 -1
  113. package/dist/config/index.d.ts.map +1 -1
  114. package/dist/config/index.js +18 -4
  115. package/dist/config/index.js.map +1 -1
  116. package/dist/config/output.d.ts +26 -0
  117. package/dist/config/output.d.ts.map +1 -0
  118. package/dist/config/output.js +45 -0
  119. package/dist/config/output.js.map +1 -0
  120. package/dist/config/resolve.d.ts +10 -0
  121. package/dist/config/resolve.d.ts.map +1 -1
  122. package/dist/config/resolve.js +20 -1
  123. package/dist/config/resolve.js.map +1 -1
  124. package/dist/content/index.d.ts +1 -0
  125. package/dist/content/index.d.ts.map +1 -1
  126. package/dist/content/index.js +1 -0
  127. package/dist/content/index.js.map +1 -1
  128. package/dist/content/read.d.ts +15 -0
  129. package/dist/content/read.d.ts.map +1 -0
  130. package/dist/content/read.js +36 -0
  131. package/dist/content/read.js.map +1 -0
  132. package/dist/content/walk.d.ts.map +1 -1
  133. package/dist/content/walk.js +4 -30
  134. package/dist/content/walk.js.map +1 -1
  135. package/dist/core/index.d.ts +37 -0
  136. package/dist/core/index.d.ts.map +1 -0
  137. package/dist/core/index.js +13 -0
  138. package/dist/core/index.js.map +1 -0
  139. package/dist/encode/fit.d.ts +16 -0
  140. package/dist/encode/fit.d.ts.map +1 -0
  141. package/dist/encode/fit.js +23 -0
  142. package/dist/encode/fit.js.map +1 -0
  143. package/dist/encode/format.d.ts +12 -0
  144. package/dist/encode/format.d.ts.map +1 -0
  145. package/dist/encode/format.js +40 -0
  146. package/dist/encode/format.js.map +1 -0
  147. package/dist/encode/index.d.ts +14 -0
  148. package/dist/encode/index.d.ts.map +1 -0
  149. package/dist/encode/index.js +52 -0
  150. package/dist/encode/index.js.map +1 -0
  151. package/dist/encode/sharp.d.ts +19 -0
  152. package/dist/encode/sharp.d.ts.map +1 -0
  153. package/dist/encode/sharp.js +57 -0
  154. package/dist/encode/sharp.js.map +1 -0
  155. package/dist/encode/warn.d.ts +10 -0
  156. package/dist/encode/warn.d.ts.map +1 -0
  157. package/dist/encode/warn.js +31 -0
  158. package/dist/encode/warn.js.map +1 -0
  159. package/dist/fonts/resolve.d.ts.map +1 -1
  160. package/dist/fonts/resolve.js +2 -8
  161. package/dist/fonts/resolve.js.map +1 -1
  162. package/dist/generate/index.d.ts +4 -0
  163. package/dist/generate/index.d.ts.map +1 -1
  164. package/dist/generate/index.js +10 -4
  165. package/dist/generate/index.js.map +1 -1
  166. package/dist/generate/options.d.ts +11 -1
  167. package/dist/generate/options.d.ts.map +1 -1
  168. package/dist/generate/options.js.map +1 -1
  169. package/dist/generate/output-path.d.ts +6 -2
  170. package/dist/generate/output-path.d.ts.map +1 -1
  171. package/dist/generate/output-path.js +7 -2
  172. package/dist/generate/output-path.js.map +1 -1
  173. package/dist/generate/plan.d.ts.map +1 -1
  174. package/dist/generate/plan.js +3 -3
  175. package/dist/generate/plan.js.map +1 -1
  176. package/dist/generate/render-image.d.ts +6 -0
  177. package/dist/generate/render-image.d.ts.map +1 -1
  178. package/dist/generate/render-image.js +14 -4
  179. package/dist/generate/render-image.js.map +1 -1
  180. package/dist/image/index.d.ts +3 -1
  181. package/dist/image/index.d.ts.map +1 -1
  182. package/dist/image/index.js +4 -3
  183. package/dist/image/index.js.map +1 -1
  184. package/dist/image/jpeg.d.ts +5 -4
  185. package/dist/image/jpeg.d.ts.map +1 -1
  186. package/dist/image/jpeg.js +13 -36
  187. package/dist/image/jpeg.js.map +1 -1
  188. package/dist/image/load.d.ts.map +1 -1
  189. package/dist/image/load.js +4 -15
  190. package/dist/image/load.js.map +1 -1
  191. package/dist/image/resolve.d.ts.map +1 -1
  192. package/dist/image/resolve.js +2 -8
  193. package/dist/image/resolve.js.map +1 -1
  194. package/dist/image/uri.d.ts.map +1 -1
  195. package/dist/image/uri.js +2 -3
  196. package/dist/image/uri.js.map +1 -1
  197. package/dist/index.d.ts +8 -4
  198. package/dist/index.d.ts.map +1 -1
  199. package/dist/index.js +10 -3
  200. package/dist/index.js.map +1 -1
  201. package/dist/jpeg/index.d.ts +10 -0
  202. package/dist/jpeg/index.d.ts.map +1 -0
  203. package/dist/jpeg/index.js +2 -0
  204. package/dist/jpeg/index.js.map +1 -0
  205. package/dist/jpeg/segments.d.ts +32 -0
  206. package/dist/jpeg/segments.d.ts.map +1 -0
  207. package/dist/jpeg/segments.js +66 -0
  208. package/dist/jpeg/segments.js.map +1 -0
  209. package/dist/layout/draw.d.ts +20 -0
  210. package/dist/layout/draw.d.ts.map +1 -0
  211. package/dist/layout/draw.js +32 -0
  212. package/dist/layout/draw.js.map +1 -0
  213. package/dist/layout/extent.d.ts +19 -0
  214. package/dist/layout/extent.d.ts.map +1 -0
  215. package/dist/layout/extent.js +24 -0
  216. package/dist/layout/extent.js.map +1 -0
  217. package/dist/layout/index.d.ts +7 -4
  218. package/dist/layout/index.d.ts.map +1 -1
  219. package/dist/layout/index.js +5 -3
  220. package/dist/layout/index.js.map +1 -1
  221. package/dist/layout/lines.d.ts +0 -17
  222. package/dist/layout/lines.d.ts.map +1 -1
  223. package/dist/layout/lines.js +2 -35
  224. package/dist/layout/lines.js.map +1 -1
  225. package/dist/measure/faces.d.ts.map +1 -1
  226. package/dist/measure/faces.js +8 -2
  227. package/dist/measure/faces.js.map +1 -1
  228. package/dist/meta/index.d.ts +1 -0
  229. package/dist/meta/index.d.ts.map +1 -1
  230. package/dist/meta/index.js +1 -0
  231. package/dist/meta/index.js.map +1 -1
  232. package/dist/meta/path.d.ts +24 -0
  233. package/dist/meta/path.d.ts.map +1 -0
  234. package/dist/meta/path.js +41 -0
  235. package/dist/meta/path.js.map +1 -0
  236. package/dist/meta/tags.d.ts.map +1 -1
  237. package/dist/meta/tags.js +6 -1
  238. package/dist/meta/tags.js.map +1 -1
  239. package/dist/placement/index.d.ts +7 -2
  240. package/dist/placement/index.d.ts.map +1 -1
  241. package/dist/placement/index.js +9 -3
  242. package/dist/placement/index.js.map +1 -1
  243. package/dist/placement/relative.d.ts +8 -3
  244. package/dist/placement/relative.d.ts.map +1 -1
  245. package/dist/placement/relative.js +12 -5
  246. package/dist/placement/relative.js.map +1 -1
  247. package/dist/platform/base64.d.ts +13 -0
  248. package/dist/platform/base64.d.ts.map +1 -0
  249. package/dist/platform/base64.js +35 -0
  250. package/dist/platform/base64.js.map +1 -0
  251. package/dist/platform/rasteriser.browser.d.ts +16 -0
  252. package/dist/platform/rasteriser.browser.d.ts.map +1 -0
  253. package/dist/platform/rasteriser.browser.js +20 -0
  254. package/dist/platform/rasteriser.browser.js.map +1 -0
  255. package/dist/platform/rasteriser.node.d.ts +2 -0
  256. package/dist/platform/rasteriser.node.d.ts.map +1 -0
  257. package/dist/platform/rasteriser.node.js +2 -0
  258. package/dist/platform/rasteriser.node.js.map +1 -0
  259. package/dist/platform/read-file.browser.d.ts +17 -0
  260. package/dist/platform/read-file.browser.d.ts.map +1 -0
  261. package/dist/platform/read-file.browser.js +23 -0
  262. package/dist/platform/read-file.browser.js.map +1 -0
  263. package/dist/platform/read-file.node.d.ts +19 -0
  264. package/dist/platform/read-file.node.d.ts.map +1 -0
  265. package/dist/platform/read-file.node.js +31 -0
  266. package/dist/platform/read-file.node.js.map +1 -0
  267. package/dist/png/chunk.d.ts +23 -0
  268. package/dist/png/chunk.d.ts.map +1 -0
  269. package/dist/png/chunk.js +48 -0
  270. package/dist/png/chunk.js.map +1 -0
  271. package/dist/png/index.d.ts +13 -0
  272. package/dist/png/index.d.ts.map +1 -0
  273. package/dist/png/index.js +3 -0
  274. package/dist/png/index.js.map +1 -0
  275. package/dist/png/recompress.d.ts +23 -0
  276. package/dist/png/recompress.d.ts.map +1 -0
  277. package/dist/png/recompress.js +81 -0
  278. package/dist/png/recompress.js.map +1 -0
  279. package/dist/props.d.ts +11 -0
  280. package/dist/props.d.ts.map +1 -1
  281. package/dist/props.js +16 -0
  282. package/dist/props.js.map +1 -1
  283. package/dist/render/image.d.ts +20 -0
  284. package/dist/render/image.d.ts.map +1 -0
  285. package/dist/render/image.js +29 -0
  286. package/dist/render/image.js.map +1 -0
  287. package/dist/render/index.d.ts +2 -1
  288. package/dist/render/index.d.ts.map +1 -1
  289. package/dist/render/index.js +5 -4
  290. package/dist/render/index.js.map +1 -1
  291. package/dist/render/png.d.ts +14 -4
  292. package/dist/render/png.d.ts.map +1 -1
  293. package/dist/render/png.js +22 -23
  294. package/dist/render/png.js.map +1 -1
  295. package/dist/render/rasterise.d.ts +15 -0
  296. package/dist/render/rasterise.d.ts.map +1 -0
  297. package/dist/render/rasterise.js +34 -0
  298. package/dist/render/rasterise.js.map +1 -0
  299. package/dist/render/svg.d.ts.map +1 -1
  300. package/dist/render/svg.js +1 -0
  301. package/dist/render/svg.js.map +1 -1
  302. package/dist/sign/base64url.d.ts +16 -0
  303. package/dist/sign/base64url.d.ts.map +1 -0
  304. package/dist/sign/base64url.js +24 -0
  305. package/dist/sign/base64url.js.map +1 -0
  306. package/dist/sign/index.d.ts +49 -0
  307. package/dist/sign/index.d.ts.map +1 -0
  308. package/dist/sign/index.js +133 -0
  309. package/dist/sign/index.js.map +1 -0
  310. package/dist/stamp/carrier/index.d.ts +7 -0
  311. package/dist/stamp/carrier/index.d.ts.map +1 -0
  312. package/dist/stamp/carrier/index.js +27 -0
  313. package/dist/stamp/carrier/index.js.map +1 -0
  314. package/dist/stamp/carrier/isobmff.d.ts +7 -0
  315. package/dist/stamp/carrier/isobmff.d.ts.map +1 -0
  316. package/dist/stamp/carrier/isobmff.js +55 -0
  317. package/dist/stamp/carrier/isobmff.js.map +1 -0
  318. package/dist/stamp/carrier/jpeg.d.ts +4 -0
  319. package/dist/stamp/carrier/jpeg.d.ts.map +1 -0
  320. package/dist/stamp/carrier/jpeg.js +76 -0
  321. package/dist/stamp/carrier/jpeg.js.map +1 -0
  322. package/dist/stamp/carrier/png.d.ts +7 -0
  323. package/dist/stamp/carrier/png.d.ts.map +1 -0
  324. package/dist/stamp/carrier/png.js +50 -0
  325. package/dist/stamp/carrier/png.js.map +1 -0
  326. package/dist/stamp/carrier/riff.d.ts +4 -0
  327. package/dist/stamp/carrier/riff.d.ts.map +1 -0
  328. package/dist/stamp/carrier/riff.js +54 -0
  329. package/dist/stamp/carrier/riff.js.map +1 -0
  330. package/dist/stamp/carrier/types.d.ts +25 -0
  331. package/dist/stamp/carrier/types.d.ts.map +1 -0
  332. package/dist/stamp/carrier/types.js +2 -0
  333. package/dist/stamp/carrier/types.js.map +1 -0
  334. package/dist/stamp/chunk.d.ts +0 -2
  335. package/dist/stamp/chunk.d.ts.map +1 -1
  336. package/dist/stamp/chunk.js +10 -18
  337. package/dist/stamp/chunk.js.map +1 -1
  338. package/dist/stamp/config-digest.d.ts +18 -0
  339. package/dist/stamp/config-digest.d.ts.map +1 -1
  340. package/dist/stamp/config-digest.js +24 -0
  341. package/dist/stamp/config-digest.js.map +1 -1
  342. package/dist/stamp/index.d.ts +2 -2
  343. package/dist/stamp/index.d.ts.map +1 -1
  344. package/dist/stamp/index.js +2 -2
  345. package/dist/stamp/index.js.map +1 -1
  346. package/dist/stamp/payload.d.ts +28 -0
  347. package/dist/stamp/payload.d.ts.map +1 -0
  348. package/dist/stamp/payload.js +42 -0
  349. package/dist/stamp/payload.js.map +1 -0
  350. package/dist/stamp/read.d.ts +5 -4
  351. package/dist/stamp/read.d.ts.map +1 -1
  352. package/dist/stamp/read.js +26 -43
  353. package/dist/stamp/read.js.map +1 -1
  354. package/dist/stamp/window.d.ts +11 -0
  355. package/dist/stamp/window.d.ts.map +1 -0
  356. package/dist/stamp/window.js +11 -0
  357. package/dist/stamp/window.js.map +1 -0
  358. package/dist/stamp/write.d.ts +21 -0
  359. package/dist/stamp/write.d.ts.map +1 -0
  360. package/dist/stamp/write.js +31 -0
  361. package/dist/stamp/write.js.map +1 -0
  362. package/dist/templates/article/bottom.d.ts +15 -0
  363. package/dist/templates/article/bottom.d.ts.map +1 -0
  364. package/dist/templates/article/bottom.js +61 -0
  365. package/dist/templates/article/bottom.js.map +1 -0
  366. package/dist/templates/article/index.d.ts +12 -0
  367. package/dist/templates/article/index.d.ts.map +1 -0
  368. package/dist/templates/article/index.js +42 -0
  369. package/dist/templates/article/index.js.map +1 -0
  370. package/dist/templates/article/lines.d.ts +27 -0
  371. package/dist/templates/article/lines.d.ts.map +1 -0
  372. package/dist/templates/article/lines.js +53 -0
  373. package/dist/templates/article/lines.js.map +1 -0
  374. package/dist/templates/article/tags.d.ts +25 -0
  375. package/dist/templates/article/tags.d.ts.map +1 -0
  376. package/dist/templates/article/tags.js +63 -0
  377. package/dist/templates/article/tags.js.map +1 -0
  378. package/dist/templates/attribution.d.ts +2 -6
  379. package/dist/templates/attribution.d.ts.map +1 -1
  380. package/dist/templates/attribution.js +8 -22
  381. package/dist/templates/attribution.js.map +1 -1
  382. package/dist/templates/banner/version.d.ts.map +1 -1
  383. package/dist/templates/banner/version.js +4 -4
  384. package/dist/templates/banner/version.js.map +1 -1
  385. package/dist/templates/bottom.d.ts +23 -0
  386. package/dist/templates/bottom.d.ts.map +1 -0
  387. package/dist/templates/bottom.js +37 -0
  388. package/dist/templates/bottom.js.map +1 -0
  389. package/dist/templates/byline.d.ts +19 -0
  390. package/dist/templates/byline.d.ts.map +1 -0
  391. package/dist/templates/byline.js +45 -0
  392. package/dist/templates/byline.js.map +1 -0
  393. package/dist/templates/code/clip.js +1 -1
  394. package/dist/templates/code/clip.js.map +1 -1
  395. package/dist/templates/code/fit.js +1 -1
  396. package/dist/templates/code/fit.js.map +1 -1
  397. package/dist/templates/code/warn.d.ts +1 -1
  398. package/dist/templates/code/warn.d.ts.map +1 -1
  399. package/dist/templates/code/warn.js +2 -2
  400. package/dist/templates/code/warn.js.map +1 -1
  401. package/dist/templates/docs/chrome.d.ts +17 -0
  402. package/dist/templates/docs/chrome.d.ts.map +1 -0
  403. package/dist/templates/docs/chrome.js +44 -0
  404. package/dist/templates/docs/chrome.js.map +1 -0
  405. package/dist/templates/docs/crumbs.d.ts +14 -0
  406. package/dist/templates/docs/crumbs.d.ts.map +1 -0
  407. package/dist/templates/docs/crumbs.js +32 -0
  408. package/dist/templates/docs/crumbs.js.map +1 -0
  409. package/dist/templates/docs/index.d.ts +13 -0
  410. package/dist/templates/docs/index.d.ts.map +1 -0
  411. package/dist/templates/docs/index.js +47 -0
  412. package/dist/templates/docs/index.js.map +1 -0
  413. package/dist/templates/docs/lines.d.ts +14 -0
  414. package/dist/templates/docs/lines.d.ts.map +1 -0
  415. package/dist/templates/docs/lines.js +29 -0
  416. package/dist/templates/docs/lines.js.map +1 -0
  417. package/dist/templates/event/index.d.ts +12 -0
  418. package/dist/templates/event/index.d.ts.map +1 -0
  419. package/dist/templates/event/index.js +59 -0
  420. package/dist/templates/event/index.js.map +1 -0
  421. package/dist/templates/event/lines.d.ts +14 -0
  422. package/dist/templates/event/lines.d.ts.map +1 -0
  423. package/dist/templates/event/lines.js +29 -0
  424. package/dist/templates/event/lines.js.map +1 -0
  425. package/dist/templates/event/plate.d.ts +16 -0
  426. package/dist/templates/event/plate.d.ts.map +1 -0
  427. package/dist/templates/event/plate.js +36 -0
  428. package/dist/templates/event/plate.js.map +1 -0
  429. package/dist/templates/frame.d.ts +68 -0
  430. package/dist/templates/frame.d.ts.map +1 -0
  431. package/dist/templates/frame.js +63 -0
  432. package/dist/templates/frame.js.map +1 -0
  433. package/dist/templates/index.d.ts +9 -0
  434. package/dist/templates/index.d.ts.map +1 -1
  435. package/dist/templates/index.js +27 -0
  436. package/dist/templates/index.js.map +1 -1
  437. package/dist/templates/photo/index.d.ts +17 -0
  438. package/dist/templates/photo/index.d.ts.map +1 -0
  439. package/dist/templates/photo/index.js +51 -0
  440. package/dist/templates/photo/index.js.map +1 -0
  441. package/dist/templates/photo/lines.d.ts +21 -0
  442. package/dist/templates/photo/lines.d.ts.map +1 -0
  443. package/dist/templates/photo/lines.js +36 -0
  444. package/dist/templates/photo/lines.js.map +1 -0
  445. package/dist/templates/pill.d.ts +33 -0
  446. package/dist/templates/pill.d.ts.map +1 -0
  447. package/dist/templates/pill.js +50 -0
  448. package/dist/templates/pill.js.map +1 -0
  449. package/dist/templates/portrait.d.ts +40 -0
  450. package/dist/templates/portrait.d.ts.map +1 -0
  451. package/dist/templates/portrait.js +56 -0
  452. package/dist/templates/portrait.js.map +1 -0
  453. package/dist/templates/quote/index.d.ts +11 -0
  454. package/dist/templates/quote/index.d.ts.map +1 -0
  455. package/dist/templates/quote/index.js +60 -0
  456. package/dist/templates/quote/index.js.map +1 -0
  457. package/dist/templates/quote/lines.d.ts +24 -0
  458. package/dist/templates/quote/lines.d.ts.map +1 -0
  459. package/dist/templates/quote/lines.js +35 -0
  460. package/dist/templates/quote/lines.js.map +1 -0
  461. package/dist/templates/quote/mark.d.ts +13 -0
  462. package/dist/templates/quote/mark.d.ts.map +1 -0
  463. package/dist/templates/quote/mark.js +39 -0
  464. package/dist/templates/quote/mark.js.map +1 -0
  465. package/dist/templates/quote/speaker.d.ts +18 -0
  466. package/dist/templates/quote/speaker.d.ts.map +1 -0
  467. package/dist/templates/quote/speaker.js +41 -0
  468. package/dist/templates/quote/speaker.js.map +1 -0
  469. package/dist/templates/release/block.d.ts +8 -0
  470. package/dist/templates/release/block.d.ts.map +1 -0
  471. package/dist/templates/release/block.js +16 -0
  472. package/dist/templates/release/block.js.map +1 -0
  473. package/dist/templates/release/changes.d.ts +23 -0
  474. package/dist/templates/release/changes.d.ts.map +1 -0
  475. package/dist/templates/release/changes.js +45 -0
  476. package/dist/templates/release/changes.js.map +1 -0
  477. package/dist/templates/release/index.d.ts +11 -0
  478. package/dist/templates/release/index.d.ts.map +1 -0
  479. package/dist/templates/release/index.js +55 -0
  480. package/dist/templates/release/index.js.map +1 -0
  481. package/dist/templates/release/lines.d.ts +21 -0
  482. package/dist/templates/release/lines.d.ts.map +1 -0
  483. package/dist/templates/release/lines.js +36 -0
  484. package/dist/templates/release/lines.js.map +1 -0
  485. package/dist/templates/stat/index.d.ts +11 -0
  486. package/dist/templates/stat/index.d.ts.map +1 -0
  487. package/dist/templates/stat/index.js +43 -0
  488. package/dist/templates/stat/index.js.map +1 -0
  489. package/dist/templates/stat/lines.d.ts +23 -0
  490. package/dist/templates/stat/lines.d.ts.map +1 -0
  491. package/dist/templates/stat/lines.js +47 -0
  492. package/dist/templates/stat/lines.js.map +1 -0
  493. package/dist/templates/terminal/index.d.ts +16 -0
  494. package/dist/templates/terminal/index.d.ts.map +1 -0
  495. package/dist/templates/terminal/index.js +62 -0
  496. package/dist/templates/terminal/index.js.map +1 -0
  497. package/dist/templates/terminal/session.d.ts +17 -0
  498. package/dist/templates/terminal/session.d.ts.map +1 -0
  499. package/dist/templates/terminal/session.js +86 -0
  500. package/dist/templates/terminal/session.js.map +1 -0
  501. package/dist/templates/terminal/window.d.ts +14 -0
  502. package/dist/templates/terminal/window.d.ts.map +1 -0
  503. package/dist/templates/terminal/window.js +84 -0
  504. package/dist/templates/terminal/window.js.map +1 -0
  505. package/dist/templates/version.d.ts +16 -0
  506. package/dist/templates/version.d.ts.map +1 -0
  507. package/dist/templates/version.js +23 -0
  508. package/dist/templates/version.js.map +1 -0
  509. package/dist/templates/wordmark/index.d.ts +13 -0
  510. package/dist/templates/wordmark/index.d.ts.map +1 -0
  511. package/dist/templates/wordmark/index.js +53 -0
  512. package/dist/templates/wordmark/index.js.map +1 -0
  513. package/dist/templates/wordmark/lines.d.ts +22 -0
  514. package/dist/templates/wordmark/lines.d.ts.map +1 -0
  515. package/dist/templates/wordmark/lines.js +61 -0
  516. package/dist/templates/wordmark/lines.js.map +1 -0
  517. package/dist/templates/wordmark/mark.d.ts +16 -0
  518. package/dist/templates/wordmark/mark.d.ts.map +1 -0
  519. package/dist/templates/wordmark/mark.js +30 -0
  520. package/dist/templates/wordmark/mark.js.map +1 -0
  521. package/dist/text/clamp.d.ts +12 -0
  522. package/dist/text/clamp.d.ts.map +1 -0
  523. package/dist/text/clamp.js +41 -0
  524. package/dist/text/clamp.js.map +1 -0
  525. package/dist/text/ellipsis.d.ts +3 -0
  526. package/dist/text/ellipsis.d.ts.map +1 -0
  527. package/dist/text/ellipsis.js +3 -0
  528. package/dist/text/ellipsis.js.map +1 -0
  529. package/dist/text/index.d.ts +2 -0
  530. package/dist/text/index.d.ts.map +1 -1
  531. package/dist/text/index.js +2 -0
  532. package/dist/text/index.js.map +1 -1
  533. package/dist/types.d.ts +158 -6
  534. package/dist/types.d.ts.map +1 -1
  535. package/dist/validate/collect.d.ts.map +1 -1
  536. package/dist/validate/collect.js +2 -1
  537. package/dist/validate/collect.js.map +1 -1
  538. package/dist/validate/keys.d.ts +6 -0
  539. package/dist/validate/keys.d.ts.map +1 -1
  540. package/dist/validate/keys.js +17 -0
  541. package/dist/validate/keys.js.map +1 -1
  542. package/dist/validate/values.d.ts +6 -0
  543. package/dist/validate/values.d.ts.map +1 -1
  544. package/dist/validate/values.js +12 -1
  545. package/dist/validate/values.js.map +1 -1
  546. package/package.json +16 -2
  547. package/dist/background.d.ts +0 -13
  548. package/dist/background.d.ts.map +0 -1
  549. package/dist/background.js +0 -65
  550. package/dist/background.js.map +0 -1
  551. package/dist/cli/args.d.ts +0 -14
  552. package/dist/cli/args.d.ts.map +0 -1
  553. package/dist/cli/args.js +0 -67
  554. package/dist/cli/args.js.map +0 -1
  555. package/dist/cli.d.ts +0 -3
  556. package/dist/cli.d.ts.map +0 -1
  557. package/dist/cli.js +0 -102
  558. package/dist/cli.js.map +0 -1
  559. package/dist/config.d.ts +0 -95
  560. package/dist/config.d.ts.map +0 -1
  561. package/dist/config.js +0 -208
  562. package/dist/config.js.map +0 -1
  563. package/dist/fonts.d.ts +0 -18
  564. package/dist/fonts.d.ts.map +0 -1
  565. package/dist/fonts.js +0 -102
  566. package/dist/fonts.js.map +0 -1
  567. package/dist/generate.d.ts +0 -63
  568. package/dist/generate.d.ts.map +0 -1
  569. package/dist/generate.js +0 -109
  570. package/dist/generate.js.map +0 -1
  571. package/dist/highlight.d.ts +0 -75
  572. package/dist/highlight.d.ts.map +0 -1
  573. package/dist/highlight.js +0 -137
  574. package/dist/highlight.js.map +0 -1
  575. package/dist/render.d.ts +0 -24
  576. package/dist/render.d.ts.map +0 -1
  577. package/dist/render.js +0 -77
  578. package/dist/render.js.map +0 -1
  579. package/dist/stamp.d.ts +0 -29
  580. package/dist/stamp.d.ts.map +0 -1
  581. package/dist/stamp.js +0 -198
  582. package/dist/stamp.js.map +0 -1
  583. package/dist/templates/banner.d.ts +0 -9
  584. package/dist/templates/banner.d.ts.map +0 -1
  585. package/dist/templates/banner.js +0 -115
  586. package/dist/templates/banner.js.map +0 -1
  587. package/dist/templates/card.d.ts +0 -7
  588. package/dist/templates/card.d.ts.map +0 -1
  589. package/dist/templates/card.js +0 -72
  590. package/dist/templates/card.js.map +0 -1
  591. package/dist/templates/code.d.ts +0 -12
  592. package/dist/templates/code.d.ts.map +0 -1
  593. package/dist/templates/code.js +0 -275
  594. package/dist/templates/code.js.map +0 -1
  595. package/dist/templates/measure.d.ts +0 -11
  596. package/dist/templates/measure.d.ts.map +0 -1
  597. package/dist/templates/measure.js +0 -11
  598. package/dist/templates/measure.js.map +0 -1
  599. package/dist/templates/props.d.ts +0 -7
  600. package/dist/templates/props.d.ts.map +0 -1
  601. package/dist/templates/props.js +0 -17
  602. package/dist/templates/props.js.map +0 -1
  603. package/dist/templates/text.d.ts +0 -37
  604. package/dist/templates/text.d.ts.map +0 -1
  605. package/dist/templates/text.js +0 -26
  606. package/dist/templates/text.js.map +0 -1
  607. package/dist/text/stack.d.ts +0 -24
  608. package/dist/text/stack.d.ts.map +0 -1
  609. package/dist/text/stack.js +0 -18
  610. package/dist/text/stack.js.map +0 -1
  611. package/dist/text.d.ts +0 -56
  612. package/dist/text.d.ts.map +0 -1
  613. package/dist/text.js +0 -78
  614. package/dist/text.js.map +0 -1
  615. package/dist/validate/sizes.d.ts +0 -9
  616. package/dist/validate/sizes.d.ts.map +0 -1
  617. package/dist/validate/sizes.js +0 -27
  618. package/dist/validate/sizes.js.map +0 -1
  619. package/dist/validate.d.ts +0 -15
  620. package/dist/validate.d.ts.map +0 -1
  621. package/dist/validate.js +0 -300
  622. package/dist/validate.js.map +0 -1
@@ -0,0 +1,54 @@
1
+ import { findPayload, stampFromPayload } from "../payload.js";
2
+ /**
3
+ * The chunk type the stamp is stored under. The WebP container says a reader
4
+ * should skip a chunk it does not know, which is what makes an invented one
5
+ * safe; there is no registered type for a note of one's own.
6
+ */
7
+ const stampChunk = "CLPH";
8
+ /** Four characters of type and a four-byte length, little-endian. */
9
+ const header = 8;
10
+ function isWebp(head) {
11
+ return (head.length >= 12 &&
12
+ head.toString("latin1", 0, 4) === "RIFF" &&
13
+ head.toString("latin1", 8, 12) === "WEBP");
14
+ }
15
+ /**
16
+ * The file with the stamp chunk on the end of it, and the RIFF length, which
17
+ * counts everything after itself, brought up to match.
18
+ *
19
+ * Appended rather than inserted because a plain WebP is `RIFF`, `WEBP` and then
20
+ * the bitstream, with no room declared for anything else: libwebp reads the
21
+ * chunk straight after `WEBP` as the image and refuses a file where it is
22
+ * something else. Only the extended layout tolerates chunks in front of the
23
+ * picture, and a build cannot know which layout it has been handed.
24
+ */
25
+ function write(webp, payload) {
26
+ // RIFF chunks are padded to an even length; the padding is not counted.
27
+ const chunk = Buffer.alloc(header + payload.length + (payload.length % 2));
28
+ chunk.write(stampChunk, 0, "latin1");
29
+ chunk.writeUInt32LE(payload.length, 4);
30
+ payload.copy(chunk, header);
31
+ const stamped = Buffer.concat([webp, chunk]);
32
+ stamped.writeUInt32LE(stamped.length - 8, 4);
33
+ return stamped;
34
+ }
35
+ function read(tail) {
36
+ const at = findPayload(tail);
37
+ const start = at - header;
38
+ if (start < 0 || tail.toString("latin1", start, at - 4) !== stampChunk) {
39
+ return undefined;
40
+ }
41
+ const end = at + tail.readUInt32LE(at - 4);
42
+ return end > tail.length
43
+ ? undefined
44
+ : stampFromPayload(tail.subarray(at, end));
45
+ }
46
+ /** WebP, where the stamp is a chunk of its own on the end of the RIFF file. */
47
+ export const riffCarrier = {
48
+ format: "WebP",
49
+ end: "tail",
50
+ matches: isWebp,
51
+ write,
52
+ read,
53
+ };
54
+ //# sourceMappingURL=riff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"riff.js","sourceRoot":"","sources":["../../../src/stamp/carrier/riff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAG9D;;;;GAIG;AACH,MAAM,UAAU,GAAG,MAAM,CAAC;AAE1B,qEAAqE;AACrE,MAAM,MAAM,GAAG,CAAC,CAAC;AAEjB,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,CACL,IAAI,CAAC,MAAM,IAAI,EAAE;QACjB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM;QACxC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,MAAM,CAC1C,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,KAAK,CAAC,IAAY,EAAE,OAAe;IAC1C,wEAAwE;IACxE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAE3E,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAE5B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,IAAI,CAAC,IAAY;IACxB,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC;IAE1B,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;QACvE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM;QACtB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,MAAM;IACX,OAAO,EAAE,MAAM;IACf,KAAK;IACL,IAAI;CACL,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * One image container the rebuild stamp can be written into and read back out
3
+ * of again.
4
+ */
5
+ export interface StampCarrier {
6
+ /** What to call the container in a message. */
7
+ readonly format: string;
8
+ /**
9
+ * Which end of the file the stamp is written to, and so read back from.
10
+ *
11
+ * PNG and JPEG both define a place near the front for a note in text, so the
12
+ * stamp goes there and a build decides whether to skip a file having read
13
+ * only its head. RIFF and ISO base media have no such place, and both keep
14
+ * offsets that inserting bytes ahead of the image data would move, so the
15
+ * stamp is appended and the window comes off the end instead.
16
+ */
17
+ readonly end: "head" | "tail";
18
+ /** Whether the leading bytes of a file are this container. */
19
+ matches(head: Buffer): boolean;
20
+ /** `image` with `payload` embedded, leaving every pixel of it alone. */
21
+ write(image: Buffer, payload: Buffer): Buffer;
22
+ /** The stamp in a window taken from this carrier's `end`, if it is there. */
23
+ read(window: Buffer): string | undefined;
24
+ }
25
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/stamp/carrier/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;;;;OAQG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,8DAA8D;IAC9D,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,wEAAwE;IACxE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9C,6EAA6E;IAC7E,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC1C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/stamp/carrier/types.ts"],"names":[],"mappings":""}
@@ -4,8 +4,6 @@
4
4
  * its stamp with it.
5
5
  */
6
6
  export declare const stampKeyword = "colophon";
7
- /** The eight bytes every PNG file starts with. */
8
- export declare const pngSignature: Buffer<ArrayBuffer>;
9
7
  /** Signature + the whole `IHDR` chunk: length, type, 13 bytes of data, CRC. */
10
8
  export declare const afterHeader: number;
11
9
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"chunk.d.ts","sourceRoot":"","sources":["../../src/stamp/chunk.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,YAAY,aAAa,CAAC;AAEvC,kDAAkD;AAClD,eAAO,MAAM,YAAY,qBAEvB,CAAC;AAEH,+EAA+E;AAC/E,eAAO,MAAM,WAAW,QAAuC,CAAC;AAwBhE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAc3D"}
1
+ {"version":3,"file":"chunk.d.ts","sourceRoot":"","sources":["../../src/stamp/chunk.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,YAAY,aAAa,CAAC;AAEvC,+EAA+E;AAC/E,eAAO,MAAM,WAAW,QAAuC,CAAC;AAWhE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAoB3D"}
@@ -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,CAsB1E"}
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)));
@@ -58,6 +76,12 @@ export async function configDigest(config) {
58
76
  footer: config.footer,
59
77
  badge: config.badge,
60
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,
61
85
  }));
62
86
  }
63
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,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;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"}