@vite-pwa/assets-generator
Version:
Zero-config PWA Assets Generator
95 lines (91 loc) • 2.82 kB
JavaScript
;
const defaultResizeOptions = {
fit: "contain",
background: "white"
};
const defaultDarkResizeOptions = {
fit: "contain",
background: "black"
};
const defaultPngCompressionOptions = {
compressionLevel: 9,
quality: 60
};
const defaultPngOptions = {
transparent: { padding: 0.05, resizeOptions: { fit: "contain", background: "transparent" } },
maskable: { padding: 0.3, resizeOptions: { fit: "contain", background: "white" } },
apple: { padding: 0.3, resizeOptions: { fit: "contain", background: "white" } }
};
function createResizeOptions(dark, options) {
return {
...dark ? defaultDarkResizeOptions : defaultResizeOptions,
...options
};
}
function createPngCompressionOptions(options) {
return {
...defaultPngCompressionOptions,
...options
};
}
function toResolvedSize(size) {
return {
original: size,
width: typeof size === "number" ? size : size.width,
height: typeof size === "number" ? size : size.height
};
}
function toResolvedAsset(type, asset) {
return {
padding: defaultPngOptions[type].padding,
resizeOptions: defaultPngOptions[type].resizeOptions,
...asset,
sizes: asset.sizes.map(toResolvedSize)
};
}
function defaultAssetName(type, size) {
switch (type) {
case "transparent":
return `pwa-${size.width}x${size.height}.png`;
case "maskable":
return `maskable-icon-${size.width}x${size.height}.png`;
case "apple":
return `apple-touch-icon-${size.width}x${size.height}.png`;
}
}
function sameAssetSize(a, b) {
if (typeof a === "number" && typeof b.original === "number")
return a === b.original;
if (typeof a !== "number" && typeof b.original !== "number")
return a.width === b.width && a.height === b.height;
return false;
}
function cloneResolvedAssetsSizes({ png, assetName, assets }) {
return {
assets: {
transparent: cloneResolvedAssetSizes(assets.transparent),
maskable: cloneResolvedAssetSizes(assets.maskable),
apple: cloneResolvedAssetSizes(assets.apple)
},
png,
assetName
};
}
function cloneResolvedAssetSizes({ sizes, ...asset }) {
return {
...asset,
sizes: [...sizes]
};
}
exports.cloneResolvedAssetSizes = cloneResolvedAssetSizes;
exports.cloneResolvedAssetsSizes = cloneResolvedAssetsSizes;
exports.createPngCompressionOptions = createPngCompressionOptions;
exports.createResizeOptions = createResizeOptions;
exports.defaultAssetName = defaultAssetName;
exports.defaultDarkResizeOptions = defaultDarkResizeOptions;
exports.defaultPngCompressionOptions = defaultPngCompressionOptions;
exports.defaultPngOptions = defaultPngOptions;
exports.defaultResizeOptions = defaultResizeOptions;
exports.sameAssetSize = sameAssetSize;
exports.toResolvedAsset = toResolvedAsset;
exports.toResolvedSize = toResolvedSize;