UNPKG

10.1 kBSource Map (JSON)View Raw
1{"version":3,"file":"util.js","names":["_puka","require","_iconEncoder","trimDotSlash","path","replace","pathRelativeBase","start","nocase","p","toLowerCase","s","startsWith","substring","length","pathRelativeBaseMatch","align","i","o","quoteSh","str","quoteForSh","quoteCmd","quoteForCmd","resizeRgbaHalf","rgba","width","ww","height","hh","data","dd","w","h","d","Uint8Array","r","w4","ww4","y","yy","yi","yyi","yyj","x","xx","xi","xxi","xxj","p0","p1","p2","p3","r0","r1","r2","r3","g0","g1","g2","g3","b0","b1","b2","b3","a0","a1","a2","a3","a4","a04","a14","a24","a34","Math","round","pngHalfSize","png","decodePngToRgba","Error","encodeRgbaToPng"],"sources":["../src/util.ts"],"sourcesContent":["// @ts-expect-error: No types.\nimport {quoteForCmd, quoteForSh} from 'puka';\nimport {\n\tIImageData,\n\tdecodePngToRgba,\n\tencodeRgbaToPng\n} from '@shockpkg/icon-encoder';\n\n/**\n * Trim dot flash from head of path.\n *\n * @param path Path string.\n * @returns Trimmed path.\n */\nexport function trimDotSlash(path: string) {\n\treturn path.replace(/^(\\.\\/)+/, '');\n}\n\n/**\n * Find path relative from base, if base matches.\n *\n * @param path Path to match against.\n * @param start Search start.\n * @param nocase Match case-insensitive.\n * @returns Returns path, or null.\n */\nexport function pathRelativeBase(path: string, start: string, nocase = false) {\n\tconst p = trimDotSlash(nocase ? path.toLowerCase() : path);\n\tconst s = trimDotSlash(nocase ? start.toLowerCase() : start);\n\tif (p === s) {\n\t\treturn '';\n\t}\n\tif (p.startsWith(`${s}/`)) {\n\t\treturn path.substring(s.length + 1);\n\t}\n\treturn null;\n}\n\n/**\n * Same as pathRelativeBase, but retuns true on a match, else false.\n *\n * @param path Path to match against.\n * @param start Search start.\n * @param nocase Match case-insensitive.\n * @returns Returns true on match, else false.\n */\nexport function pathRelativeBaseMatch(\n\tpath: string,\n\tstart: string,\n\tnocase = false\n) {\n\treturn pathRelativeBase(path, start, nocase) !== null;\n}\n\n/**\n * Align integer.\n *\n * @param i Integer value.\n * @param align Alignment amount.\n * @returns Aligned integer.\n */\nexport function align(i: number, align: number) {\n\tconst o = i % align;\n\treturn o ? align - o + i : i;\n}\n\n/**\n * Quote string for SH.\n *\n * @param str String to be quoted.\n * @returns Quoted string.\n */\nexport function quoteSh(str: string) {\n\treturn (quoteForSh as (str: string) => string)(str);\n}\n\n/**\n * Quote string for CMD.\n *\n * @param str String to be quoted.\n * @returns Quoted string.\n */\nexport function quoteCmd(str: string) {\n\treturn (quoteForCmd as (str: string) => string)(str);\n}\n\n/**\n * Resize RGBA image data down by exactly half.\n * Input dimensions must be a power of 2.\n *\n * @param rgba Image data.\n * @returns Image data.\n */\nfunction resizeRgbaHalf(rgba: IImageData) {\n\tconst {width: ww, height: hh, data: dd} = rgba;\n\tconst w = ww / 2;\n\tconst h = hh / 2;\n\tconst d = new Uint8Array(w * h * 4);\n\tconst r: IImageData = {\n\t\twidth: w,\n\t\theight: h,\n\t\tdata: d\n\t};\n\tconst w4 = w * 4;\n\tconst ww4 = ww * 4;\n\tfor (let y = 0, yy = 0; y < h; y++, yy += 2) {\n\t\tconst yi = y * w4;\n\t\tconst yyi = yy * ww4;\n\t\tconst yyj = (yy + 1) * ww4;\n\t\tfor (let x = 0, xx = 0; x < w; x++, xx += 2) {\n\t\t\tconst xi = x * 4;\n\t\t\tconst xxi = xx * 4;\n\t\t\tconst xxj = (xx + 1) * 4;\n\t\t\tlet p0 = yyi + xxi;\n\t\t\tlet p1 = yyi + xxj;\n\t\t\tlet p2 = yyj + xxi;\n\t\t\tlet p3 = yyj + xxj;\n\t\t\tconst r0 = dd[p0++];\n\t\t\tconst r1 = dd[p1++];\n\t\t\tconst r2 = dd[p2++];\n\t\t\tconst r3 = dd[p3++];\n\t\t\tconst g0 = dd[p0++];\n\t\t\tconst g1 = dd[p1++];\n\t\t\tconst g2 = dd[p2++];\n\t\t\tconst g3 = dd[p3++];\n\t\t\tconst b0 = dd[p0++];\n\t\t\tconst b1 = dd[p1++];\n\t\t\tconst b2 = dd[p2++];\n\t\t\tconst b3 = dd[p3++];\n\t\t\tconst a0 = dd[p0];\n\t\t\tconst a1 = dd[p1];\n\t\t\tconst a2 = dd[p2];\n\t\t\tconst a3 = dd[p3];\n\t\t\tconst a4 = a0 + a1 + a2 + a3;\n\t\t\tlet a04 = 0;\n\t\t\tlet a14 = 0;\n\t\t\tlet a24 = 0;\n\t\t\tlet a34 = 0;\n\t\t\tif (a4) {\n\t\t\t\ta04 = a0 / a4;\n\t\t\t\ta14 = a1 / a4;\n\t\t\t\ta24 = a2 / a4;\n\t\t\t\ta34 = a3 / a4;\n\t\t\t}\n\t\t\tlet p = yi + xi;\n\t\t\td[p++] = Math.round(r0 * a04 + r1 * a14 + r2 * a24 + r3 * a34);\n\t\t\td[p++] = Math.round(g0 * a04 + g1 * a14 + g2 * a24 + g3 * a34);\n\t\t\td[p++] = Math.round(b0 * a04 + b1 * a14 + b2 * a24 + b3 * a34);\n\t\t\td[p] = Math.round(a4 / 4);\n\t\t}\n\t}\n\treturn r;\n}\n\n/**\n * Resize RGBA image data down by exactly half.\n * Input dimensions must be a power of 2, else error is thrown.\n * If resizing multiple steps, each step dimensions must be a power of 2.\n *\n * @param png PNG data.\n * @param x Number of times to resize down by half.\n * @returns PNG data.\n */\nexport async function pngHalfSize(png: Readonly<Uint8Array>, x = 1) {\n\tlet rgba = await decodePngToRgba(png);\n\tif ((x = Math.round(x)) > 0) {\n\t\tconst p = 2 ** x;\n\t\tconst {width, height} = rgba;\n\t\tif (width % 1 || height % 1) {\n\t\t\tthrow new Error(\n\t\t\t\t`Image dimensions not a power of ${p}: ${width}x${height}`\n\t\t\t);\n\t\t}\n\t\tfor (let i = 0; i < x; i++) {\n\t\t\trgba = resizeRgbaHalf(rgba);\n\t\t}\n\t}\n\treturn encodeRgbaToPng(rgba);\n}\n"],"mappings":"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"}
\No newline at end of file