@kensio/colophon 2.4.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +139 -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/background/gradient.d.ts +12 -0
- package/dist/background/gradient.d.ts.map +1 -0
- package/dist/background/gradient.js +21 -0
- package/dist/background/gradient.js.map +1 -0
- package/dist/background/image.d.ts +14 -0
- package/dist/background/image.d.ts.map +1 -0
- package/dist/background/image.js +36 -0
- package/dist/background/image.js.map +1 -0
- package/dist/{background.d.ts → background/index.d.ts} +5 -5
- package/dist/background/index.d.ts.map +1 -0
- package/dist/background/index.js +27 -0
- package/dist/background/index.js.map +1 -0
- package/dist/background/mesh.d.ts +12 -0
- package/dist/background/mesh.d.ts.map +1 -0
- package/dist/background/mesh.js +43 -0
- package/dist/background/mesh.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 +2 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +27 -6
- 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/config/size.d.ts +6 -0
- package/dist/config/size.d.ts.map +1 -1
- package/dist/config/size.js +20 -8
- package/dist/config/size.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 +10 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -4
- 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 +10 -2
- 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 +25 -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/badge-props.d.ts +16 -0
- package/dist/templates/banner/badge-props.d.ts.map +1 -0
- package/dist/templates/banner/badge-props.js +58 -0
- package/dist/templates/banner/badge-props.js.map +1 -0
- package/dist/templates/banner/index.d.ts.map +1 -1
- package/dist/templates/banner/index.js +6 -4
- package/dist/templates/banner/index.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/texture/grain.d.ts +17 -0
- package/dist/texture/grain.d.ts.map +1 -0
- package/dist/texture/grain.js +29 -0
- package/dist/texture/grain.js.map +1 -0
- package/dist/texture/index.d.ts +11 -0
- package/dist/texture/index.d.ts.map +1 -0
- package/dist/texture/index.js +20 -0
- package/dist/texture/index.js.map +1 -0
- package/dist/texture/pattern.d.ts +17 -0
- package/dist/texture/pattern.d.ts.map +1 -0
- package/dist/texture/pattern.js +45 -0
- package/dist/texture/pattern.js.map +1 -0
- package/dist/texture/resolve.d.ts +16 -0
- package/dist/texture/resolve.d.ts.map +1 -0
- package/dist/texture/resolve.js +20 -0
- package/dist/texture/resolve.js.map +1 -0
- package/dist/theme/index.d.ts +27 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +41 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/presets.d.ts +38 -0
- package/dist/theme/presets.d.ts.map +1 -0
- package/dist/theme/presets.js +150 -0
- package/dist/theme/presets.js.map +1 -0
- package/dist/types.d.ts +281 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/validate/background.d.ts +12 -0
- package/dist/validate/background.d.ts.map +1 -0
- package/dist/validate/background.js +53 -0
- package/dist/validate/background.js.map +1 -0
- package/dist/validate/collect.d.ts +9 -0
- package/dist/validate/collect.d.ts.map +1 -0
- package/dist/validate/collect.js +35 -0
- package/dist/validate/collect.js.map +1 -0
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js +2 -20
- package/dist/validate/index.js.map +1 -1
- package/dist/validate/keys.d.ts +22 -0
- package/dist/validate/keys.d.ts.map +1 -1
- package/dist/validate/keys.js +69 -0
- package/dist/validate/keys.js.map +1 -1
- package/dist/validate/overrides.d.ts.map +1 -1
- package/dist/validate/overrides.js +5 -1
- package/dist/validate/overrides.js.map +1 -1
- package/dist/validate/texture.d.ts +11 -0
- package/dist/validate/texture.d.ts.map +1 -0
- package/dist/validate/texture.js +34 -0
- package/dist/validate/texture.js.map +1 -0
- package/dist/validate/values.d.ts +16 -10
- package/dist/validate/values.d.ts.map +1 -1
- package/dist/validate/values.js +31 -44
- package/dist/validate/values.js.map +1 -1
- package/package.json +16 -2
- 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,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The content root to read a previewed post against, which is what its slug is
|
|
3
|
+
* derived from, and so what the preview file ends up called.
|
|
4
|
+
*
|
|
5
|
+
* The working directory, for a file underneath it: that is what the path on the
|
|
6
|
+
* command line was relative to, and it keeps the page-bundle convention
|
|
7
|
+
* working, where `hello/index.md` is named after its directory instead of being
|
|
8
|
+
* one more `index`. A file from somewhere else falls back to its own directory,
|
|
9
|
+
* since a root it is not under cannot describe it, and a relative path full of
|
|
10
|
+
* `..` segments is not a slug at all.
|
|
11
|
+
*
|
|
12
|
+
* The slug only ever names a file in the temp directory here, so the point is
|
|
13
|
+
* that two posts do not collide, rather than matching what a build would call
|
|
14
|
+
* the real image.
|
|
15
|
+
*/
|
|
16
|
+
export declare function contentRootFor(file: string): string;
|
|
17
|
+
//# sourceMappingURL=root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../src/cli/preview/root.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKnD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
/**
|
|
3
|
+
* The content root to read a previewed post against, which is what its slug is
|
|
4
|
+
* derived from, and so what the preview file ends up called.
|
|
5
|
+
*
|
|
6
|
+
* The working directory, for a file underneath it: that is what the path on the
|
|
7
|
+
* command line was relative to, and it keeps the page-bundle convention
|
|
8
|
+
* working, where `hello/index.md` is named after its directory instead of being
|
|
9
|
+
* one more `index`. A file from somewhere else falls back to its own directory,
|
|
10
|
+
* since a root it is not under cannot describe it, and a relative path full of
|
|
11
|
+
* `..` segments is not a slug at all.
|
|
12
|
+
*
|
|
13
|
+
* The slug only ever names a file in the temp directory here, so the point is
|
|
14
|
+
* that two posts do not collide, rather than matching what a build would call
|
|
15
|
+
* the real image.
|
|
16
|
+
*/
|
|
17
|
+
export function contentRootFor(file) {
|
|
18
|
+
const absolute = path.resolve(file);
|
|
19
|
+
const cwd = process.cwd();
|
|
20
|
+
return absolute.startsWith(cwd + path.sep) ? cwd : path.dirname(absolute);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../../src/cli/preview/root.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { OutputSize } from "../../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Which size to preview: the one `--size` names, or the first configured one,
|
|
4
|
+
* which is what an `extra` image already defaults to.
|
|
5
|
+
*/
|
|
6
|
+
export declare function pickSize(sizes: readonly OutputSize[], name: string | undefined): OutputSize;
|
|
7
|
+
//# sourceMappingURL=size.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"size.d.ts","sourceRoot":"","sources":["../../../src/cli/preview/size.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,UAAU,CAWZ"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which size to preview: the one `--size` names, or the first configured one,
|
|
3
|
+
* which is what an `extra` image already defaults to.
|
|
4
|
+
*/
|
|
5
|
+
export function pickSize(sizes, name) {
|
|
6
|
+
const names = sizes.map((size) => size.name);
|
|
7
|
+
const wanted = sizes.find((size) => size.name === (name ?? names[0]));
|
|
8
|
+
if (wanted === undefined) {
|
|
9
|
+
throw new Error(`Unknown size "${String(name)}". Configured sizes: ${names.join(", ")}.`);
|
|
10
|
+
}
|
|
11
|
+
return wanted;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=size.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"size.js","sourceRoot":"","sources":["../../../src/cli/preview/size.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,QAAQ,CACtB,KAA4B,EAC5B,IAAwB;IAExB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,iBAAiB,MAAM,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACzE,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { GeneratedImage } from "../generate/index.js";
|
|
2
|
+
/** Report one image as it is written, or as it is left alone. */
|
|
3
|
+
export declare function reportImage(result: GeneratedImage, isDryRun: boolean): void;
|
|
4
|
+
/** Report what a whole run came to. */
|
|
5
|
+
export declare function reportSummary(results: readonly GeneratedImage[], isDryRun: boolean): void;
|
|
6
|
+
//# sourceMappingURL=report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAW3D,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAQ3E;AAED,uCAAuC;AACvC,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,QAAQ,EAAE,OAAO,GAChB,IAAI,CASN"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** What this run did, or would have done, to one image. */
|
|
2
|
+
function verbFor(result, isDryRun) {
|
|
3
|
+
if (result.skipped) {
|
|
4
|
+
return "skip";
|
|
5
|
+
}
|
|
6
|
+
return isDryRun ? "write" : "wrote";
|
|
7
|
+
}
|
|
8
|
+
/** Report one image as it is written, or as it is left alone. */
|
|
9
|
+
export function reportImage(result, isDryRun) {
|
|
10
|
+
// The URL is the half of a placement nothing else on the command line
|
|
11
|
+
// would show, and the quickest way to see a `urlBase` is wrong.
|
|
12
|
+
const served = result.url === undefined ? "" : ` -> ${result.url}`;
|
|
13
|
+
console.log(`${verbFor(result, isDryRun).padEnd(5)} ${result.outputPath}${served}`);
|
|
14
|
+
}
|
|
15
|
+
/** Report what a whole run came to. */
|
|
16
|
+
export function reportSummary(results, isDryRun) {
|
|
17
|
+
const written = results.filter((result) => !result.skipped).length;
|
|
18
|
+
const skipped = String(results.length - written);
|
|
19
|
+
console.log(isDryRun
|
|
20
|
+
? `Dry run: ${String(written)} would be written, ${skipped} already up to date. Nothing was written.`
|
|
21
|
+
: `Done: ${String(written)} written, ${skipped} skipped.`);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"AAEA,2DAA2D;AAC3D,SAAS,OAAO,CAAC,MAAsB,EAAE,QAAiB;IACxD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AACtC,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,WAAW,CAAC,MAAsB,EAAE,QAAiB;IACnE,sEAAsE;IACtE,gEAAgE;IAChE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC;IAEnE,OAAO,CAAC,GAAG,CACT,GAAG,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,UAAU,GAAG,MAAM,EAAE,CACvE,CAAC;AACJ,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,aAAa,CAC3B,OAAkC,EAClC,QAAiB;IAEjB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IACnE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;IAEjD,OAAO,CAAC,GAAG,CACT,QAAQ;QACN,CAAC,CAAC,YAAY,MAAM,CAAC,OAAO,CAAC,sBAAsB,OAAO,2CAA2C;QACrG,CAAC,CAAC,SAAS,MAAM,CAAC,OAAO,CAAC,aAAa,OAAO,WAAW,CAC5D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a change under the content root is one worth rebuilding for.
|
|
3
|
+
*
|
|
4
|
+
* Two kinds of change arrive that are not content. The images themselves: the
|
|
5
|
+
* default placement writes a PNG next to the post it came from, so every build
|
|
6
|
+
* changes the tree it is watching. And an editor's own files, such as
|
|
7
|
+
* `post.md~` or `.post.md.swp`, which come and go around the real write.
|
|
8
|
+
*
|
|
9
|
+
* Both are ruled out by the extensions a walk would read, which is the same
|
|
10
|
+
* list that decides what a build looks at. So the watcher and the build agree
|
|
11
|
+
* on what content is, rather than keeping two ideas of it.
|
|
12
|
+
*/
|
|
13
|
+
export declare function isContentChange(filename: string, extensions: readonly string[]): boolean;
|
|
14
|
+
//# sourceMappingURL=filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/cli/watch/filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,OAAO,CAET"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a change under the content root is one worth rebuilding for.
|
|
3
|
+
*
|
|
4
|
+
* Two kinds of change arrive that are not content. The images themselves: the
|
|
5
|
+
* default placement writes a PNG next to the post it came from, so every build
|
|
6
|
+
* changes the tree it is watching. And an editor's own files, such as
|
|
7
|
+
* `post.md~` or `.post.md.swp`, which come and go around the real write.
|
|
8
|
+
*
|
|
9
|
+
* Both are ruled out by the extensions a walk would read, which is the same
|
|
10
|
+
* list that decides what a build looks at. So the watcher and the build agree
|
|
11
|
+
* on what content is, rather than keeping two ideas of it.
|
|
12
|
+
*/
|
|
13
|
+
export function isContentChange(filename, extensions) {
|
|
14
|
+
return extensions.some((extension) => filename.endsWith(extension));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/cli/watch/filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,UAA6B;IAE7B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** What a watch run needs: where to look, what counts, and what to run. */
|
|
2
|
+
export interface WatchOptions {
|
|
3
|
+
readonly dir: string;
|
|
4
|
+
/** File extensions the build reads, which is what a change has to be. */
|
|
5
|
+
readonly extensions: readonly string[];
|
|
6
|
+
readonly build: () => Promise<void>;
|
|
7
|
+
/** Coalescing window, for tests that would rather not wait for it. */
|
|
8
|
+
readonly delayMs?: number;
|
|
9
|
+
/** Stop watching. The CLI watches until the process ends; tests do not. */
|
|
10
|
+
readonly signal?: AbortSignal;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Build the tree, then rebuild it whenever a content file changes, until the
|
|
14
|
+
* process is stopped.
|
|
15
|
+
*
|
|
16
|
+
* The returned promise settles when the watcher stops or fails, which is what
|
|
17
|
+
* keeps the process alive: there is nothing else to await once the first build
|
|
18
|
+
* is done. The watcher is registered before that build starts, so an edit made
|
|
19
|
+
* while it runs is not lost.
|
|
20
|
+
*
|
|
21
|
+
* Only the content tree is watched. A change to the config module is not picked
|
|
22
|
+
* up, because reloading it would mean importing it again under a fresh URL and
|
|
23
|
+
* leaving the old copy behind, and the modules it imports could not be
|
|
24
|
+
* invalidated at all. Restart the watch after editing a config.
|
|
25
|
+
*/
|
|
26
|
+
export declare function watchContent(options: WatchOptions): Promise<void>;
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/watch/index.ts"],"names":[],"mappings":"AAKA,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BvE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { watch } from "node:fs";
|
|
2
|
+
import { isContentChange } from "./filter.js";
|
|
3
|
+
import { createRebuildQueue } from "./queue.js";
|
|
4
|
+
/**
|
|
5
|
+
* Build the tree, then rebuild it whenever a content file changes, until the
|
|
6
|
+
* process is stopped.
|
|
7
|
+
*
|
|
8
|
+
* The returned promise settles when the watcher stops or fails, which is what
|
|
9
|
+
* keeps the process alive: there is nothing else to await once the first build
|
|
10
|
+
* is done. The watcher is registered before that build starts, so an edit made
|
|
11
|
+
* while it runs is not lost.
|
|
12
|
+
*
|
|
13
|
+
* Only the content tree is watched. A change to the config module is not picked
|
|
14
|
+
* up, because reloading it would mean importing it again under a fresh URL and
|
|
15
|
+
* leaving the old copy behind, and the modules it imports could not be
|
|
16
|
+
* invalidated at all. Restart the watch after editing a config.
|
|
17
|
+
*/
|
|
18
|
+
export async function watchContent(options) {
|
|
19
|
+
const queue = createRebuildQueue({
|
|
20
|
+
run: options.build,
|
|
21
|
+
...(options.delayMs !== undefined && { delayMs: options.delayMs }),
|
|
22
|
+
});
|
|
23
|
+
const watcher = watch(options.dir, {
|
|
24
|
+
recursive: true,
|
|
25
|
+
...(options.signal !== undefined && { signal: options.signal }),
|
|
26
|
+
}, (_event, filename) => {
|
|
27
|
+
if (filename !== null && isContentChange(filename, options.extensions)) {
|
|
28
|
+
queue.touch();
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
console.log(`Watching ${options.dir} for changes. Press Ctrl+C to stop.`);
|
|
32
|
+
queue.touch();
|
|
33
|
+
return new Promise((resolve, reject) => {
|
|
34
|
+
watcher.on("close", resolve);
|
|
35
|
+
watcher.on("error", reject);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/watch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAchD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAqB;IACtD,MAAM,KAAK,GAAG,kBAAkB,CAAC;QAC/B,GAAG,EAAE,OAAO,CAAC,KAAK;QAClB,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;KACnE,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,KAAK,CACnB,OAAO,CAAC,GAAG,EACX;QACE,SAAS,EAAE,IAAI;QACf,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;KAChE,EACD,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;QACnB,IAAI,QAAQ,KAAK,IAAI,IAAI,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACvE,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,GAAG,qCAAqC,CAAC,CAAC;IAC1E,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** A rebuild waiting to happen, or happening. */
|
|
2
|
+
export interface RebuildQueue {
|
|
3
|
+
/** Note that something changed, and rebuild once the changes stop. */
|
|
4
|
+
touch(): void;
|
|
5
|
+
}
|
|
6
|
+
/** How a queue is driven. */
|
|
7
|
+
export interface QueueOptions {
|
|
8
|
+
readonly run: () => Promise<void>;
|
|
9
|
+
/** How long to wait for a burst of changes to finish. */
|
|
10
|
+
readonly delayMs?: number;
|
|
11
|
+
readonly onError?: (error: unknown) => void;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Coalesce change events into rebuilds.
|
|
15
|
+
*
|
|
16
|
+
* Two things have to hold for a watch loop to behave. Saving a file produces
|
|
17
|
+
* more than one event, since editors write, rename and touch mtimes in their
|
|
18
|
+
* own order, so events are held for `delayMs` and the wait restarts while they
|
|
19
|
+
* keep arriving. And a build takes longer than the edit that triggered it, so a
|
|
20
|
+
* change arriving mid-build queues one more run rather than starting a second
|
|
21
|
+
* build alongside the first.
|
|
22
|
+
*/
|
|
23
|
+
export declare function createRebuildQueue(options: QueueOptions): RebuildQueue;
|
|
24
|
+
//# sourceMappingURL=queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/cli/watch/queue.ts"],"names":[],"mappings":"AAEA,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,KAAK,IAAI,IAAI,CAAC;CACf;AAED,6BAA6B;AAC7B,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,yDAAyD;IACzD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7C;AAQD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,CA8CtE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { messageOf } from "../message.js";
|
|
2
|
+
/**
|
|
3
|
+
* Long enough to swallow the several events one save produces, short enough
|
|
4
|
+
* that the rebuild still feels like a consequence of hitting save.
|
|
5
|
+
*/
|
|
6
|
+
const defaultDelayMs = 80;
|
|
7
|
+
/**
|
|
8
|
+
* Coalesce change events into rebuilds.
|
|
9
|
+
*
|
|
10
|
+
* Two things have to hold for a watch loop to behave. Saving a file produces
|
|
11
|
+
* more than one event, since editors write, rename and touch mtimes in their
|
|
12
|
+
* own order, so events are held for `delayMs` and the wait restarts while they
|
|
13
|
+
* keep arriving. And a build takes longer than the edit that triggered it, so a
|
|
14
|
+
* change arriving mid-build queues one more run rather than starting a second
|
|
15
|
+
* build alongside the first.
|
|
16
|
+
*/
|
|
17
|
+
export function createRebuildQueue(options) {
|
|
18
|
+
const delayMs = options.delayMs ?? defaultDelayMs;
|
|
19
|
+
const report = options.onError ??
|
|
20
|
+
((error) => {
|
|
21
|
+
console.error(messageOf(error));
|
|
22
|
+
});
|
|
23
|
+
let timer;
|
|
24
|
+
let isRunning = false;
|
|
25
|
+
let isPending = false;
|
|
26
|
+
async function drain() {
|
|
27
|
+
isRunning = true;
|
|
28
|
+
try {
|
|
29
|
+
await options.run();
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
// A failed build must not take the watcher with it. The mistake is
|
|
33
|
+
// usually in the file that was just saved, so the fix is the next save.
|
|
34
|
+
report(error);
|
|
35
|
+
}
|
|
36
|
+
isRunning = false;
|
|
37
|
+
if (isPending) {
|
|
38
|
+
isPending = false;
|
|
39
|
+
// Called rather than awaited, so `drain` does not recurse into a chain
|
|
40
|
+
// of promises that a long watch session would hold open.
|
|
41
|
+
void drain();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
touch() {
|
|
46
|
+
if (isRunning) {
|
|
47
|
+
isPending = true;
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
clearTimeout(timer);
|
|
51
|
+
timer = setTimeout(() => {
|
|
52
|
+
void drain();
|
|
53
|
+
}, delayMs);
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/cli/watch/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAgB1C;;;GAGG;AACH,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAqB;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,cAAc,CAAC;IAClD,MAAM,MAAM,GACV,OAAO,CAAC,OAAO;QACf,CAAC,CAAC,KAAc,EAAQ,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IAEL,IAAI,KAAiC,CAAC;IACtC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,KAAK,UAAU,KAAK;QAClB,SAAS,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mEAAmE;YACnE,wEAAwE;YACxE,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC;QAED,SAAS,GAAG,KAAK,CAAC;QAElB,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,GAAG,KAAK,CAAC;YAClB,uEAAuE;YACvE,yDAAyD;YACzD,KAAK,KAAK,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK;YACH,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,GAAG,IAAI,CAAC;gBACjB,OAAO;YACT,CAAC;YAED,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtB,KAAK,KAAK,EAAE,CAAC;YACf,CAAC,EAAE,OAAO,CAAC,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BrandColors, CodeStyle, OutputSize } from "../types.js";
|
|
1
|
+
import type { BrandColors, CodeStyle, OutputFormat, OutputSize } from "../types.js";
|
|
2
2
|
/**
|
|
3
3
|
* Named output-size presets covering the common social-image standards. Each
|
|
4
4
|
* `name` becomes the filename suffix (e.g. `my-post-og.png`).
|
|
@@ -42,6 +42,44 @@ export declare const DEFAULT_SIZES: readonly OutputSize[];
|
|
|
42
42
|
* avoid: supply a font file and the output stops depending on the machine.
|
|
43
43
|
*/
|
|
44
44
|
export declare const DEFAULT_FONT_FAMILY = "Arial, Helvetica, sans-serif";
|
|
45
|
+
/**
|
|
46
|
+
* Default zlib level for the rendered PNG: the strongest there is.
|
|
47
|
+
*
|
|
48
|
+
* A meta image is written once and then served for as long as the post is up,
|
|
49
|
+
* so the trade is a hundred milliseconds of build time against bytes every
|
|
50
|
+
* reader pays for. The stamps mean even that time is paid once per image rather
|
|
51
|
+
* than once per build. See `png/recompress.ts` for what the level does and does
|
|
52
|
+
* not change.
|
|
53
|
+
*/
|
|
54
|
+
export declare const DEFAULT_COMPRESSION_LEVEL = 9;
|
|
55
|
+
/**
|
|
56
|
+
* Default output format: PNG, which is what Colophon wrote before there was a
|
|
57
|
+
* choice and what every platform has always accepted.
|
|
58
|
+
*/
|
|
59
|
+
export declare const DEFAULT_FORMAT: OutputFormat;
|
|
60
|
+
/**
|
|
61
|
+
* Default encoding quality for the lossy formats.
|
|
62
|
+
*
|
|
63
|
+
* `80` is where JPEG, WebP and AVIF are conventionally set, and on a meta image
|
|
64
|
+
* it is hard to tell from the original. Gradients are what these pictures are
|
|
65
|
+
* mostly made of and they are the first thing to band, so this is deliberately
|
|
66
|
+
* not lower.
|
|
67
|
+
*/
|
|
68
|
+
export declare const DEFAULT_QUALITY = 80;
|
|
69
|
+
/**
|
|
70
|
+
* The lowest quality `maxBytes` will step down to.
|
|
71
|
+
*
|
|
72
|
+
* Below this the banding is obvious enough that the image is no longer doing
|
|
73
|
+
* its job, and an unreadable image under the cap is not what a cap was for.
|
|
74
|
+
*/
|
|
75
|
+
export declare const MINIMUM_QUALITY = 30;
|
|
76
|
+
/**
|
|
77
|
+
* How far quality drops on each attempt at `maxBytes`.
|
|
78
|
+
*
|
|
79
|
+
* Ten points is a step a reader can predict from the setting they wrote, and
|
|
80
|
+
* from 80 it reaches the floor in five encodings.
|
|
81
|
+
*/
|
|
82
|
+
export declare const QUALITY_STEP = 10;
|
|
45
83
|
/** Neutral default palette, used when no `colors.brand` is supplied. */
|
|
46
84
|
export declare const DEFAULT_COLORS: Required<BrandColors>;
|
|
47
85
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACX,MAAM,aAAa,CAAC;AAErB;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY;;iBACjB,IAAI,EAAE,IAAI;iBAAE,KAAK,EAAE,IAAI;iBAAE,MAAM,EAAE,GAAG;;;iBAChC,IAAI,EAAE,QAAQ;iBAAE,KAAK,EAAE,IAAI;iBAAE,MAAM,EAAE,IAAI;;;iBACxC,IAAI,EAAE,SAAS;iBAAE,KAAK,EAAE,IAAI;iBAAE,MAAM,EAAE,GAAG;;;iBACvC,IAAI,EAAE,WAAW;iBAAE,KAAK,EAAE,IAAI;iBAAE,MAAM,EAAE,IAAI;;CACZ,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,UAAU,EAG9C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,iCAAiC,CAAC;AAElE;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,YAAoB,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC;;;;;GAKG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC;;;;;GAKG;AACH,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B,wEAAwE;AACxE,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,WAAW,CAKhD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,8FACkD,CAAC;AAExF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,SAAS,CAQlD,CAAC"}
|
package/dist/config/defaults.js
CHANGED
|
@@ -28,6 +28,44 @@ export const DEFAULT_SIZES = [
|
|
|
28
28
|
* avoid: supply a font file and the output stops depending on the machine.
|
|
29
29
|
*/
|
|
30
30
|
export const DEFAULT_FONT_FAMILY = "Arial, Helvetica, sans-serif";
|
|
31
|
+
/**
|
|
32
|
+
* Default zlib level for the rendered PNG: the strongest there is.
|
|
33
|
+
*
|
|
34
|
+
* A meta image is written once and then served for as long as the post is up,
|
|
35
|
+
* so the trade is a hundred milliseconds of build time against bytes every
|
|
36
|
+
* reader pays for. The stamps mean even that time is paid once per image rather
|
|
37
|
+
* than once per build. See `png/recompress.ts` for what the level does and does
|
|
38
|
+
* not change.
|
|
39
|
+
*/
|
|
40
|
+
export const DEFAULT_COMPRESSION_LEVEL = 9;
|
|
41
|
+
/**
|
|
42
|
+
* Default output format: PNG, which is what Colophon wrote before there was a
|
|
43
|
+
* choice and what every platform has always accepted.
|
|
44
|
+
*/
|
|
45
|
+
export const DEFAULT_FORMAT = "png";
|
|
46
|
+
/**
|
|
47
|
+
* Default encoding quality for the lossy formats.
|
|
48
|
+
*
|
|
49
|
+
* `80` is where JPEG, WebP and AVIF are conventionally set, and on a meta image
|
|
50
|
+
* it is hard to tell from the original. Gradients are what these pictures are
|
|
51
|
+
* mostly made of and they are the first thing to band, so this is deliberately
|
|
52
|
+
* not lower.
|
|
53
|
+
*/
|
|
54
|
+
export const DEFAULT_QUALITY = 80;
|
|
55
|
+
/**
|
|
56
|
+
* The lowest quality `maxBytes` will step down to.
|
|
57
|
+
*
|
|
58
|
+
* Below this the banding is obvious enough that the image is no longer doing
|
|
59
|
+
* its job, and an unreadable image under the cap is not what a cap was for.
|
|
60
|
+
*/
|
|
61
|
+
export const MINIMUM_QUALITY = 30;
|
|
62
|
+
/**
|
|
63
|
+
* How far quality drops on each attempt at `maxBytes`.
|
|
64
|
+
*
|
|
65
|
+
* Ten points is a step a reader can predict from the setting they wrote, and
|
|
66
|
+
* from 80 it reaches the floor in five encodings.
|
|
67
|
+
*/
|
|
68
|
+
export const QUALITY_STEP = 10;
|
|
31
69
|
/** Neutral default palette, used when no `colors.brand` is supplied. */
|
|
32
70
|
export const DEFAULT_COLORS = {
|
|
33
71
|
brand: "#4f46e5",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAOA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5C,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IACrD,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IACtD,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;CACd,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAA0B;IAClD,YAAY,CAAC,EAAE;IACf,YAAY,CAAC,MAAM;CACpB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,8BAA8B,CAAC;AAElE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAiB,KAAK,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAE/B,wEAAwE;AACxE,MAAM,CAAC,MAAM,cAAc,GAA0B;IACnD,KAAK,EAAE,SAAS;IAChB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE,SAAS;CACtB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GACnC,qFAAqF,CAAC;AAExF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAwB;IACrD,KAAK,EAAE,aAAa;IACpB,UAAU,EAAE,wBAAwB;IACpC,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,CAAC;IACV,WAAW,EAAE,KAAK;IAClB,YAAY,EAAE,KAAK;IACnB,YAAY,EAAE,KAAK;CACpB,CAAC"}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ColophonConfig, ColophonConfigFactory, ResolvedConfig } from "../types.js";
|
|
2
|
-
export { DEFAULT_CODE_FONT_FAMILY, DEFAULT_CODE_STYLE, DEFAULT_COLORS, DEFAULT_FONT_FAMILY, DEFAULT_SIZES, SIZE_PRESETS, } from "./defaults.js";
|
|
2
|
+
export { DEFAULT_CODE_FONT_FAMILY, DEFAULT_CODE_STYLE, DEFAULT_COLORS, DEFAULT_COMPRESSION_LEVEL, DEFAULT_FONT_FAMILY, DEFAULT_FORMAT, DEFAULT_QUALITY, DEFAULT_SIZES, SIZE_PRESETS, } from "./defaults.js";
|
|
3
3
|
/**
|
|
4
4
|
* Identity helper that returns its argument typed as {@link ColophonConfig}.
|
|
5
5
|
* Use it in a config module to get editor completion and type-checking.
|
|
@@ -18,5 +18,5 @@ export declare function defineConfig(factory: ColophonConfigFactory): ColophonCo
|
|
|
18
18
|
* written against a different version of the package is a build error rather
|
|
19
19
|
* than a set of images quietly rendered with the defaults.
|
|
20
20
|
*/
|
|
21
|
-
export declare function resolveConfig(
|
|
21
|
+
export declare function resolveConfig(input?: ColophonConfig): ResolvedConfig;
|
|
22
22
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EAErB,cAAc,EACf,MAAM,aAAa,CAAC;AAcrB,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,yBAAyB,EACzB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,aAAa,EACb,YAAY,GACb,MAAM,eAAe,CAAC;AAcvB;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAAC;AACrE;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,qBAAqB,GAC7B,qBAAqB,CAAC;AAUzB;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,GAAE,cAAmB,GAAG,cAAc,CAqCxE"}
|
package/dist/config/index.js
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
// From `resolve.js` rather than the barrel, which also exports the font
|
|
2
|
+
// materialising that only a path-taking rasteriser needs.
|
|
3
|
+
import { resolveFonts } from "../fonts/resolve.js";
|
|
2
4
|
import { resolveOptionalImage } from "../image/index.js";
|
|
5
|
+
import { defaultRasteriser } from "../platform/rasteriser.node.js";
|
|
3
6
|
import { builtinTemplates } from "../templates/index.js";
|
|
7
|
+
import { applyTheme } from "../theme/index.js";
|
|
8
|
+
import { resolveTexture } from "../texture/index.js";
|
|
4
9
|
import { validateConfig } from "../validate/index.js";
|
|
5
|
-
import { DEFAULT_FONT_FAMILY } from "./defaults.js";
|
|
6
|
-
import {
|
|
7
|
-
|
|
10
|
+
import { DEFAULT_FONT_FAMILY, DEFAULT_FORMAT } from "./defaults.js";
|
|
11
|
+
import { resolveMaxBytes, resolveQuality } from "./output.js";
|
|
12
|
+
import { defaultBackground, resolveBackground, resolveCode, resolveColors, resolveCompressionLevel, resolveSizes, shouldLoadSystemFonts, } from "./resolve.js";
|
|
13
|
+
export { DEFAULT_CODE_FONT_FAMILY, DEFAULT_CODE_STYLE, DEFAULT_COLORS, DEFAULT_COMPRESSION_LEVEL, DEFAULT_FONT_FAMILY, DEFAULT_FORMAT, DEFAULT_QUALITY, DEFAULT_SIZES, SIZE_PRESETS, } from "./defaults.js";
|
|
8
14
|
/**
|
|
9
15
|
* Default warning handler. Colophon runs at build time, so a compromise the
|
|
10
16
|
* renderer had to make belongs in the build log by default. Silence is opt-in
|
|
@@ -31,13 +37,18 @@ export function defineConfig(config) {
|
|
|
31
37
|
* written against a different version of the package is a build error rather
|
|
32
38
|
* than a set of images quietly rendered with the defaults.
|
|
33
39
|
*/
|
|
34
|
-
export function resolveConfig(
|
|
35
|
-
validateConfig(
|
|
40
|
+
export function resolveConfig(input = {}) {
|
|
41
|
+
validateConfig(input);
|
|
42
|
+
// The theme is folded in before anything is resolved, so the rest of this
|
|
43
|
+
// sees a config that happens to name a background and a palette, and nothing
|
|
44
|
+
// downstream has to know a theme was involved.
|
|
45
|
+
const config = applyTheme(input);
|
|
36
46
|
const colors = resolveColors(config.colors);
|
|
37
47
|
const fonts = resolveFonts(config.fonts);
|
|
38
48
|
return {
|
|
39
49
|
colors,
|
|
40
50
|
background: resolveBackground(config.background) ?? defaultBackground(colors),
|
|
51
|
+
texture: resolveTexture(config.texture, colors),
|
|
41
52
|
fonts,
|
|
42
53
|
systemFonts: shouldLoadSystemFonts(config.systemFonts, fonts),
|
|
43
54
|
// A project that supplies one font should not have to name it twice.
|
|
@@ -49,6 +60,16 @@ export function resolveConfig(config = {}) {
|
|
|
49
60
|
onWarning: config.onWarning ?? warnToConsole,
|
|
50
61
|
sizes: resolveSizes(config.sizes),
|
|
51
62
|
templates: { ...builtinTemplates, ...config.templates },
|
|
63
|
+
// Through `platform/`, for two reasons. Naming `render/index.js` would pull
|
|
64
|
+
// `render/png.js` back round to this module, and naming resvg directly
|
|
65
|
+
// would put a native binary in the graph of every build that resolves a
|
|
66
|
+
// config, including one for a browser.
|
|
67
|
+
rasteriser: config.rasteriser ?? defaultRasteriser,
|
|
68
|
+
compressionLevel: resolveCompressionLevel(config.compressionLevel),
|
|
69
|
+
format: config.format ?? DEFAULT_FORMAT,
|
|
70
|
+
quality: resolveQuality(config.quality),
|
|
71
|
+
maxBytes: resolveMaxBytes(config.maxBytes),
|
|
72
|
+
emitSvg: config.emitSvg ?? false,
|
|
52
73
|
};
|
|
53
74
|
}
|
|
54
75
|
//# sourceMappingURL=index.js.map
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,0DAA0D;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAOrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,uBAAuB,EACvB,YAAY,EACZ,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,yBAAyB,EACzB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,aAAa,EACb,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB;;;;GAIG;AACH,SAAS,aAAa,CAAC,OAAe;IACpC,4EAA4E;IAC5E,iCAAiC;IACjC,sCAAsC;IACtC,OAAO,CAAC,IAAI,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;AACvC,CAAC;AAeD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAA2B;IACtD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAAK,GAAmB,EAAE;IACtD,cAAc,CAAC,KAAK,CAAC,CAAC;IAEtB,0EAA0E;IAC1E,6EAA6E;IAC7E,+CAA+C;IAC/C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEzC,OAAO;QACL,MAAM;QACN,UAAU,EACR,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC;QACnE,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;QAC/C,KAAK;QACL,WAAW,EAAE,qBAAqB,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC;QAC7D,qEAAqE;QACrE,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,mBAAmB;QACxE,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;QAC/C,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9B,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,aAAa;QAC5C,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC;QACjC,SAAS,EAAE,EAAE,GAAG,gBAAgB,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE;QACvD,4EAA4E;QAC5E,uEAAuE;QACvE,wEAAwE;QACxE,uCAAuC;QACvC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,iBAAiB;QAClD,gBAAgB,EAAE,uBAAuB,CAAC,MAAM,CAAC,gBAAgB,CAAC;QAClE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,cAAc;QACvC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;QACvC,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC1C,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;KACjC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The settings for how a finished picture is encoded, checked here rather than
|
|
3
|
+
* in `validate/`, which checks keys and the names of closed sets.
|
|
4
|
+
*
|
|
5
|
+
* They are in a file of their own rather than beside the other resolvers
|
|
6
|
+
* because `resolve.ts` is already close enough to the FTA threshold that the
|
|
7
|
+
* next thing added to it would push it over.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Encoding quality, `1` to `100`.
|
|
11
|
+
*
|
|
12
|
+
* Out of range is rejected rather than clamped, for the reason
|
|
13
|
+
* `compressionLevel` is: a config asking for `120` has something in mind that
|
|
14
|
+
* no encoder here can give it, and quietly encoding at `100` would leave
|
|
15
|
+
* somebody believing they had asked for more than they had.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveQuality(quality: number | undefined): number;
|
|
18
|
+
/**
|
|
19
|
+
* The cap on one image, in bytes, or `undefined` for none.
|
|
20
|
+
*
|
|
21
|
+
* A cap of zero or less can never be met, so it is a mistake rather than a very
|
|
22
|
+
* strict setting: every image would be written at the lowest quality there is
|
|
23
|
+
* and every one of them would be reported as too big.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveMaxBytes(maxBytes: number | undefined): number | undefined;
|
|
26
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/config/output.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAalE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,GAAG,SAAS,CAapB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { DEFAULT_QUALITY } from "./defaults.js";
|
|
2
|
+
/**
|
|
3
|
+
* The settings for how a finished picture is encoded, checked here rather than
|
|
4
|
+
* in `validate/`, which checks keys and the names of closed sets.
|
|
5
|
+
*
|
|
6
|
+
* They are in a file of their own rather than beside the other resolvers
|
|
7
|
+
* because `resolve.ts` is already close enough to the FTA threshold that the
|
|
8
|
+
* next thing added to it would push it over.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Encoding quality, `1` to `100`.
|
|
12
|
+
*
|
|
13
|
+
* Out of range is rejected rather than clamped, for the reason
|
|
14
|
+
* `compressionLevel` is: a config asking for `120` has something in mind that
|
|
15
|
+
* no encoder here can give it, and quietly encoding at `100` would leave
|
|
16
|
+
* somebody believing they had asked for more than they had.
|
|
17
|
+
*/
|
|
18
|
+
export function resolveQuality(quality) {
|
|
19
|
+
if (quality === undefined) {
|
|
20
|
+
return DEFAULT_QUALITY;
|
|
21
|
+
}
|
|
22
|
+
if (!Number.isSafeInteger(quality) || quality < 1 || quality > 100) {
|
|
23
|
+
throw new Error(`Invalid quality ${String(quality)}; expected a whole number from 1` +
|
|
24
|
+
` (smallest) to 100 (best).`);
|
|
25
|
+
}
|
|
26
|
+
return quality;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The cap on one image, in bytes, or `undefined` for none.
|
|
30
|
+
*
|
|
31
|
+
* A cap of zero or less can never be met, so it is a mistake rather than a very
|
|
32
|
+
* strict setting: every image would be written at the lowest quality there is
|
|
33
|
+
* and every one of them would be reported as too big.
|
|
34
|
+
*/
|
|
35
|
+
export function resolveMaxBytes(maxBytes) {
|
|
36
|
+
if (maxBytes === undefined) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
if (!Number.isSafeInteger(maxBytes) || maxBytes < 1) {
|
|
40
|
+
throw new Error(`Invalid maxBytes ${String(maxBytes)}; expected a whole number of bytes` +
|
|
41
|
+
` above zero, such as 5_000_000 for X's 5MB limit.`);
|
|
42
|
+
}
|
|
43
|
+
return maxBytes;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/config/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,OAA2B;IACxD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CACb,mBAAmB,MAAM,CAAC,OAAO,CAAC,kCAAkC;YAClE,4BAA4B,CAC/B,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,QAA4B;IAE5B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,oBAAoB,MAAM,CAAC,QAAQ,CAAC,oCAAoC;YACtE,mDAAmD,CACtD,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|