@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.
- package/README.md +91 -13
- package/dist/astro/index.d.ts +49 -0
- package/dist/astro/index.d.ts.map +1 -0
- package/dist/astro/index.js +42 -0
- package/dist/astro/index.js.map +1 -0
- package/dist/cli/args/command.d.ts +13 -0
- package/dist/cli/args/command.d.ts.map +1 -0
- package/dist/cli/args/command.js +22 -0
- package/dist/cli/args/command.js.map +1 -0
- package/dist/cli/args/index.d.ts +28 -0
- package/dist/cli/args/index.d.ts.map +1 -0
- package/dist/cli/args/index.js +75 -0
- package/dist/cli/args/index.js.map +1 -0
- package/dist/cli/args/switches.d.ts +18 -0
- package/dist/cli/args/switches.d.ts.map +1 -0
- package/dist/cli/args/switches.js +42 -0
- package/dist/cli/args/switches.js.map +1 -0
- package/dist/cli/args/usage.d.ts +3 -0
- package/dist/cli/args/usage.d.ts.map +1 -0
- package/dist/cli/args/usage.js +34 -0
- package/dist/cli/args/usage.js.map +1 -0
- package/dist/cli/args/values.d.ts +11 -0
- package/dist/cli/args/values.d.ts.map +1 -0
- package/dist/cli/args/values.js +29 -0
- package/dist/cli/args/values.js.map +1 -0
- package/dist/cli/build.d.ts +10 -0
- package/dist/cli/build.d.ts.map +1 -0
- package/dist/cli/build.js +41 -0
- package/dist/cli/build.js.map +1 -0
- package/dist/cli/eject/adapters.d.ts +20 -0
- package/dist/cli/eject/adapters.d.ts.map +1 -0
- package/dist/cli/eject/adapters.js +29 -0
- package/dist/cli/eject/adapters.js.map +1 -0
- package/dist/cli/eject/astro.d.ts +13 -0
- package/dist/cli/eject/astro.d.ts.map +1 -0
- package/dist/cli/eject/astro.js +35 -0
- package/dist/cli/eject/astro.js.map +1 -0
- package/dist/cli/eject/hugo.d.ts +19 -0
- package/dist/cli/eject/hugo.d.ts.map +1 -0
- package/dist/cli/eject/hugo.js +127 -0
- package/dist/cli/eject/hugo.js.map +1 -0
- package/dist/cli/eject/index.d.ts +15 -0
- package/dist/cli/eject/index.d.ts.map +1 -0
- package/dist/cli/eject/index.js +46 -0
- package/dist/cli/eject/index.js.map +1 -0
- package/dist/cli/index.js +25 -20
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/fs.d.ts +5 -0
- package/dist/cli/init/fs.d.ts.map +1 -0
- package/dist/cli/init/fs.js +19 -0
- package/dist/cli/init/fs.js.map +1 -0
- package/dist/cli/init/guess.d.ts +9 -0
- package/dist/cli/init/guess.d.ts.map +1 -0
- package/dist/cli/init/guess.js +27 -0
- package/dist/cli/init/guess.js.map +1 -0
- package/dist/cli/init/index.d.ts +11 -0
- package/dist/cli/init/index.d.ts.map +1 -0
- package/dist/cli/init/index.js +36 -0
- package/dist/cli/init/index.js.map +1 -0
- package/dist/cli/init/module.d.ts +12 -0
- package/dist/cli/init/module.d.ts.map +1 -0
- package/dist/cli/init/module.js +45 -0
- package/dist/cli/init/module.js.map +1 -0
- package/dist/cli/init/scaffold.d.ts +10 -0
- package/dist/cli/init/scaffold.d.ts.map +1 -0
- package/dist/cli/init/scaffold.js +52 -0
- package/dist/cli/init/scaffold.js.map +1 -0
- package/dist/cli/message.d.ts +7 -0
- package/dist/cli/message.d.ts.map +1 -0
- package/dist/cli/message.js +9 -0
- package/dist/cli/message.js.map +1 -0
- package/dist/cli/preview/index.d.ts +13 -0
- package/dist/cli/preview/index.d.ts.map +1 -0
- package/dist/cli/preview/index.js +27 -0
- package/dist/cli/preview/index.js.map +1 -0
- package/dist/cli/preview/open.d.ts +10 -0
- package/dist/cli/preview/open.d.ts.map +1 -0
- package/dist/cli/preview/open.js +32 -0
- package/dist/cli/preview/open.js.map +1 -0
- package/dist/cli/preview/render.d.ts +23 -0
- package/dist/cli/preview/render.d.ts.map +1 -0
- package/dist/cli/preview/render.js +40 -0
- package/dist/cli/preview/render.js.map +1 -0
- package/dist/cli/preview/root.d.ts +17 -0
- package/dist/cli/preview/root.d.ts.map +1 -0
- package/dist/cli/preview/root.js +22 -0
- package/dist/cli/preview/root.js.map +1 -0
- package/dist/cli/preview/size.d.ts +7 -0
- package/dist/cli/preview/size.d.ts.map +1 -0
- package/dist/cli/preview/size.js +13 -0
- package/dist/cli/preview/size.js.map +1 -0
- package/dist/cli/report.d.ts +6 -0
- package/dist/cli/report.d.ts.map +1 -0
- package/dist/cli/report.js +23 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/cli/watch/filter.d.ts +14 -0
- package/dist/cli/watch/filter.d.ts.map +1 -0
- package/dist/cli/watch/filter.js +16 -0
- package/dist/cli/watch/filter.js.map +1 -0
- package/dist/cli/watch/index.d.ts +27 -0
- package/dist/cli/watch/index.d.ts.map +1 -0
- package/dist/cli/watch/index.js +38 -0
- package/dist/cli/watch/index.js.map +1 -0
- package/dist/cli/watch/queue.d.ts +24 -0
- package/dist/cli/watch/queue.d.ts.map +1 -0
- package/dist/cli/watch/queue.js +57 -0
- package/dist/cli/watch/queue.js.map +1 -0
- package/dist/config/defaults.d.ts +39 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +38 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +18 -4
- package/dist/config/index.js.map +1 -1
- package/dist/config/output.d.ts +26 -0
- package/dist/config/output.d.ts.map +1 -0
- package/dist/config/output.js +45 -0
- package/dist/config/output.js.map +1 -0
- package/dist/config/resolve.d.ts +10 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +20 -1
- package/dist/config/resolve.js.map +1 -1
- package/dist/content/index.d.ts +1 -0
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +1 -0
- package/dist/content/index.js.map +1 -1
- package/dist/content/read.d.ts +15 -0
- package/dist/content/read.d.ts.map +1 -0
- package/dist/content/read.js +36 -0
- package/dist/content/read.js.map +1 -0
- package/dist/content/walk.d.ts.map +1 -1
- package/dist/content/walk.js +4 -30
- package/dist/content/walk.js.map +1 -1
- package/dist/core/index.d.ts +37 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +13 -0
- package/dist/core/index.js.map +1 -0
- package/dist/encode/fit.d.ts +16 -0
- package/dist/encode/fit.d.ts.map +1 -0
- package/dist/encode/fit.js +23 -0
- package/dist/encode/fit.js.map +1 -0
- package/dist/encode/format.d.ts +12 -0
- package/dist/encode/format.d.ts.map +1 -0
- package/dist/encode/format.js +40 -0
- package/dist/encode/format.js.map +1 -0
- package/dist/encode/index.d.ts +14 -0
- package/dist/encode/index.d.ts.map +1 -0
- package/dist/encode/index.js +52 -0
- package/dist/encode/index.js.map +1 -0
- package/dist/encode/sharp.d.ts +19 -0
- package/dist/encode/sharp.d.ts.map +1 -0
- package/dist/encode/sharp.js +57 -0
- package/dist/encode/sharp.js.map +1 -0
- package/dist/encode/warn.d.ts +10 -0
- package/dist/encode/warn.d.ts.map +1 -0
- package/dist/encode/warn.js +31 -0
- package/dist/encode/warn.js.map +1 -0
- package/dist/fonts/resolve.d.ts.map +1 -1
- package/dist/fonts/resolve.js +2 -8
- package/dist/fonts/resolve.js.map +1 -1
- package/dist/generate/index.d.ts +4 -0
- package/dist/generate/index.d.ts.map +1 -1
- package/dist/generate/index.js +10 -4
- package/dist/generate/index.js.map +1 -1
- package/dist/generate/options.d.ts +11 -1
- package/dist/generate/options.d.ts.map +1 -1
- package/dist/generate/options.js.map +1 -1
- package/dist/generate/output-path.d.ts +6 -2
- package/dist/generate/output-path.d.ts.map +1 -1
- package/dist/generate/output-path.js +7 -2
- package/dist/generate/output-path.js.map +1 -1
- package/dist/generate/plan.d.ts.map +1 -1
- package/dist/generate/plan.js +3 -3
- package/dist/generate/plan.js.map +1 -1
- package/dist/generate/render-image.d.ts +6 -0
- package/dist/generate/render-image.d.ts.map +1 -1
- package/dist/generate/render-image.js +14 -4
- package/dist/generate/render-image.js.map +1 -1
- package/dist/image/index.d.ts +3 -1
- package/dist/image/index.d.ts.map +1 -1
- package/dist/image/index.js +4 -3
- package/dist/image/index.js.map +1 -1
- package/dist/image/jpeg.d.ts +5 -4
- package/dist/image/jpeg.d.ts.map +1 -1
- package/dist/image/jpeg.js +13 -36
- package/dist/image/jpeg.js.map +1 -1
- package/dist/image/load.d.ts.map +1 -1
- package/dist/image/load.js +4 -15
- package/dist/image/load.js.map +1 -1
- package/dist/image/resolve.d.ts.map +1 -1
- package/dist/image/resolve.js +2 -8
- package/dist/image/resolve.js.map +1 -1
- package/dist/image/uri.d.ts.map +1 -1
- package/dist/image/uri.js +2 -3
- package/dist/image/uri.js.map +1 -1
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/jpeg/index.d.ts +10 -0
- package/dist/jpeg/index.d.ts.map +1 -0
- package/dist/jpeg/index.js +2 -0
- package/dist/jpeg/index.js.map +1 -0
- package/dist/jpeg/segments.d.ts +32 -0
- package/dist/jpeg/segments.d.ts.map +1 -0
- package/dist/jpeg/segments.js +66 -0
- package/dist/jpeg/segments.js.map +1 -0
- package/dist/layout/draw.d.ts +20 -0
- package/dist/layout/draw.d.ts.map +1 -0
- package/dist/layout/draw.js +32 -0
- package/dist/layout/draw.js.map +1 -0
- package/dist/layout/extent.d.ts +19 -0
- package/dist/layout/extent.d.ts.map +1 -0
- package/dist/layout/extent.js +24 -0
- package/dist/layout/extent.js.map +1 -0
- package/dist/layout/index.d.ts +7 -4
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout/index.js +5 -3
- package/dist/layout/index.js.map +1 -1
- package/dist/layout/lines.d.ts +0 -17
- package/dist/layout/lines.d.ts.map +1 -1
- package/dist/layout/lines.js +2 -35
- package/dist/layout/lines.js.map +1 -1
- package/dist/measure/faces.d.ts.map +1 -1
- package/dist/measure/faces.js +8 -2
- package/dist/measure/faces.js.map +1 -1
- package/dist/meta/index.d.ts +1 -0
- package/dist/meta/index.d.ts.map +1 -1
- package/dist/meta/index.js +1 -0
- package/dist/meta/index.js.map +1 -1
- package/dist/meta/path.d.ts +24 -0
- package/dist/meta/path.d.ts.map +1 -0
- package/dist/meta/path.js +41 -0
- package/dist/meta/path.js.map +1 -0
- package/dist/meta/tags.d.ts.map +1 -1
- package/dist/meta/tags.js +6 -1
- package/dist/meta/tags.js.map +1 -1
- package/dist/placement/index.d.ts +7 -2
- package/dist/placement/index.d.ts.map +1 -1
- package/dist/placement/index.js +9 -3
- package/dist/placement/index.js.map +1 -1
- package/dist/placement/relative.d.ts +8 -3
- package/dist/placement/relative.d.ts.map +1 -1
- package/dist/placement/relative.js +12 -5
- package/dist/placement/relative.js.map +1 -1
- package/dist/platform/base64.d.ts +13 -0
- package/dist/platform/base64.d.ts.map +1 -0
- package/dist/platform/base64.js +35 -0
- package/dist/platform/base64.js.map +1 -0
- package/dist/platform/rasteriser.browser.d.ts +16 -0
- package/dist/platform/rasteriser.browser.d.ts.map +1 -0
- package/dist/platform/rasteriser.browser.js +20 -0
- package/dist/platform/rasteriser.browser.js.map +1 -0
- package/dist/platform/rasteriser.node.d.ts +2 -0
- package/dist/platform/rasteriser.node.d.ts.map +1 -0
- package/dist/platform/rasteriser.node.js +2 -0
- package/dist/platform/rasteriser.node.js.map +1 -0
- package/dist/platform/read-file.browser.d.ts +17 -0
- package/dist/platform/read-file.browser.d.ts.map +1 -0
- package/dist/platform/read-file.browser.js +23 -0
- package/dist/platform/read-file.browser.js.map +1 -0
- package/dist/platform/read-file.node.d.ts +19 -0
- package/dist/platform/read-file.node.d.ts.map +1 -0
- package/dist/platform/read-file.node.js +31 -0
- package/dist/platform/read-file.node.js.map +1 -0
- package/dist/png/chunk.d.ts +23 -0
- package/dist/png/chunk.d.ts.map +1 -0
- package/dist/png/chunk.js +48 -0
- package/dist/png/chunk.js.map +1 -0
- package/dist/png/index.d.ts +13 -0
- package/dist/png/index.d.ts.map +1 -0
- package/dist/png/index.js +3 -0
- package/dist/png/index.js.map +1 -0
- package/dist/png/recompress.d.ts +23 -0
- package/dist/png/recompress.d.ts.map +1 -0
- package/dist/png/recompress.js +81 -0
- package/dist/png/recompress.js.map +1 -0
- package/dist/props.d.ts +11 -0
- package/dist/props.d.ts.map +1 -1
- package/dist/props.js +16 -0
- package/dist/props.js.map +1 -1
- package/dist/render/image.d.ts +20 -0
- package/dist/render/image.d.ts.map +1 -0
- package/dist/render/image.js +29 -0
- package/dist/render/image.js.map +1 -0
- package/dist/render/index.d.ts +2 -1
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +5 -4
- package/dist/render/index.js.map +1 -1
- package/dist/render/png.d.ts +14 -4
- package/dist/render/png.d.ts.map +1 -1
- package/dist/render/png.js +22 -23
- package/dist/render/png.js.map +1 -1
- package/dist/render/rasterise.d.ts +15 -0
- package/dist/render/rasterise.d.ts.map +1 -0
- package/dist/render/rasterise.js +34 -0
- package/dist/render/rasterise.js.map +1 -0
- package/dist/render/svg.d.ts.map +1 -1
- package/dist/render/svg.js +1 -0
- package/dist/render/svg.js.map +1 -1
- package/dist/sign/base64url.d.ts +16 -0
- package/dist/sign/base64url.d.ts.map +1 -0
- package/dist/sign/base64url.js +24 -0
- package/dist/sign/base64url.js.map +1 -0
- package/dist/sign/index.d.ts +49 -0
- package/dist/sign/index.d.ts.map +1 -0
- package/dist/sign/index.js +133 -0
- package/dist/sign/index.js.map +1 -0
- package/dist/stamp/carrier/index.d.ts +7 -0
- package/dist/stamp/carrier/index.d.ts.map +1 -0
- package/dist/stamp/carrier/index.js +27 -0
- package/dist/stamp/carrier/index.js.map +1 -0
- package/dist/stamp/carrier/isobmff.d.ts +7 -0
- package/dist/stamp/carrier/isobmff.d.ts.map +1 -0
- package/dist/stamp/carrier/isobmff.js +55 -0
- package/dist/stamp/carrier/isobmff.js.map +1 -0
- package/dist/stamp/carrier/jpeg.d.ts +4 -0
- package/dist/stamp/carrier/jpeg.d.ts.map +1 -0
- package/dist/stamp/carrier/jpeg.js +76 -0
- package/dist/stamp/carrier/jpeg.js.map +1 -0
- package/dist/stamp/carrier/png.d.ts +7 -0
- package/dist/stamp/carrier/png.d.ts.map +1 -0
- package/dist/stamp/carrier/png.js +50 -0
- package/dist/stamp/carrier/png.js.map +1 -0
- package/dist/stamp/carrier/riff.d.ts +4 -0
- package/dist/stamp/carrier/riff.d.ts.map +1 -0
- package/dist/stamp/carrier/riff.js +54 -0
- package/dist/stamp/carrier/riff.js.map +1 -0
- package/dist/stamp/carrier/types.d.ts +25 -0
- package/dist/stamp/carrier/types.d.ts.map +1 -0
- package/dist/stamp/carrier/types.js +2 -0
- package/dist/stamp/carrier/types.js.map +1 -0
- package/dist/stamp/chunk.d.ts +0 -2
- package/dist/stamp/chunk.d.ts.map +1 -1
- package/dist/stamp/chunk.js +10 -18
- package/dist/stamp/chunk.js.map +1 -1
- package/dist/stamp/config-digest.d.ts +18 -0
- package/dist/stamp/config-digest.d.ts.map +1 -1
- package/dist/stamp/config-digest.js +24 -0
- package/dist/stamp/config-digest.js.map +1 -1
- package/dist/stamp/index.d.ts +2 -2
- package/dist/stamp/index.d.ts.map +1 -1
- package/dist/stamp/index.js +2 -2
- package/dist/stamp/index.js.map +1 -1
- package/dist/stamp/payload.d.ts +28 -0
- package/dist/stamp/payload.d.ts.map +1 -0
- package/dist/stamp/payload.js +42 -0
- package/dist/stamp/payload.js.map +1 -0
- package/dist/stamp/read.d.ts +5 -4
- package/dist/stamp/read.d.ts.map +1 -1
- package/dist/stamp/read.js +26 -43
- package/dist/stamp/read.js.map +1 -1
- package/dist/stamp/window.d.ts +11 -0
- package/dist/stamp/window.d.ts.map +1 -0
- package/dist/stamp/window.js +11 -0
- package/dist/stamp/window.js.map +1 -0
- package/dist/stamp/write.d.ts +21 -0
- package/dist/stamp/write.d.ts.map +1 -0
- package/dist/stamp/write.js +31 -0
- package/dist/stamp/write.js.map +1 -0
- package/dist/templates/article/bottom.d.ts +15 -0
- package/dist/templates/article/bottom.d.ts.map +1 -0
- package/dist/templates/article/bottom.js +61 -0
- package/dist/templates/article/bottom.js.map +1 -0
- package/dist/templates/article/index.d.ts +12 -0
- package/dist/templates/article/index.d.ts.map +1 -0
- package/dist/templates/article/index.js +42 -0
- package/dist/templates/article/index.js.map +1 -0
- package/dist/templates/article/lines.d.ts +27 -0
- package/dist/templates/article/lines.d.ts.map +1 -0
- package/dist/templates/article/lines.js +53 -0
- package/dist/templates/article/lines.js.map +1 -0
- package/dist/templates/article/tags.d.ts +25 -0
- package/dist/templates/article/tags.d.ts.map +1 -0
- package/dist/templates/article/tags.js +63 -0
- package/dist/templates/article/tags.js.map +1 -0
- package/dist/templates/attribution.d.ts +2 -6
- package/dist/templates/attribution.d.ts.map +1 -1
- package/dist/templates/attribution.js +8 -22
- package/dist/templates/attribution.js.map +1 -1
- package/dist/templates/banner/version.d.ts.map +1 -1
- package/dist/templates/banner/version.js +4 -4
- package/dist/templates/banner/version.js.map +1 -1
- package/dist/templates/bottom.d.ts +23 -0
- package/dist/templates/bottom.d.ts.map +1 -0
- package/dist/templates/bottom.js +37 -0
- package/dist/templates/bottom.js.map +1 -0
- package/dist/templates/byline.d.ts +19 -0
- package/dist/templates/byline.d.ts.map +1 -0
- package/dist/templates/byline.js +45 -0
- package/dist/templates/byline.js.map +1 -0
- package/dist/templates/code/clip.js +1 -1
- package/dist/templates/code/clip.js.map +1 -1
- package/dist/templates/code/fit.js +1 -1
- package/dist/templates/code/fit.js.map +1 -1
- package/dist/templates/code/warn.d.ts +1 -1
- package/dist/templates/code/warn.d.ts.map +1 -1
- package/dist/templates/code/warn.js +2 -2
- package/dist/templates/code/warn.js.map +1 -1
- package/dist/templates/docs/chrome.d.ts +17 -0
- package/dist/templates/docs/chrome.d.ts.map +1 -0
- package/dist/templates/docs/chrome.js +44 -0
- package/dist/templates/docs/chrome.js.map +1 -0
- package/dist/templates/docs/crumbs.d.ts +14 -0
- package/dist/templates/docs/crumbs.d.ts.map +1 -0
- package/dist/templates/docs/crumbs.js +32 -0
- package/dist/templates/docs/crumbs.js.map +1 -0
- package/dist/templates/docs/index.d.ts +13 -0
- package/dist/templates/docs/index.d.ts.map +1 -0
- package/dist/templates/docs/index.js +47 -0
- package/dist/templates/docs/index.js.map +1 -0
- package/dist/templates/docs/lines.d.ts +14 -0
- package/dist/templates/docs/lines.d.ts.map +1 -0
- package/dist/templates/docs/lines.js +29 -0
- package/dist/templates/docs/lines.js.map +1 -0
- package/dist/templates/event/index.d.ts +12 -0
- package/dist/templates/event/index.d.ts.map +1 -0
- package/dist/templates/event/index.js +59 -0
- package/dist/templates/event/index.js.map +1 -0
- package/dist/templates/event/lines.d.ts +14 -0
- package/dist/templates/event/lines.d.ts.map +1 -0
- package/dist/templates/event/lines.js +29 -0
- package/dist/templates/event/lines.js.map +1 -0
- package/dist/templates/event/plate.d.ts +16 -0
- package/dist/templates/event/plate.d.ts.map +1 -0
- package/dist/templates/event/plate.js +36 -0
- package/dist/templates/event/plate.js.map +1 -0
- package/dist/templates/frame.d.ts +68 -0
- package/dist/templates/frame.d.ts.map +1 -0
- package/dist/templates/frame.js +63 -0
- package/dist/templates/frame.js.map +1 -0
- package/dist/templates/index.d.ts +9 -0
- package/dist/templates/index.d.ts.map +1 -1
- package/dist/templates/index.js +27 -0
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/photo/index.d.ts +17 -0
- package/dist/templates/photo/index.d.ts.map +1 -0
- package/dist/templates/photo/index.js +51 -0
- package/dist/templates/photo/index.js.map +1 -0
- package/dist/templates/photo/lines.d.ts +21 -0
- package/dist/templates/photo/lines.d.ts.map +1 -0
- package/dist/templates/photo/lines.js +36 -0
- package/dist/templates/photo/lines.js.map +1 -0
- package/dist/templates/pill.d.ts +33 -0
- package/dist/templates/pill.d.ts.map +1 -0
- package/dist/templates/pill.js +50 -0
- package/dist/templates/pill.js.map +1 -0
- package/dist/templates/portrait.d.ts +40 -0
- package/dist/templates/portrait.d.ts.map +1 -0
- package/dist/templates/portrait.js +56 -0
- package/dist/templates/portrait.js.map +1 -0
- package/dist/templates/quote/index.d.ts +11 -0
- package/dist/templates/quote/index.d.ts.map +1 -0
- package/dist/templates/quote/index.js +60 -0
- package/dist/templates/quote/index.js.map +1 -0
- package/dist/templates/quote/lines.d.ts +24 -0
- package/dist/templates/quote/lines.d.ts.map +1 -0
- package/dist/templates/quote/lines.js +35 -0
- package/dist/templates/quote/lines.js.map +1 -0
- package/dist/templates/quote/mark.d.ts +13 -0
- package/dist/templates/quote/mark.d.ts.map +1 -0
- package/dist/templates/quote/mark.js +39 -0
- package/dist/templates/quote/mark.js.map +1 -0
- package/dist/templates/quote/speaker.d.ts +18 -0
- package/dist/templates/quote/speaker.d.ts.map +1 -0
- package/dist/templates/quote/speaker.js +41 -0
- package/dist/templates/quote/speaker.js.map +1 -0
- package/dist/templates/release/block.d.ts +8 -0
- package/dist/templates/release/block.d.ts.map +1 -0
- package/dist/templates/release/block.js +16 -0
- package/dist/templates/release/block.js.map +1 -0
- package/dist/templates/release/changes.d.ts +23 -0
- package/dist/templates/release/changes.d.ts.map +1 -0
- package/dist/templates/release/changes.js +45 -0
- package/dist/templates/release/changes.js.map +1 -0
- package/dist/templates/release/index.d.ts +11 -0
- package/dist/templates/release/index.d.ts.map +1 -0
- package/dist/templates/release/index.js +55 -0
- package/dist/templates/release/index.js.map +1 -0
- package/dist/templates/release/lines.d.ts +21 -0
- package/dist/templates/release/lines.d.ts.map +1 -0
- package/dist/templates/release/lines.js +36 -0
- package/dist/templates/release/lines.js.map +1 -0
- package/dist/templates/stat/index.d.ts +11 -0
- package/dist/templates/stat/index.d.ts.map +1 -0
- package/dist/templates/stat/index.js +43 -0
- package/dist/templates/stat/index.js.map +1 -0
- package/dist/templates/stat/lines.d.ts +23 -0
- package/dist/templates/stat/lines.d.ts.map +1 -0
- package/dist/templates/stat/lines.js +47 -0
- package/dist/templates/stat/lines.js.map +1 -0
- package/dist/templates/terminal/index.d.ts +16 -0
- package/dist/templates/terminal/index.d.ts.map +1 -0
- package/dist/templates/terminal/index.js +62 -0
- package/dist/templates/terminal/index.js.map +1 -0
- package/dist/templates/terminal/session.d.ts +17 -0
- package/dist/templates/terminal/session.d.ts.map +1 -0
- package/dist/templates/terminal/session.js +86 -0
- package/dist/templates/terminal/session.js.map +1 -0
- package/dist/templates/terminal/window.d.ts +14 -0
- package/dist/templates/terminal/window.d.ts.map +1 -0
- package/dist/templates/terminal/window.js +84 -0
- package/dist/templates/terminal/window.js.map +1 -0
- package/dist/templates/version.d.ts +16 -0
- package/dist/templates/version.d.ts.map +1 -0
- package/dist/templates/version.js +23 -0
- package/dist/templates/version.js.map +1 -0
- package/dist/templates/wordmark/index.d.ts +13 -0
- package/dist/templates/wordmark/index.d.ts.map +1 -0
- package/dist/templates/wordmark/index.js +53 -0
- package/dist/templates/wordmark/index.js.map +1 -0
- package/dist/templates/wordmark/lines.d.ts +22 -0
- package/dist/templates/wordmark/lines.d.ts.map +1 -0
- package/dist/templates/wordmark/lines.js +61 -0
- package/dist/templates/wordmark/lines.js.map +1 -0
- package/dist/templates/wordmark/mark.d.ts +16 -0
- package/dist/templates/wordmark/mark.d.ts.map +1 -0
- package/dist/templates/wordmark/mark.js +30 -0
- package/dist/templates/wordmark/mark.js.map +1 -0
- package/dist/text/clamp.d.ts +12 -0
- package/dist/text/clamp.d.ts.map +1 -0
- package/dist/text/clamp.js +41 -0
- package/dist/text/clamp.js.map +1 -0
- package/dist/text/ellipsis.d.ts +3 -0
- package/dist/text/ellipsis.d.ts.map +1 -0
- package/dist/text/ellipsis.js +3 -0
- package/dist/text/ellipsis.js.map +1 -0
- package/dist/text/index.d.ts +2 -0
- package/dist/text/index.d.ts.map +1 -1
- package/dist/text/index.js +2 -0
- package/dist/text/index.js.map +1 -1
- package/dist/types.d.ts +158 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/validate/collect.d.ts.map +1 -1
- package/dist/validate/collect.js +2 -1
- package/dist/validate/collect.js.map +1 -1
- package/dist/validate/keys.d.ts +6 -0
- package/dist/validate/keys.d.ts.map +1 -1
- package/dist/validate/keys.js +17 -0
- package/dist/validate/keys.js.map +1 -1
- package/dist/validate/values.d.ts +6 -0
- package/dist/validate/values.d.ts.map +1 -1
- package/dist/validate/values.js +12 -1
- package/dist/validate/values.js.map +1 -1
- package/package.json +16 -2
- package/dist/background.d.ts +0 -13
- package/dist/background.d.ts.map +0 -1
- package/dist/background.js +0 -65
- package/dist/background.js.map +0 -1
- package/dist/cli/args.d.ts +0 -14
- package/dist/cli/args.d.ts.map +0 -1
- package/dist/cli/args.js +0 -67
- package/dist/cli/args.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -102
- package/dist/cli.js.map +0 -1
- package/dist/config.d.ts +0 -95
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -208
- package/dist/config.js.map +0 -1
- package/dist/fonts.d.ts +0 -18
- package/dist/fonts.d.ts.map +0 -1
- package/dist/fonts.js +0 -102
- package/dist/fonts.js.map +0 -1
- package/dist/generate.d.ts +0 -63
- package/dist/generate.d.ts.map +0 -1
- package/dist/generate.js +0 -109
- package/dist/generate.js.map +0 -1
- package/dist/highlight.d.ts +0 -75
- package/dist/highlight.d.ts.map +0 -1
- package/dist/highlight.js +0 -137
- package/dist/highlight.js.map +0 -1
- package/dist/render.d.ts +0 -24
- package/dist/render.d.ts.map +0 -1
- package/dist/render.js +0 -77
- package/dist/render.js.map +0 -1
- package/dist/stamp.d.ts +0 -29
- package/dist/stamp.d.ts.map +0 -1
- package/dist/stamp.js +0 -198
- package/dist/stamp.js.map +0 -1
- package/dist/templates/banner.d.ts +0 -9
- package/dist/templates/banner.d.ts.map +0 -1
- package/dist/templates/banner.js +0 -115
- package/dist/templates/banner.js.map +0 -1
- package/dist/templates/card.d.ts +0 -7
- package/dist/templates/card.d.ts.map +0 -1
- package/dist/templates/card.js +0 -72
- package/dist/templates/card.js.map +0 -1
- package/dist/templates/code.d.ts +0 -12
- package/dist/templates/code.d.ts.map +0 -1
- package/dist/templates/code.js +0 -275
- package/dist/templates/code.js.map +0 -1
- package/dist/templates/measure.d.ts +0 -11
- package/dist/templates/measure.d.ts.map +0 -1
- package/dist/templates/measure.js +0 -11
- package/dist/templates/measure.js.map +0 -1
- package/dist/templates/props.d.ts +0 -7
- package/dist/templates/props.d.ts.map +0 -1
- package/dist/templates/props.js +0 -17
- package/dist/templates/props.js.map +0 -1
- package/dist/templates/text.d.ts +0 -37
- package/dist/templates/text.d.ts.map +0 -1
- package/dist/templates/text.js +0 -26
- package/dist/templates/text.js.map +0 -1
- package/dist/text/stack.d.ts +0 -24
- package/dist/text/stack.d.ts.map +0 -1
- package/dist/text/stack.js +0 -18
- package/dist/text/stack.js.map +0 -1
- package/dist/text.d.ts +0 -56
- package/dist/text.d.ts.map +0 -1
- package/dist/text.js +0 -78
- package/dist/text.js.map +0 -1
- package/dist/validate/sizes.d.ts +0 -9
- package/dist/validate/sizes.d.ts.map +0 -1
- package/dist/validate/sizes.js +0 -27
- package/dist/validate/sizes.js.map +0 -1
- package/dist/validate.d.ts +0 -15
- package/dist/validate.d.ts.map +0 -1
- package/dist/validate.js +0 -300
- package/dist/validate.js.map +0 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Rasteriser } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* The default rasteriser: resvg, scaled to `dimensions.width`.
|
|
4
|
+
*
|
|
5
|
+
* Text is drawn with the fonts named by `config`, which is what keeps the
|
|
6
|
+
* output the same on a laptop, in CI and in a container. Height follows the
|
|
7
|
+
* SVG's own aspect ratio; `buildSvg` sizes it to match.
|
|
8
|
+
*
|
|
9
|
+
* It lives here rather than in `png.ts` so that `resolveConfig` can name it as
|
|
10
|
+
* the default without importing the module that dispatches to it. Nothing here
|
|
11
|
+
* reads config beyond the fonts, which is the whole of what a rasteriser is
|
|
12
|
+
* given to work with.
|
|
13
|
+
*/
|
|
14
|
+
export declare const resvgRasteriser: Rasteriser;
|
|
15
|
+
//# sourceMappingURL=rasterise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rasterise.d.ts","sourceRoot":"","sources":["../../src/render/rasterise.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,aAAa,CAAC;AAkB9D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,EAAE,UAO7B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { renderAsync } from "@resvg/resvg-js";
|
|
2
|
+
import { fallbackFamily, fontFilePaths } from "../fonts/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Font options for resvg: the configured font files, and whether to fall back
|
|
5
|
+
* to the machine's own.
|
|
6
|
+
*/
|
|
7
|
+
async function fontOptions(config) {
|
|
8
|
+
const fallback = fallbackFamily(config.fonts);
|
|
9
|
+
return {
|
|
10
|
+
loadSystemFonts: config.systemFonts,
|
|
11
|
+
fontFiles: await fontFilePaths(config.fonts),
|
|
12
|
+
...(fallback !== undefined && { defaultFontFamily: fallback }),
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The default rasteriser: resvg, scaled to `dimensions.width`.
|
|
17
|
+
*
|
|
18
|
+
* Text is drawn with the fonts named by `config`, which is what keeps the
|
|
19
|
+
* output the same on a laptop, in CI and in a container. Height follows the
|
|
20
|
+
* SVG's own aspect ratio; `buildSvg` sizes it to match.
|
|
21
|
+
*
|
|
22
|
+
* It lives here rather than in `png.ts` so that `resolveConfig` can name it as
|
|
23
|
+
* the default without importing the module that dispatches to it. Nothing here
|
|
24
|
+
* reads config beyond the fonts, which is the whole of what a rasteriser is
|
|
25
|
+
* given to work with.
|
|
26
|
+
*/
|
|
27
|
+
export const resvgRasteriser = async (svg, dimensions, config) => {
|
|
28
|
+
const rendered = await renderAsync(svg, {
|
|
29
|
+
fitTo: { mode: "width", value: dimensions.width },
|
|
30
|
+
font: await fontOptions(config),
|
|
31
|
+
});
|
|
32
|
+
return rendered.asPng();
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=rasterise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rasterise.js","sourceRoot":"","sources":["../../src/render/rasterise.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlE;;;GAGG;AACH,KAAK,UAAU,WAAW,CACxB,MAAsB;IAEtB,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE9C,OAAO;QACL,eAAe,EAAE,MAAM,CAAC,WAAW;QACnC,SAAS,EAAE,MAAM,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5C,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,eAAe,GAAe,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;IAC3E,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE;QACtC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE;QACjD,IAAI,EAAE,MAAM,WAAW,CAAC,MAAM,CAAC;KAChC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC,CAAC"}
|
package/dist/render/svg.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["../../src/render/svg.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAM9E;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["../../src/render/svg.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAM9E;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,MAAM,CAAC,CAmCjB"}
|
package/dist/render/svg.js
CHANGED
|
@@ -33,6 +33,7 @@ export async function buildSvg(props, config, dimensions) {
|
|
|
33
33
|
measure,
|
|
34
34
|
logo: images.logo,
|
|
35
35
|
avatar: images.avatar,
|
|
36
|
+
picture: images.picture,
|
|
36
37
|
});
|
|
37
38
|
const { width, height } = dimensions;
|
|
38
39
|
return (`<svg width="${String(width)}" height="${String(height)}"` +
|
package/dist/render/svg.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svg.js","sourceRoot":"","sources":["../../src/render/svg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,YAAY,GAAG,aAAa,CAAC;AACnC,MAAM,SAAS,GAAG,kBAAkB,CAAC;AAErC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,KAAqB,EACrB,MAAsB,EACtB,UAAsB;IAEtB,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1C,cAAc,CAAC,MAAM,CAAC;QACtB,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC;KAC1B,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,aAAa,CAC9B,MAAM,CAAC,UAAU,EACjB,UAAU,EACV,YAAY,EACZ,MAAM,CAAC,UAAU,CAClB,CAAC;IACF,4EAA4E;IAC5E,uEAAuE;IACvE,MAAM,OAAO,GACX,MAAM,CAAC,OAAO,KAAK,SAAS;QAC1B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACjC,KAAK;QACL,MAAM;QACN,UAAU;QACV,OAAO;QACP,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"svg.js","sourceRoot":"","sources":["../../src/render/svg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,YAAY,GAAG,aAAa,CAAC;AACnC,MAAM,SAAS,GAAG,kBAAkB,CAAC;AAErC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,KAAqB,EACrB,MAAsB,EACtB,UAAsB;IAEtB,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1C,cAAc,CAAC,MAAM,CAAC;QACtB,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC;KAC1B,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,aAAa,CAC9B,MAAM,CAAC,UAAU,EACjB,UAAU,EACV,YAAY,EACZ,MAAM,CAAC,UAAU,CAClB,CAAC;IACF,4EAA4E;IAC5E,uEAAuE;IACvE,MAAM,OAAO,GACX,MAAM,CAAC,OAAO,KAAK,SAAS;QAC1B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACjC,KAAK;QACL,MAAM;QACN,UAAU;QACV,OAAO;QACP,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAErC,OAAO,CACL,eAAe,MAAM,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,GAAG;QAC1D,iBAAiB,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG;QACnD,uCAAuC,UAAU,GAAG,OAAO,GAAG,IAAI,QAAQ,CAC3E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base64url, which is what a signature has to be to travel in a URL.
|
|
3
|
+
*
|
|
4
|
+
* It is ordinary base64 with two characters swapped and the padding dropped,
|
|
5
|
+
* so the encoding itself comes from `platform/base64.ts` and this is only the
|
|
6
|
+
* alphabet. `+`, `/` and `=` all mean something in a query string, and a
|
|
7
|
+
* signature carrying them would depend on every proxy between the two ends
|
|
8
|
+
* escaping them the same way.
|
|
9
|
+
*/
|
|
10
|
+
export declare function toBase64Url(bytes: Uint8Array): string;
|
|
11
|
+
/**
|
|
12
|
+
* The reverse. The padding `toBase64Url` dropped is not needed to decode, since
|
|
13
|
+
* the length of the input says where the bytes end.
|
|
14
|
+
*/
|
|
15
|
+
export declare function fromBase64Url(text: string): Uint8Array<ArrayBuffer>;
|
|
16
|
+
//# sourceMappingURL=base64url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64url.d.ts","sourceRoot":"","sources":["../../src/sign/base64url.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAKrD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAEnE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { fromBase64, toBase64 } from "../platform/base64.js";
|
|
2
|
+
/**
|
|
3
|
+
* Base64url, which is what a signature has to be to travel in a URL.
|
|
4
|
+
*
|
|
5
|
+
* It is ordinary base64 with two characters swapped and the padding dropped,
|
|
6
|
+
* so the encoding itself comes from `platform/base64.ts` and this is only the
|
|
7
|
+
* alphabet. `+`, `/` and `=` all mean something in a query string, and a
|
|
8
|
+
* signature carrying them would depend on every proxy between the two ends
|
|
9
|
+
* escaping them the same way.
|
|
10
|
+
*/
|
|
11
|
+
export function toBase64Url(bytes) {
|
|
12
|
+
return toBase64(bytes)
|
|
13
|
+
.replaceAll("+", "-")
|
|
14
|
+
.replaceAll("/", "_")
|
|
15
|
+
.replaceAll("=", "");
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The reverse. The padding `toBase64Url` dropped is not needed to decode, since
|
|
19
|
+
* the length of the input says where the bytes end.
|
|
20
|
+
*/
|
|
21
|
+
export function fromBase64Url(text) {
|
|
22
|
+
return fromBase64(text.replaceAll("-", "+").replaceAll("_", "/"));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=base64url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64url.js","sourceRoot":"","sources":["../../src/sign/base64url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,OAAO,QAAQ,CAAC,KAAK,CAAC;SACnB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;SACpB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;SACpB,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signing the parameters of an image request.
|
|
3
|
+
*
|
|
4
|
+
* Rendering on demand means an endpoint that turns a query string into a
|
|
5
|
+
* picture, and an endpoint like that is an open image generator for anyone who
|
|
6
|
+
* finds it: they choose the text, your domain serves it, and your bill pays for
|
|
7
|
+
* it. Signing is what makes the URLs your own, since only the site holding the
|
|
8
|
+
* secret can produce one the endpoint will answer.
|
|
9
|
+
*
|
|
10
|
+
* It uses Web Crypto, which is the one HMAC available everywhere this is meant
|
|
11
|
+
* to run: browsers, workers, and Node since 18.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* The parameters of one request, which are what the signature covers.
|
|
15
|
+
*/
|
|
16
|
+
export type SignedParams = Readonly<Record<string, string>>;
|
|
17
|
+
/** The parameter a signature travels in, chosen to be short and unremarkable. */
|
|
18
|
+
export declare const signatureParam = "s";
|
|
19
|
+
/**
|
|
20
|
+
* The signature for a set of parameters.
|
|
21
|
+
*
|
|
22
|
+
* Everything that must not be tampered with has to be in `params`: the
|
|
23
|
+
* signature covers those and nothing else, so a template name or a size left
|
|
24
|
+
* outside them is a template name or a size anyone can change.
|
|
25
|
+
*/
|
|
26
|
+
export declare function signParams(params: SignedParams, secret: string): Promise<string>;
|
|
27
|
+
/**
|
|
28
|
+
* Whether a signature is the one these parameters should carry.
|
|
29
|
+
*
|
|
30
|
+
* The comparison is `crypto.subtle.verify` rather than one of two strings,
|
|
31
|
+
* because a comparison that stops at the first wrong byte tells an attacker how
|
|
32
|
+
* much of a guess was right.
|
|
33
|
+
*/
|
|
34
|
+
export declare function verifyParams(params: SignedParams, signature: string, secret: string): Promise<boolean>;
|
|
35
|
+
/** The query string for a set of parameters, with its signature appended. */
|
|
36
|
+
export declare function signedQuery(params: SignedParams, secret: string): Promise<string>;
|
|
37
|
+
/**
|
|
38
|
+
* Check a request's own query string, which is the shape the check takes in a
|
|
39
|
+
* route handler: everything but the signature is what was signed.
|
|
40
|
+
*
|
|
41
|
+
* A repeated parameter is refused rather than resolved. A query string may
|
|
42
|
+
* carry the same key twice, and the two ends then disagree about which one it
|
|
43
|
+
* means: `URLSearchParams.get` takes the first, and building an object from the
|
|
44
|
+
* pairs takes the last. An attacker appending their own copy of a key to a URL
|
|
45
|
+
* that was signed for the other value is the whole attack this exists to stop,
|
|
46
|
+
* and no honest signed URL repeats a key.
|
|
47
|
+
*/
|
|
48
|
+
export declare function verifySignedQuery(search: URLSearchParams, secret: string): Promise<boolean>;
|
|
49
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sign/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE5D,iFAAiF;AACjF,eAAO,MAAM,cAAc,MAAM,CAAC;AAuElC;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED,6EAA6E;AAC7E,wBAAsB,WAAW,CAC/B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAwBlB"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signing the parameters of an image request.
|
|
3
|
+
*
|
|
4
|
+
* Rendering on demand means an endpoint that turns a query string into a
|
|
5
|
+
* picture, and an endpoint like that is an open image generator for anyone who
|
|
6
|
+
* finds it: they choose the text, your domain serves it, and your bill pays for
|
|
7
|
+
* it. Signing is what makes the URLs your own, since only the site holding the
|
|
8
|
+
* secret can produce one the endpoint will answer.
|
|
9
|
+
*
|
|
10
|
+
* It uses Web Crypto, which is the one HMAC available everywhere this is meant
|
|
11
|
+
* to run: browsers, workers, and Node since 18.
|
|
12
|
+
*/
|
|
13
|
+
import { fromBase64Url, toBase64Url } from "./base64url.js";
|
|
14
|
+
/** The parameter a signature travels in, chosen to be short and unremarkable. */
|
|
15
|
+
export const signatureParam = "s";
|
|
16
|
+
/**
|
|
17
|
+
* Order two keys the same way everywhere.
|
|
18
|
+
*
|
|
19
|
+
* By code unit rather than `localeCompare`, which is what the rest of this
|
|
20
|
+
* package sorts with. That is for people reading a list; this is a protocol,
|
|
21
|
+
* and the two ends of it are usually two different machines. `localeCompare`
|
|
22
|
+
* puts "ä" before "z" under `en` and after it under `sv`, so a URL signed by a
|
|
23
|
+
* build could be refused by the edge that serves it.
|
|
24
|
+
*/
|
|
25
|
+
function byCodeUnit(a, b) {
|
|
26
|
+
if (a === b) {
|
|
27
|
+
return 0;
|
|
28
|
+
}
|
|
29
|
+
return a < b ? -1 : 1;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The exact bytes signed, so that signing and verifying agree.
|
|
33
|
+
*
|
|
34
|
+
* Sorted, because a query string means the same thing whatever order it arrives
|
|
35
|
+
* in, and a signature that did not would fail on a URL a proxy had tidied.
|
|
36
|
+
* `URLSearchParams` does the escaping, so a value containing an `&` cannot be
|
|
37
|
+
* read as two parameters, which is the way a scheme like this is usually
|
|
38
|
+
* broken.
|
|
39
|
+
*/
|
|
40
|
+
// `Uint8Array<ArrayBuffer>` rather than the default `ArrayBufferLike`, which
|
|
41
|
+
// Web Crypto will not take: it cannot work on a shared buffer.
|
|
42
|
+
function canonical(params) {
|
|
43
|
+
const search = new URLSearchParams();
|
|
44
|
+
for (const key of Object.keys(params).toSorted(byCodeUnit)) {
|
|
45
|
+
search.append(key, params[key] ?? "");
|
|
46
|
+
}
|
|
47
|
+
return new TextEncoder().encode(search.toString());
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Refuse a parameter set that carries the signature parameter itself.
|
|
51
|
+
*
|
|
52
|
+
* Dropping it quietly would sign something other than what the caller passed,
|
|
53
|
+
* and `signedQuery` would then put two of them in one URL. Neither is a thing
|
|
54
|
+
* to guess about, and a caller in that position has made a mistake worth being
|
|
55
|
+
* told about.
|
|
56
|
+
*/
|
|
57
|
+
function assertSignable(params) {
|
|
58
|
+
if (Object.hasOwn(params, signatureParam)) {
|
|
59
|
+
throw new Error(`"${signatureParam}" is the parameter the signature itself travels in,` +
|
|
60
|
+
` so it cannot be one of the parameters being signed. Rename it.`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** The secret as a key Web Crypto will sign or verify with, and nothing else. */
|
|
64
|
+
async function hmacKey(secret, use) {
|
|
65
|
+
return crypto.subtle.importKey("raw", new TextEncoder().encode(secret), { name: "HMAC", hash: "SHA-256" }, false, [use]);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The signature for a set of parameters.
|
|
69
|
+
*
|
|
70
|
+
* Everything that must not be tampered with has to be in `params`: the
|
|
71
|
+
* signature covers those and nothing else, so a template name or a size left
|
|
72
|
+
* outside them is a template name or a size anyone can change.
|
|
73
|
+
*/
|
|
74
|
+
export async function signParams(params, secret) {
|
|
75
|
+
assertSignable(params);
|
|
76
|
+
const signature = await crypto.subtle.sign("HMAC", await hmacKey(secret, "sign"), canonical(params));
|
|
77
|
+
return toBase64Url(new Uint8Array(signature));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Whether a signature is the one these parameters should carry.
|
|
81
|
+
*
|
|
82
|
+
* The comparison is `crypto.subtle.verify` rather than one of two strings,
|
|
83
|
+
* because a comparison that stops at the first wrong byte tells an attacker how
|
|
84
|
+
* much of a guess was right.
|
|
85
|
+
*/
|
|
86
|
+
export async function verifyParams(params, signature, secret) {
|
|
87
|
+
try {
|
|
88
|
+
return await crypto.subtle.verify("HMAC", await hmacKey(secret, "verify"), fromBase64Url(signature), canonical(params));
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// A signature that is not base64url at all is simply a wrong one.
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** The query string for a set of parameters, with its signature appended. */
|
|
96
|
+
export async function signedQuery(params, secret) {
|
|
97
|
+
assertSignable(params);
|
|
98
|
+
const search = new URLSearchParams(params);
|
|
99
|
+
search.append(signatureParam, await signParams(params, secret));
|
|
100
|
+
return search.toString();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Check a request's own query string, which is the shape the check takes in a
|
|
104
|
+
* route handler: everything but the signature is what was signed.
|
|
105
|
+
*
|
|
106
|
+
* A repeated parameter is refused rather than resolved. A query string may
|
|
107
|
+
* carry the same key twice, and the two ends then disagree about which one it
|
|
108
|
+
* means: `URLSearchParams.get` takes the first, and building an object from the
|
|
109
|
+
* pairs takes the last. An attacker appending their own copy of a key to a URL
|
|
110
|
+
* that was signed for the other value is the whole attack this exists to stop,
|
|
111
|
+
* and no honest signed URL repeats a key.
|
|
112
|
+
*/
|
|
113
|
+
export async function verifySignedQuery(search, secret) {
|
|
114
|
+
const params = {};
|
|
115
|
+
let signature;
|
|
116
|
+
for (const [key, value] of search) {
|
|
117
|
+
if (key === signatureParam) {
|
|
118
|
+
if (signature !== undefined) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
signature = value;
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (Object.hasOwn(params, key)) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
params[key] = value;
|
|
128
|
+
}
|
|
129
|
+
return signature === undefined
|
|
130
|
+
? false
|
|
131
|
+
: verifyParams(params, signature, secret);
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sign/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { StampCarrier } from "./types.js";
|
|
2
|
+
export type { StampCarrier } from "./types.js";
|
|
3
|
+
/** The carrier for these bytes, read from their signature. */
|
|
4
|
+
export declare function carrierFor(head: Buffer): StampCarrier | undefined;
|
|
5
|
+
/** What the containers are called, for the message when none of them fits. */
|
|
6
|
+
export declare function carrierFormats(): string;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stamp/carrier/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAiB/C,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEjE;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { isobmffCarrier } from "./isobmff.js";
|
|
2
|
+
import { jpegCarrier } from "./jpeg.js";
|
|
3
|
+
import { pngCarrier } from "./png.js";
|
|
4
|
+
import { riffCarrier } from "./riff.js";
|
|
5
|
+
/**
|
|
6
|
+
* Every container a stamp can go into, tried in the order they are written.
|
|
7
|
+
*
|
|
8
|
+
* Each one owns its own signature as well as its reading and writing, so the
|
|
9
|
+
* package has no second opinion about what a file is: `image/media.ts` sniffs
|
|
10
|
+
* the formats a build can _draw_ with, which is a different list arrived at for
|
|
11
|
+
* a different reason, and neither should be made to answer for the other.
|
|
12
|
+
*/
|
|
13
|
+
const carriers = [
|
|
14
|
+
pngCarrier,
|
|
15
|
+
jpegCarrier,
|
|
16
|
+
riffCarrier,
|
|
17
|
+
isobmffCarrier,
|
|
18
|
+
];
|
|
19
|
+
/** The carrier for these bytes, read from their signature. */
|
|
20
|
+
export function carrierFor(head) {
|
|
21
|
+
return carriers.find((carrier) => carrier.matches(head));
|
|
22
|
+
}
|
|
23
|
+
/** What the containers are called, for the message when none of them fits. */
|
|
24
|
+
export function carrierFormats() {
|
|
25
|
+
return carriers.map(({ format }) => format).join(", ");
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stamp/carrier/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAKxC;;;;;;;GAOG;AACH,MAAM,QAAQ,GAA4B;IACxC,UAAU;IACV,WAAW;IACX,WAAW;IACX,cAAc;CACf,CAAC;AAEF,8DAA8D;AAC9D,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,cAAc;IAC5B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isobmff.d.ts","sourceRoot":"","sources":["../../../src/stamp/carrier/isobmff.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAuD/C;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,YAM5B,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { findPayload, stampFromPayload } from "../payload.js";
|
|
2
|
+
/**
|
|
3
|
+
* The UUID the stamp box is tagged with. ISO base media keeps the `uuid` box
|
|
4
|
+
* for data its own format does not define, identified by a UUID whoever writes
|
|
5
|
+
* it picks once. This is Colophon's, and it means nothing beyond being
|
|
6
|
+
* unlikely to be anybody else's.
|
|
7
|
+
*/
|
|
8
|
+
const stampUuid = Buffer.from("5d5f8f3a9b7c4e2ab1c6f0a83d47e912", "hex");
|
|
9
|
+
/** A four-byte size, four characters of type, then the UUID. */
|
|
10
|
+
const header = 8 + stampUuid.length;
|
|
11
|
+
function isIsobmff(head) {
|
|
12
|
+
return head.length >= 8 && head.toString("latin1", 4, 8) === "ftyp";
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The file with the stamp box on the end of it.
|
|
16
|
+
*
|
|
17
|
+
* Appended rather than put after `ftyp`, where it would read better, because
|
|
18
|
+
* an AVIF locates the picture inside `mdat` by its offset from the start of the
|
|
19
|
+
* file. Anything inserted in front of `mdat` moves it, and the file then names
|
|
20
|
+
* the wrong bytes as its own image.
|
|
21
|
+
*/
|
|
22
|
+
function write(image, payload) {
|
|
23
|
+
const box = Buffer.alloc(header + payload.length);
|
|
24
|
+
box.writeUInt32BE(box.length, 0);
|
|
25
|
+
box.write("uuid", 4, "latin1");
|
|
26
|
+
stampUuid.copy(box, 8);
|
|
27
|
+
payload.copy(box, header);
|
|
28
|
+
return Buffer.concat([image, box]);
|
|
29
|
+
}
|
|
30
|
+
function read(tail) {
|
|
31
|
+
const at = findPayload(tail);
|
|
32
|
+
const start = at - header;
|
|
33
|
+
if (start < 0 ||
|
|
34
|
+
tail.toString("latin1", start + 4, start + 8) !== "uuid" ||
|
|
35
|
+
!tail.subarray(start + 8, at).equals(stampUuid)) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
// Unlike a RIFF chunk, a box states the size of the whole of itself.
|
|
39
|
+
const end = start + tail.readUInt32BE(start);
|
|
40
|
+
return end > tail.length
|
|
41
|
+
? undefined
|
|
42
|
+
: stampFromPayload(tail.subarray(at, end));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* ISO base media, which is AVIF and HEIC, where the stamp is a `uuid` box on
|
|
46
|
+
* the end of the file.
|
|
47
|
+
*/
|
|
48
|
+
export const isobmffCarrier = {
|
|
49
|
+
format: "AVIF",
|
|
50
|
+
end: "tail",
|
|
51
|
+
matches: isIsobmff,
|
|
52
|
+
write,
|
|
53
|
+
read,
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=isobmff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isobmff.js","sourceRoot":"","sources":["../../../src/stamp/carrier/isobmff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAG9D;;;;;GAKG;AACH,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;AAEzE,gEAAgE;AAChE,MAAM,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;AAEpC,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,KAAK,CAAC,KAAa,EAAE,OAAe;IAC3C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAElD,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACjC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC/B,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACvB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAE1B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,IAAI,CAAC,IAAY;IACxB,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC;IAE1B,IACE,KAAK,GAAG,CAAC;QACT,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,MAAM;QACxD,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAC/C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,qEAAqE;IACrE,MAAM,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7C,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;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,MAAM;IACX,OAAO,EAAE,SAAS;IAClB,KAAK;IACL,IAAI;CACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jpeg.d.ts","sourceRoot":"","sources":["../../../src/stamp/carrier/jpeg.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAsF/C,+EAA+E;AAC/E,eAAO,MAAM,WAAW,EAAE,YAMzB,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { jpegSegments } from "../../jpeg/segments.js";
|
|
2
|
+
import { stampFromPayload } from "../payload.js";
|
|
3
|
+
import { stampWindow } from "../window.js";
|
|
4
|
+
/** The comment marker, which is where the stamp goes. */
|
|
5
|
+
const comment = 0xfe;
|
|
6
|
+
/** The most a segment can carry: its two-byte length counts itself. */
|
|
7
|
+
const maxPayload = 0xff_ff - 2;
|
|
8
|
+
/** An application segment, `APP0` through `APP15`. */
|
|
9
|
+
function isApplication(marker) {
|
|
10
|
+
return marker >= 0xe0 && marker <= 0xef;
|
|
11
|
+
}
|
|
12
|
+
function isJpeg(head) {
|
|
13
|
+
return (head.length >= 3 && head.readUInt8(0) === 0xff && head.readUInt8(1) === 0xd8);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Where a comment of `length` bytes goes: after the start-of-image marker, and
|
|
17
|
+
* past whatever application segments come first.
|
|
18
|
+
*
|
|
19
|
+
* Both JFIF and Exif want their own `APPn` to be the first thing after `SOI`.
|
|
20
|
+
* A comment written ahead of one leaves a file that still decodes but whose
|
|
21
|
+
* metadata a strict reader no longer finds, which is a needless thing for a
|
|
22
|
+
* rebuild stamp to cost.
|
|
23
|
+
*
|
|
24
|
+
* It has to end inside the window the stamp is read back through, though, and
|
|
25
|
+
* that wins where the two disagree: an embedded colour profile can run to tens
|
|
26
|
+
* of kilobytes, and a stamp written past it would be a stamp no later build
|
|
27
|
+
* ever finds, leaving the image to render again every time and nothing to say
|
|
28
|
+
* why. So the last segment boundary with room for the comment is where it goes,
|
|
29
|
+
* and failing every one of them, straight after `SOI`.
|
|
30
|
+
*/
|
|
31
|
+
function insertionPoint(jpeg, length) {
|
|
32
|
+
let offset = 2;
|
|
33
|
+
for (const segment of jpegSegments(jpeg)) {
|
|
34
|
+
if (!isApplication(segment.marker) || segment.end + length > stampWindow) {
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
offset = segment.end;
|
|
38
|
+
}
|
|
39
|
+
return offset;
|
|
40
|
+
}
|
|
41
|
+
function write(jpeg, payload) {
|
|
42
|
+
if (payload.length > maxPayload) {
|
|
43
|
+
throw new Error(`Cannot stamp: the stamp needs ${String(payload.length)} bytes and a` +
|
|
44
|
+
` JPEG comment holds ${String(maxPayload)}.`);
|
|
45
|
+
}
|
|
46
|
+
const segment = Buffer.alloc(4 + payload.length);
|
|
47
|
+
segment.writeUInt8(0xff, 0);
|
|
48
|
+
segment.writeUInt8(comment, 1);
|
|
49
|
+
segment.writeUInt16BE(payload.length + 2, 2);
|
|
50
|
+
payload.copy(segment, 4);
|
|
51
|
+
const at = insertionPoint(jpeg, segment.length);
|
|
52
|
+
return Buffer.concat([jpeg.subarray(0, at), segment, jpeg.subarray(at)]);
|
|
53
|
+
}
|
|
54
|
+
function read(head) {
|
|
55
|
+
for (const { marker, start, end, truncated } of jpegSegments(head)) {
|
|
56
|
+
// Half a comment is half a stamp, which would never match anything but is
|
|
57
|
+
// not the sort of thing to hand back and hope.
|
|
58
|
+
if (marker !== comment || truncated) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const stamp = stampFromPayload(head.subarray(start, end));
|
|
62
|
+
if (stamp !== undefined) {
|
|
63
|
+
return stamp;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
/** JPEG, where the stamp is a `COM` segment among the ones before the scan. */
|
|
69
|
+
export const jpegCarrier = {
|
|
70
|
+
format: "JPEG",
|
|
71
|
+
end: "head",
|
|
72
|
+
matches: isJpeg,
|
|
73
|
+
write,
|
|
74
|
+
read,
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=jpeg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jpeg.js","sourceRoot":"","sources":["../../../src/stamp/carrier/jpeg.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { StampCarrier } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* PNG, where the stamp is a `tEXt` chunk straight after the header, so it can
|
|
4
|
+
* be read back without decoding the image.
|
|
5
|
+
*/
|
|
6
|
+
export declare const pngCarrier: StampCarrier;
|
|
7
|
+
//# sourceMappingURL=png.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"png.d.ts","sourceRoot":"","sources":["../../../src/stamp/carrier/png.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA6C/C;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,YAWxB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { chunkBytes, pngSignature } from "../../png/chunk.js";
|
|
2
|
+
import { stampFromPayload } from "../payload.js";
|
|
3
|
+
/** Signature + the whole `IHDR` chunk: length, type, 13 bytes of data, CRC. */
|
|
4
|
+
const afterHeader = pngSignature.length + 4 + 4 + 13 + 4;
|
|
5
|
+
function isPng(head) {
|
|
6
|
+
return (head.length >= afterHeader &&
|
|
7
|
+
head.subarray(0, pngSignature.length).equals(pngSignature) &&
|
|
8
|
+
head.toString("latin1", 12, 16) === "IHDR");
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The stamp in the first `tEXt` chunk that carries one, reading the chunks in
|
|
12
|
+
* the order the file declares them.
|
|
13
|
+
*/
|
|
14
|
+
function read(head) {
|
|
15
|
+
let offset = pngSignature.length;
|
|
16
|
+
while (offset + 8 <= head.length) {
|
|
17
|
+
const length = head.readUInt32BE(offset);
|
|
18
|
+
const type = head.toString("latin1", offset + 4, offset + 8);
|
|
19
|
+
const start = offset + 8;
|
|
20
|
+
const end = start + length;
|
|
21
|
+
// Image data starts here; anything past it is not worth reading for a hash.
|
|
22
|
+
if (type === "IDAT" || type === "IEND" || end > head.length) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
if (type === "tEXt") {
|
|
26
|
+
const stamp = stampFromPayload(head.subarray(start, end));
|
|
27
|
+
if (stamp !== undefined) {
|
|
28
|
+
return stamp;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
offset = end + 4;
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* PNG, where the stamp is a `tEXt` chunk straight after the header, so it can
|
|
37
|
+
* be read back without decoding the image.
|
|
38
|
+
*/
|
|
39
|
+
export const pngCarrier = {
|
|
40
|
+
format: "PNG",
|
|
41
|
+
end: "head",
|
|
42
|
+
matches: isPng,
|
|
43
|
+
write: (png, payload) => Buffer.concat([
|
|
44
|
+
png.subarray(0, afterHeader),
|
|
45
|
+
chunkBytes("tEXt", payload),
|
|
46
|
+
png.subarray(afterHeader),
|
|
47
|
+
]),
|
|
48
|
+
read,
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=png.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"png.js","sourceRoot":"","sources":["../../../src/stamp/carrier/png.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjD,+EAA+E;AAC/E,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAEzD,SAAS,KAAK,CAAC,IAAY;IACzB,OAAO,CACL,IAAI,CAAC,MAAM,IAAI,WAAW;QAC1B,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,MAAM,CAC3C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,IAAI,CAAC,IAAY;IACxB,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,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;YAE1D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAiB;IACtC,MAAM,EAAE,KAAK;IACb,GAAG,EAAE,MAAM;IACX,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CACtB,MAAM,CAAC,MAAM,CAAC;QACZ,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC;QAC5B,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC;QAC3B,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC1B,CAAC;IACJ,IAAI;CACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"riff.d.ts","sourceRoot":"","sources":["../../../src/stamp/carrier/riff.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAyD/C,+EAA+E;AAC/E,eAAO,MAAM,WAAW,EAAE,YAMzB,CAAC"}
|