create-opentray 0.20.0 → 0.21.1
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/dist/bin-va204Tk0.mjs +16962 -0
- package/dist/bin-va204Tk0.mjs.map +1 -0
- package/dist/bin.d.mts.map +1 -1
- package/dist/bin.mjs +1 -1
- package/dist/decode-ico-NdYuFN-i.mjs +274 -0
- package/dist/decode-ico-NdYuFN-i.mjs.map +1 -0
- package/dist/index.d.mts +380 -9
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -2
- package/dist/shell/assets/index.css +1 -1
- package/dist/shell/assets/main.js +18 -15
- package/dist/webui/assets/index.css +1 -1
- package/dist/webui/assets/main.js +18 -15
- package/package.json +7 -7
- package/dist/bin-sZB5nWq0.mjs +0 -2142
- package/dist/bin-sZB5nWq0.mjs.map +0 -1
package/dist/bin.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.d.mts","names":[],"sources":["../src/bin.ts"],"mappings":";
|
|
1
|
+
{"version":3,"file":"bin.d.mts","names":[],"sources":["../src/bin.ts"],"mappings":";UA4BiB,gBAAA;EAAA,SACN,IAAA;EAAA,SACA,IAAA;EAAA,SACA,EAAA;EAAA,SACA,WAAA;EAAA,SACA,KAAA;EAAA,SACA,SAAA;AAAA;AAAA,cAIE,cAAA,GAAkB,IAAA,wBAA0B,gBAmDxD;AAAA,cAkBY,WAAA,GAAqB,GAAA,aAAc,OAAO;AAAA,cAgJ1C,IAAA,GAAc,IAAA,wBAA0B,OAAO"}
|
package/dist/bin.mjs
CHANGED
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { I as __commonJSMin } from "./bin-va204Tk0.mjs";
|
|
2
|
+
//#region ../../node_modules/.pnpm/to-data-view@1.1.0/node_modules/to-data-view/index.js
|
|
3
|
+
var require_to_data_view = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
4
|
+
module.exports = function toDataView(data) {
|
|
5
|
+
if (data instanceof Int8Array || data instanceof Uint8Array || data instanceof Uint8ClampedArray) return new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
6
|
+
if (data instanceof ArrayBuffer) return new DataView(data);
|
|
7
|
+
throw new TypeError("Expected `data` to be an ArrayBuffer, Buffer, Int8Array, Uint8Array or Uint8ClampedArray");
|
|
8
|
+
};
|
|
9
|
+
}));
|
|
10
|
+
//#endregion
|
|
11
|
+
//#region ../../node_modules/.pnpm/@canvas+image-data@1.1.0/node_modules/@canvas/image-data/index.js
|
|
12
|
+
var require_image_data = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
13
|
+
const widthMap = /* @__PURE__ */ new WeakMap();
|
|
14
|
+
const heightMap = /* @__PURE__ */ new WeakMap();
|
|
15
|
+
var ImageData = class {
|
|
16
|
+
constructor(width, height, ...args) {
|
|
17
|
+
if (arguments.length < 2) throw new TypeError(`Failed to construct 'ImageData': 2 arguments required, but only ${arguments.length} present.`);
|
|
18
|
+
if (typeof width === "object") {
|
|
19
|
+
if (!(width instanceof Uint8ClampedArray)) throw new TypeError("Failed to construct 'ImageData': parameter 1 is not of type 'Uint8ClampedArray'.");
|
|
20
|
+
if (typeof height !== "number" || height === 0) throw new Error("Failed to construct 'ImageData': The source width is zero or not a number.");
|
|
21
|
+
height = height >>> 0;
|
|
22
|
+
if (height * 4 > width.length) throw new Error("Failed to construct 'ImageData': The requested image size exceeds the supported range.");
|
|
23
|
+
if (width.length % 4 !== 0) throw new Error("Failed to construct 'ImageData': The input data length is not a multiple of 4.");
|
|
24
|
+
if (width.length % (4 * height) !== 0) throw new Error("Failed to construct 'ImageData': The input data length is not a multiple of (4 * width).");
|
|
25
|
+
if (typeof args[0] !== "undefined") {
|
|
26
|
+
if (typeof args[0] !== "number" || args[0] === 0) throw new Error("Failed to construct 'ImageData': The source height is zero or not a number.");
|
|
27
|
+
args[0] = args[0] >>> 0;
|
|
28
|
+
if (width.length % (4 * height * args[0]) !== 0) throw new Error("Failed to construct 'ImageData': The input data length is not equal to (4 * width * height).");
|
|
29
|
+
}
|
|
30
|
+
widthMap.set(this, height);
|
|
31
|
+
heightMap.set(this, typeof args[0] !== "undefined" ? args[0] : width.byteLength / height / 4);
|
|
32
|
+
Object.defineProperty(this, "data", {
|
|
33
|
+
configurable: true,
|
|
34
|
+
enumerable: true,
|
|
35
|
+
value: width,
|
|
36
|
+
writable: false
|
|
37
|
+
});
|
|
38
|
+
} else {
|
|
39
|
+
if (typeof width !== "number" || width === 0) throw new Error("Failed to construct 'ImageData': The source width is zero or not a number.");
|
|
40
|
+
width = width >>> 0;
|
|
41
|
+
if (typeof height !== "number" || height === 0) throw new Error("Failed to construct 'ImageData': The source height is zero or not a number.");
|
|
42
|
+
height = height >>> 0;
|
|
43
|
+
if (width * height >= 1 << 30) throw new Error("Failed to construct 'ImageData': The requested image size exceeds the supported range.");
|
|
44
|
+
widthMap.set(this, width);
|
|
45
|
+
heightMap.set(this, height);
|
|
46
|
+
Object.defineProperty(this, "data", {
|
|
47
|
+
configurable: true,
|
|
48
|
+
enumerable: true,
|
|
49
|
+
value: new Uint8ClampedArray(width * height * 4),
|
|
50
|
+
writable: false
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
Object.defineProperty(ImageData.prototype, "width", {
|
|
56
|
+
enumerable: true,
|
|
57
|
+
configurable: true,
|
|
58
|
+
get() {
|
|
59
|
+
return widthMap.get(this);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
Object.defineProperty(ImageData.prototype, "height", {
|
|
63
|
+
enumerable: true,
|
|
64
|
+
configurable: true,
|
|
65
|
+
get() {
|
|
66
|
+
return heightMap.get(this);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
module.exports = ImageData;
|
|
70
|
+
}));
|
|
71
|
+
//#endregion
|
|
72
|
+
//#region ../../node_modules/.pnpm/decode-bmp@0.2.1/node_modules/decode-bmp/index.js
|
|
73
|
+
var require_decode_bmp = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
74
|
+
const toDataView = require_to_data_view();
|
|
75
|
+
const ImageData = require_image_data();
|
|
76
|
+
function makeDivisibleByFour(input) {
|
|
77
|
+
const rest = input % 4;
|
|
78
|
+
return rest ? input + 4 - rest : input;
|
|
79
|
+
}
|
|
80
|
+
var Bitmap = class {
|
|
81
|
+
constructor(data, offset, { width, height, colorDepth, format }) {
|
|
82
|
+
this.format = format;
|
|
83
|
+
this.offset = offset;
|
|
84
|
+
this.depth = colorDepth;
|
|
85
|
+
this.stride = makeDivisibleByFour(width * this.depth / 8);
|
|
86
|
+
this.size = this.stride * height;
|
|
87
|
+
this.data = data.slice(this.offset, this.offset + this.size);
|
|
88
|
+
if (this.size !== this.data.byteLength) throw new Error("Truncated bitmap data");
|
|
89
|
+
}
|
|
90
|
+
get(x, y, channel) {
|
|
91
|
+
const idx = this.format.indexOf(channel);
|
|
92
|
+
if (this.depth === 1) return (this.data[y * this.stride + (x / 8 | 0)] & 1 << 7 - x % 8 * 1) >> 7 - x % 8 * 1;
|
|
93
|
+
if (this.depth === 2) return (this.data[y * this.stride + (x / 4 | 0)] & 3 << 6 - x % 4 * 2) >>> 6 - x % 4 * 2;
|
|
94
|
+
if (this.depth === 4) return (this.data[y * this.stride + (x / 2 | 0)] & 15 << 4 - x % 2 * 4) >>> 4 - x % 2 * 4;
|
|
95
|
+
return this.data[y * this.stride + x * (this.depth / 8) + idx];
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
function decodeTrueColorBmp(data, { width, height, colorDepth, icon }) {
|
|
99
|
+
if (colorDepth !== 32 && colorDepth !== 24) throw new Error(`A color depth of ${colorDepth} is not supported`);
|
|
100
|
+
const xor = new Bitmap(data, 0, {
|
|
101
|
+
width,
|
|
102
|
+
height,
|
|
103
|
+
colorDepth,
|
|
104
|
+
format: "BGRA"
|
|
105
|
+
});
|
|
106
|
+
const and = colorDepth === 24 && icon ? new Bitmap(data, xor.offset + xor.size, {
|
|
107
|
+
width,
|
|
108
|
+
height,
|
|
109
|
+
colorDepth: 1,
|
|
110
|
+
format: "A"
|
|
111
|
+
}) : null;
|
|
112
|
+
const result = new Uint8Array(width * height * 4);
|
|
113
|
+
let idx = 0;
|
|
114
|
+
for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) {
|
|
115
|
+
result[idx++] = xor.get(x, height - y - 1, "R");
|
|
116
|
+
result[idx++] = xor.get(x, height - y - 1, "G");
|
|
117
|
+
result[idx++] = xor.get(x, height - y - 1, "B");
|
|
118
|
+
if (colorDepth === 32) result[idx++] = xor.get(x, height - y - 1, "A");
|
|
119
|
+
else result[idx++] = and && and.get(x, height - y - 1, "A") ? 0 : 255;
|
|
120
|
+
}
|
|
121
|
+
return new Uint8ClampedArray(result.buffer, result.byteOffset, result.byteLength);
|
|
122
|
+
}
|
|
123
|
+
function decodePaletteBmp(data, { width, height, colorDepth, colorCount, icon }) {
|
|
124
|
+
if (colorDepth !== 8 && colorDepth !== 4 && colorDepth !== 2 && colorDepth !== 1) throw new Error(`A color depth of ${colorDepth} is not supported`);
|
|
125
|
+
const colors = new Bitmap(data, 0, {
|
|
126
|
+
width: colorCount,
|
|
127
|
+
height: 1,
|
|
128
|
+
colorDepth: 32,
|
|
129
|
+
format: "BGRA"
|
|
130
|
+
});
|
|
131
|
+
const xor = new Bitmap(data, colors.offset + colors.size, {
|
|
132
|
+
width,
|
|
133
|
+
height,
|
|
134
|
+
colorDepth,
|
|
135
|
+
format: "C"
|
|
136
|
+
});
|
|
137
|
+
const and = icon ? new Bitmap(data, xor.offset + xor.size, {
|
|
138
|
+
width,
|
|
139
|
+
height,
|
|
140
|
+
colorDepth: 1,
|
|
141
|
+
format: "A"
|
|
142
|
+
}) : null;
|
|
143
|
+
const result = new Uint8Array(width * height * 4);
|
|
144
|
+
let idx = 0;
|
|
145
|
+
for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) {
|
|
146
|
+
const colorIndex = xor.get(x, height - y - 1, "C");
|
|
147
|
+
result[idx++] = colors.get(colorIndex, 0, "R");
|
|
148
|
+
result[idx++] = colors.get(colorIndex, 0, "G");
|
|
149
|
+
result[idx++] = colors.get(colorIndex, 0, "B");
|
|
150
|
+
result[idx++] = and && and.get(x, height - y - 1, "A") ? 0 : 255;
|
|
151
|
+
}
|
|
152
|
+
return new Uint8ClampedArray(result.buffer, result.byteOffset, result.byteLength);
|
|
153
|
+
}
|
|
154
|
+
function checkMagicBytes(bytes) {
|
|
155
|
+
if (bytes !== 19778) throw new Error(`Invalid magic byte 0x${bytes.toString(16)}`);
|
|
156
|
+
}
|
|
157
|
+
module.exports = function decodeBmp(source, { width: iconWidth = 0, height: iconHeight = 0, icon = false } = {}) {
|
|
158
|
+
const data = toDataView(source);
|
|
159
|
+
let headerSize;
|
|
160
|
+
let bitmapWidth;
|
|
161
|
+
let bitmapHeight;
|
|
162
|
+
let colorDepth;
|
|
163
|
+
let colorCount;
|
|
164
|
+
if (icon) {
|
|
165
|
+
headerSize = data.getUint32(0, true);
|
|
166
|
+
bitmapWidth = data.getUint32(4, true) / 1 | 0;
|
|
167
|
+
bitmapHeight = data.getUint32(8, true) / 2 | 0;
|
|
168
|
+
colorDepth = data.getUint16(14, true);
|
|
169
|
+
colorCount = data.getUint32(32, true);
|
|
170
|
+
} else {
|
|
171
|
+
checkMagicBytes(data.getUint16(0, true));
|
|
172
|
+
headerSize = 14 + data.getUint32(14, true);
|
|
173
|
+
bitmapWidth = data.getUint32(18, true);
|
|
174
|
+
bitmapHeight = data.getUint32(22, true);
|
|
175
|
+
colorDepth = data.getUint16(28, true);
|
|
176
|
+
colorCount = data.getUint32(46, true);
|
|
177
|
+
}
|
|
178
|
+
if (colorCount === 0 && colorDepth <= 8) colorCount = 1 << colorDepth;
|
|
179
|
+
const width = bitmapWidth === 0 ? iconWidth : bitmapWidth;
|
|
180
|
+
const height = bitmapHeight === 0 ? iconHeight : bitmapHeight;
|
|
181
|
+
const bitmapData = new Uint8Array(data.buffer, data.byteOffset + headerSize, data.byteLength - headerSize);
|
|
182
|
+
const result = colorCount ? decodePaletteBmp(bitmapData, {
|
|
183
|
+
width,
|
|
184
|
+
height,
|
|
185
|
+
colorDepth,
|
|
186
|
+
colorCount,
|
|
187
|
+
icon
|
|
188
|
+
}) : decodeTrueColorBmp(bitmapData, {
|
|
189
|
+
width,
|
|
190
|
+
height,
|
|
191
|
+
colorDepth,
|
|
192
|
+
icon
|
|
193
|
+
});
|
|
194
|
+
return Object.assign(new ImageData(result, width, height), { colorDepth });
|
|
195
|
+
};
|
|
196
|
+
}));
|
|
197
|
+
//#endregion
|
|
198
|
+
//#region ../../node_modules/.pnpm/decode-ico@0.4.1/node_modules/decode-ico/index.js
|
|
199
|
+
var require_decode_ico = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
200
|
+
const toDataView = require_to_data_view();
|
|
201
|
+
const decodeBmp = require_decode_bmp();
|
|
202
|
+
const ImageData = require_image_data();
|
|
203
|
+
function isPng(view, offset) {
|
|
204
|
+
return view.getUint32(offset + 0) === 2303741511 && view.getUint32(offset + 4) === 218765834;
|
|
205
|
+
}
|
|
206
|
+
function pngBitsPerPixel(view, offset) {
|
|
207
|
+
const bitDepth = view.getUint8(offset + 24);
|
|
208
|
+
const colorType = view.getUint8(offset + 25);
|
|
209
|
+
if (colorType === 0) return bitDepth * 1;
|
|
210
|
+
if (colorType === 2) return bitDepth * 3;
|
|
211
|
+
if (colorType === 3) return bitDepth * 1;
|
|
212
|
+
if (colorType === 4) return bitDepth * 2;
|
|
213
|
+
if (colorType === 6) return bitDepth * 4;
|
|
214
|
+
throw new Error("Invalid PNG colorType");
|
|
215
|
+
}
|
|
216
|
+
function pngWidth(view, offset) {
|
|
217
|
+
return view.getUint32(offset + 16, false);
|
|
218
|
+
}
|
|
219
|
+
function pngHeight(view, offset) {
|
|
220
|
+
return view.getUint32(offset + 20, false);
|
|
221
|
+
}
|
|
222
|
+
module.exports = function decodeIco(input) {
|
|
223
|
+
const view = toDataView(input);
|
|
224
|
+
if (view.byteLength < 6) throw new Error("Truncated header");
|
|
225
|
+
if (isPng(view, 0)) return [{
|
|
226
|
+
bpp: pngBitsPerPixel(view, 0),
|
|
227
|
+
data: new Uint8Array(view.buffer, view.byteOffset, view.byteLength),
|
|
228
|
+
height: pngHeight(view, 0),
|
|
229
|
+
hotspot: null,
|
|
230
|
+
type: "png",
|
|
231
|
+
width: pngWidth(view, 0)
|
|
232
|
+
}];
|
|
233
|
+
if (view.getUint16(0, true) !== 0) throw new Error("Invalid magic bytes");
|
|
234
|
+
const type = view.getUint16(2, true);
|
|
235
|
+
if (type !== 1 && type !== 2) throw new Error("Invalid image type");
|
|
236
|
+
const length = view.getUint16(4, true);
|
|
237
|
+
if (view.byteLength < 6 + 16 * length) throw new Error("Truncated image list");
|
|
238
|
+
return Array.from({ length }, (_, idx) => {
|
|
239
|
+
const width = view.getUint8(6 + 16 * idx + 0);
|
|
240
|
+
const height = view.getUint8(6 + 16 * idx + 1);
|
|
241
|
+
const size = view.getUint32(6 + 16 * idx + 8, true);
|
|
242
|
+
const offset = view.getUint32(6 + 16 * idx + 12, true);
|
|
243
|
+
const hotspot = type !== 2 ? null : {
|
|
244
|
+
x: view.getUint16(6 + 16 * idx + 4, true),
|
|
245
|
+
y: view.getUint16(6 + 16 * idx + 6, true)
|
|
246
|
+
};
|
|
247
|
+
if (isPng(view, offset)) return {
|
|
248
|
+
bpp: pngBitsPerPixel(view, offset),
|
|
249
|
+
data: new Uint8Array(view.buffer, view.byteOffset + offset, size),
|
|
250
|
+
height: pngHeight(view, offset),
|
|
251
|
+
hotspot,
|
|
252
|
+
type: "png",
|
|
253
|
+
width: pngWidth(view, offset)
|
|
254
|
+
};
|
|
255
|
+
const data = new Uint8Array(view.buffer, view.byteOffset + offset, size);
|
|
256
|
+
const bmp = decodeBmp(data, {
|
|
257
|
+
width,
|
|
258
|
+
height,
|
|
259
|
+
icon: true
|
|
260
|
+
});
|
|
261
|
+
const info = {
|
|
262
|
+
bpp: bmp.colorDepth,
|
|
263
|
+
hotspot,
|
|
264
|
+
type: "bmp"
|
|
265
|
+
};
|
|
266
|
+
return Object.assign(new ImageData(bmp.data, bmp.width, bmp.height), info);
|
|
267
|
+
});
|
|
268
|
+
};
|
|
269
|
+
}));
|
|
270
|
+
//#endregion
|
|
271
|
+
export default require_decode_ico();
|
|
272
|
+
export {};
|
|
273
|
+
|
|
274
|
+
//# sourceMappingURL=decode-ico-NdYuFN-i.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decode-ico-NdYuFN-i.mjs","names":[],"sources":["../../../node_modules/.pnpm/to-data-view@1.1.0/node_modules/to-data-view/index.js","../../../node_modules/.pnpm/@canvas+image-data@1.1.0/node_modules/@canvas/image-data/index.js","../../../node_modules/.pnpm/decode-bmp@0.2.1/node_modules/decode-bmp/index.js","../../../node_modules/.pnpm/decode-ico@0.4.1/node_modules/decode-ico/index.js"],"sourcesContent":["module.exports = function toDataView (data) {\n if (data instanceof Int8Array || data instanceof Uint8Array || data instanceof Uint8ClampedArray) {\n return new DataView(data.buffer, data.byteOffset, data.byteLength)\n }\n\n if (data instanceof ArrayBuffer) {\n return new DataView(data)\n }\n\n throw new TypeError('Expected `data` to be an ArrayBuffer, Buffer, Int8Array, Uint8Array or Uint8ClampedArray')\n}\n","const widthMap = new WeakMap()\nconst heightMap = new WeakMap()\n\nclass ImageData {\n constructor (width, height, ...args) {\n if (arguments.length < 2) {\n throw new TypeError(`Failed to construct 'ImageData': 2 arguments required, but only ${arguments.length} present.`)\n }\n\n if (typeof width === 'object') {\n if (!(width instanceof Uint8ClampedArray)) {\n throw new TypeError(\"Failed to construct 'ImageData': parameter 1 is not of type 'Uint8ClampedArray'.\")\n }\n\n if (typeof height !== 'number' || height === 0) {\n throw new Error(\"Failed to construct 'ImageData': The source width is zero or not a number.\")\n }\n\n height = height >>> 0\n\n if ((height * 4) > width.length) {\n throw new Error(\"Failed to construct 'ImageData': The requested image size exceeds the supported range.\")\n }\n\n if ((width.length % 4) !== 0) {\n throw new Error(\"Failed to construct 'ImageData': The input data length is not a multiple of 4.\")\n }\n\n if ((width.length % (4 * height)) !== 0) {\n throw new Error(\"Failed to construct 'ImageData': The input data length is not a multiple of (4 * width).\")\n }\n\n if (typeof args[0] !== 'undefined') {\n if (typeof args[0] !== 'number' || args[0] === 0) {\n throw new Error(\"Failed to construct 'ImageData': The source height is zero or not a number.\")\n }\n\n args[0] = args[0] >>> 0\n\n if ((width.length % (4 * height * args[0])) !== 0) {\n throw new Error(\"Failed to construct 'ImageData': The input data length is not equal to (4 * width * height).\")\n }\n }\n\n widthMap.set(this, height)\n heightMap.set(this, typeof args[0] !== 'undefined' ? args[0] : (width.byteLength / height / 4))\n Object.defineProperty(this, 'data', { configurable: true, enumerable: true, value: width, writable: false })\n } else {\n if (typeof width !== 'number' || width === 0) {\n throw new Error(\"Failed to construct 'ImageData': The source width is zero or not a number.\")\n }\n\n width = width >>> 0\n\n if (typeof height !== 'number' || height === 0) {\n throw new Error(\"Failed to construct 'ImageData': The source height is zero or not a number.\")\n }\n\n height = height >>> 0\n\n if ((width * height) >= (1 << 30)) {\n throw new Error(\"Failed to construct 'ImageData': The requested image size exceeds the supported range.\")\n }\n\n widthMap.set(this, width)\n heightMap.set(this, height)\n Object.defineProperty(this, 'data', { configurable: true, enumerable: true, value: new Uint8ClampedArray(width * height * 4), writable: false })\n }\n }\n}\n\nObject.defineProperty(ImageData.prototype, 'width', {\n enumerable: true,\n configurable: true,\n get () { return widthMap.get(this) }\n})\n\nObject.defineProperty(ImageData.prototype, 'height', {\n enumerable: true,\n configurable: true,\n get () { return heightMap.get(this) }\n})\n\nmodule.exports = ImageData\n","const toDataView = require('to-data-view')\nconst ImageData = require('@canvas/image-data')\n\nfunction makeDivisibleByFour (input) {\n const rest = input % 4\n\n return rest ? input + 4 - rest : input\n}\n\nclass Bitmap {\n constructor (data, offset, { width, height, colorDepth, format }) {\n this.format = format\n this.offset = offset\n this.depth = colorDepth\n this.stride = makeDivisibleByFour(width * this.depth / 8)\n this.size = (this.stride * height)\n this.data = data.slice(this.offset, this.offset + this.size)\n\n if (this.size !== this.data.byteLength) {\n throw new Error('Truncated bitmap data')\n }\n }\n\n get (x, y, channel) {\n const idx = this.format.indexOf(channel)\n\n if (this.depth === 1) {\n const slice = this.data[(y * this.stride) + (x / 8 | 0)]\n const mask = 1 << (7 - (x % 8) * 1)\n\n return (slice & mask) >> (7 - (x % 8) * 1)\n }\n\n if (this.depth === 2) {\n const slice = this.data[(y * this.stride) + (x / 4 | 0)]\n const mask = 3 << (6 - (x % 4) * 2)\n\n return (slice & mask) >>> (6 - (x % 4) * 2)\n }\n\n if (this.depth === 4) {\n const slice = this.data[(y * this.stride) + (x / 2 | 0)]\n const mask = 15 << (4 - (x % 2) * 4)\n\n return (slice & mask) >>> (4 - (x % 2) * 4)\n }\n\n return this.data[(y * this.stride) + (x * (this.depth / 8)) + idx]\n }\n}\n\nfunction decodeTrueColorBmp (data, { width, height, colorDepth, icon }) {\n if (colorDepth !== 32 && colorDepth !== 24) {\n throw new Error(`A color depth of ${colorDepth} is not supported`)\n }\n\n const xor = new Bitmap(data, 0, { width, height, colorDepth, format: 'BGRA' })\n const and = (colorDepth === 24 && icon)\n ? new Bitmap(data, xor.offset + xor.size, { width, height, colorDepth: 1, format: 'A' })\n : null\n\n const result = new Uint8Array(width * height * 4)\n\n let idx = 0\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n result[idx++] = xor.get(x, height - y - 1, 'R')\n result[idx++] = xor.get(x, height - y - 1, 'G')\n result[idx++] = xor.get(x, height - y - 1, 'B')\n\n if (colorDepth === 32) {\n result[idx++] = xor.get(x, height - y - 1, 'A')\n } else {\n result[idx++] = and && and.get(x, height - y - 1, 'A') ? 0 : 255\n }\n }\n }\n\n return new Uint8ClampedArray(result.buffer, result.byteOffset, result.byteLength)\n}\n\nfunction decodePaletteBmp (data, { width, height, colorDepth, colorCount, icon }) {\n if (colorDepth !== 8 && colorDepth !== 4 && colorDepth !== 2 && colorDepth !== 1) {\n throw new Error(`A color depth of ${colorDepth} is not supported`)\n }\n\n const colors = new Bitmap(data, 0, { width: colorCount, height: 1, colorDepth: 32, format: 'BGRA' })\n const xor = new Bitmap(data, colors.offset + colors.size, { width, height, colorDepth, format: 'C' })\n const and = icon ? new Bitmap(data, xor.offset + xor.size, { width, height, colorDepth: 1, format: 'A' }) : null\n\n const result = new Uint8Array(width * height * 4)\n\n let idx = 0\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const colorIndex = xor.get(x, height - y - 1, 'C')\n\n result[idx++] = colors.get(colorIndex, 0, 'R')\n result[idx++] = colors.get(colorIndex, 0, 'G')\n result[idx++] = colors.get(colorIndex, 0, 'B')\n result[idx++] = and && and.get(x, height - y - 1, 'A') ? 0 : 255\n }\n }\n\n return new Uint8ClampedArray(result.buffer, result.byteOffset, result.byteLength)\n}\n\nfunction checkMagicBytes (bytes) {\n if (bytes !== 0x4D42) throw new Error(`Invalid magic byte 0x${bytes.toString(16)}`)\n}\n\nmodule.exports = function decodeBmp (source, { width: iconWidth = 0, height: iconHeight = 0, icon = false } = {}) {\n const data = toDataView(source)\n\n let headerSize\n let bitmapWidth\n let bitmapHeight\n let colorDepth\n let colorCount\n\n if (icon) {\n headerSize = data.getUint32(0, true)\n bitmapWidth = (data.getUint32(4, true) / 1) | 0\n bitmapHeight = (data.getUint32(8, true) / 2) | 0\n colorDepth = data.getUint16(14, true)\n colorCount = data.getUint32(32, true)\n } else {\n checkMagicBytes(data.getUint16(0, true))\n headerSize = 14 + data.getUint32(14, true)\n bitmapWidth = data.getUint32(18, true)\n bitmapHeight = data.getUint32(22, true)\n colorDepth = data.getUint16(28, true)\n colorCount = data.getUint32(46, true)\n }\n\n if (colorCount === 0 && colorDepth <= 8) {\n colorCount = (1 << colorDepth)\n }\n\n const width = (bitmapWidth === 0 ? iconWidth : bitmapWidth)\n const height = (bitmapHeight === 0 ? iconHeight : bitmapHeight)\n\n const bitmapData = new Uint8Array(data.buffer, data.byteOffset + headerSize, data.byteLength - headerSize)\n\n const result = colorCount\n ? decodePaletteBmp(bitmapData, { width, height, colorDepth, colorCount, icon })\n : decodeTrueColorBmp(bitmapData, { width, height, colorDepth, icon })\n\n return Object.assign(new ImageData(result, width, height), { colorDepth })\n}\n","const toDataView = require('to-data-view')\nconst decodeBmp = require('decode-bmp')\nconst ImageData = require('@canvas/image-data')\n\nfunction isPng (view, offset) {\n return (view.getUint32(offset + 0) === 0x89504e47 && view.getUint32(offset + 4) === 0x0d0a1a0a)\n}\n\nfunction pngBitsPerPixel (view, offset) {\n const bitDepth = view.getUint8(offset + 24)\n const colorType = view.getUint8(offset + 25)\n\n if (colorType === 0) return bitDepth * 1\n if (colorType === 2) return bitDepth * 3\n if (colorType === 3) return bitDepth * 1\n if (colorType === 4) return bitDepth * 2\n if (colorType === 6) return bitDepth * 4\n\n throw new Error('Invalid PNG colorType')\n}\n\nfunction pngWidth (view, offset) {\n return view.getUint32(offset + 16, false)\n}\n\nfunction pngHeight (view, offset) {\n return view.getUint32(offset + 20, false)\n}\n\nmodule.exports = function decodeIco (input) {\n const view = toDataView(input)\n\n if (view.byteLength < 6) {\n throw new Error('Truncated header')\n }\n\n if (isPng(view, 0)) {\n // the file is actually a png masquerading as an ico\n\n return [{\n bpp: pngBitsPerPixel(view, 0),\n data: new Uint8Array(view.buffer, view.byteOffset, view.byteLength),\n height: pngHeight(view, 0),\n hotspot: null,\n type: 'png',\n width: pngWidth(view, 0)\n }]\n }\n\n if (view.getUint16(0, true) !== 0) {\n throw new Error('Invalid magic bytes')\n }\n\n const type = view.getUint16(2, true)\n\n if (type !== 1 && type !== 2) {\n throw new Error('Invalid image type')\n }\n\n const length = view.getUint16(4, true)\n\n if (view.byteLength < 6 + (16 * length)) {\n throw new Error('Truncated image list')\n }\n\n return Array.from({ length }, (_, idx) => {\n const width = view.getUint8(6 + (16 * idx) + 0)\n const height = view.getUint8(6 + (16 * idx) + 1)\n const size = view.getUint32(6 + (16 * idx) + 8, true)\n const offset = view.getUint32(6 + (16 * idx) + 12, true)\n\n const hotspot = (type !== 2 ? null : {\n x: view.getUint16(6 + (16 * idx) + 4, true),\n y: view.getUint16(6 + (16 * idx) + 6, true)\n })\n\n if (isPng(view, offset)) {\n return {\n bpp: pngBitsPerPixel(view, offset),\n data: new Uint8Array(view.buffer, view.byteOffset + offset, size),\n height: pngHeight(view, offset),\n hotspot,\n type: 'png',\n width: pngWidth(view, offset)\n }\n }\n\n const data = new Uint8Array(view.buffer, view.byteOffset + offset, size)\n const bmp = decodeBmp(data, { width, height, icon: true })\n const info = { bpp: bmp.colorDepth, hotspot, type: 'bmp' }\n\n return Object.assign(new ImageData(bmp.data, bmp.width, bmp.height), info)\n })\n}\n"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
|