ag-psd 30.1.1 → 30.2.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.
Files changed (134) hide show
  1. package/.v8-cache/v24.13.1-x64-cf738c9d/017325ac +0 -0
  2. package/.v8-cache/v24.13.1-x64-cf738c9d/043c7b90 +0 -0
  3. package/.v8-cache/v24.13.1-x64-cf738c9d/05135617 +0 -0
  4. package/.v8-cache/v24.13.1-x64-cf738c9d/059f8558 +0 -0
  5. package/.v8-cache/v24.13.1-x64-cf738c9d/0706ecb8 +0 -0
  6. package/.v8-cache/v24.13.1-x64-cf738c9d/0db754a7 +0 -0
  7. package/.v8-cache/v24.13.1-x64-cf738c9d/1130885f +0 -0
  8. package/.v8-cache/v24.13.1-x64-cf738c9d/15f0e479 +0 -0
  9. package/.v8-cache/v24.13.1-x64-cf738c9d/20477c23 +0 -0
  10. package/.v8-cache/v24.13.1-x64-cf738c9d/20dfa422 +0 -0
  11. package/.v8-cache/v24.13.1-x64-cf738c9d/2a19133e +0 -0
  12. package/.v8-cache/v24.13.1-x64-cf738c9d/2b069ee0 +0 -0
  13. package/.v8-cache/v24.13.1-x64-cf738c9d/2de09439 +0 -0
  14. package/.v8-cache/v24.13.1-x64-cf738c9d/2e44f5f0 +0 -0
  15. package/.v8-cache/v24.13.1-x64-cf738c9d/2fb229a9 +0 -0
  16. package/.v8-cache/v24.13.1-x64-cf738c9d/3144b401 +0 -0
  17. package/.v8-cache/v24.13.1-x64-cf738c9d/37481985 +0 -0
  18. package/.v8-cache/v24.13.1-x64-cf738c9d/4511bacf +0 -0
  19. package/.v8-cache/v24.13.1-x64-cf738c9d/49d22b79 +0 -0
  20. package/.v8-cache/v24.13.1-x64-cf738c9d/4f5702bd +0 -0
  21. package/.v8-cache/v24.13.1-x64-cf738c9d/514cc428 +0 -0
  22. package/.v8-cache/v24.13.1-x64-cf738c9d/57d3380b +0 -0
  23. package/.v8-cache/v24.13.1-x64-cf738c9d/6024ce3f +0 -0
  24. package/.v8-cache/v24.13.1-x64-cf738c9d/61735b23 +0 -0
  25. package/.v8-cache/v24.13.1-x64-cf738c9d/63dbdb75 +0 -0
  26. package/.v8-cache/v24.13.1-x64-cf738c9d/6cbfc0ec +0 -0
  27. package/.v8-cache/v24.13.1-x64-cf738c9d/6f08372c +0 -0
  28. package/.v8-cache/v24.13.1-x64-cf738c9d/7100ee08 +0 -0
  29. package/.v8-cache/v24.13.1-x64-cf738c9d/71df9cb3 +0 -0
  30. package/.v8-cache/v24.13.1-x64-cf738c9d/75e41e43 +0 -0
  31. package/.v8-cache/v24.13.1-x64-cf738c9d/7ea06cea +0 -0
  32. package/.v8-cache/v24.13.1-x64-cf738c9d/8568576b +0 -0
  33. package/.v8-cache/v24.13.1-x64-cf738c9d/87372817 +0 -0
  34. package/.v8-cache/v24.13.1-x64-cf738c9d/87cf2209 +0 -0
  35. package/.v8-cache/v24.13.1-x64-cf738c9d/932f0770 +0 -0
  36. package/.v8-cache/v24.13.1-x64-cf738c9d/a79a40bb +0 -0
  37. package/.v8-cache/v24.13.1-x64-cf738c9d/a7e80865 +0 -0
  38. package/.v8-cache/v24.13.1-x64-cf738c9d/acc36e66 +0 -0
  39. package/.v8-cache/v24.13.1-x64-cf738c9d/b3c2fab7 +0 -0
  40. package/.v8-cache/v24.13.1-x64-cf738c9d/b69ed3a3 +0 -0
  41. package/.v8-cache/v24.13.1-x64-cf738c9d/bdff1628 +0 -0
  42. package/.v8-cache/v24.13.1-x64-cf738c9d/c0b789d2 +0 -0
  43. package/.v8-cache/v24.13.1-x64-cf738c9d/c314aece +0 -0
  44. package/.v8-cache/v24.13.1-x64-cf738c9d/cfc49f4f +0 -0
  45. package/.v8-cache/v24.13.1-x64-cf738c9d/cff9434a +0 -0
  46. package/.v8-cache/v24.13.1-x64-cf738c9d/d02dd6f7 +0 -0
  47. package/.v8-cache/v24.13.1-x64-cf738c9d/dc86f000 +0 -0
  48. package/.v8-cache/v24.13.1-x64-cf738c9d/de74e659 +0 -0
  49. package/.v8-cache/v24.13.1-x64-cf738c9d/e03e2acd +0 -0
  50. package/.v8-cache/v24.13.1-x64-cf738c9d/e158d332 +0 -0
  51. package/.v8-cache/v24.13.1-x64-cf738c9d/e6735171 +0 -0
  52. package/.v8-cache/v24.13.1-x64-cf738c9d/e6745c2b +0 -0
  53. package/.v8-cache/v24.13.1-x64-cf738c9d/e6b99945 +0 -0
  54. package/.v8-cache/v24.13.1-x64-cf738c9d/eeeebdfe +0 -0
  55. package/.v8-cache/v24.13.1-x64-cf738c9d/fbca6276 +0 -0
  56. package/.v8-cache/v24.13.1-x64-cf738c9d/fc97d72d +0 -0
  57. package/.v8-cache/v24.13.1-x64-cf738c9d/fd0a2987 +0 -0
  58. package/CHANGELOG.md +3 -0
  59. package/README.md +1 -1
  60. package/README_PSD.md +1 -1
  61. package/dist/abr.js +43 -56
  62. package/dist/abr.js.map +1 -1
  63. package/dist/additionalInfo.js +770 -808
  64. package/dist/additionalInfo.js.map +1 -1
  65. package/dist/ase.js +21 -21
  66. package/dist/ase.js.map +1 -1
  67. package/dist/bundle.js +2592 -2778
  68. package/dist/csh.js +18 -29
  69. package/dist/csh.js.map +1 -1
  70. package/dist/descriptor.js +234 -269
  71. package/dist/descriptor.js.map +1 -1
  72. package/dist/effectsHelpers.js +91 -112
  73. package/dist/effectsHelpers.js.map +1 -1
  74. package/dist/engineData.js +45 -51
  75. package/dist/engineData.js.map +1 -1
  76. package/dist/engineData2.js +8 -9
  77. package/dist/engineData2.js.map +1 -1
  78. package/dist/helpers.js +75 -81
  79. package/dist/helpers.js.map +1 -1
  80. package/dist/imageResources.js +342 -381
  81. package/dist/imageResources.js.map +1 -1
  82. package/dist/index.js +6 -6
  83. package/dist/index.js.map +1 -1
  84. package/dist/initializeCanvas.js +2 -2
  85. package/dist/initializeCanvas.js.map +1 -1
  86. package/dist/jpeg.js +279 -279
  87. package/dist/jpeg.js.map +1 -1
  88. package/dist/psdReader.js +336 -347
  89. package/dist/psdReader.js.map +1 -1
  90. package/dist/psdWriter.d.ts +2 -1
  91. package/dist/psdWriter.js +225 -206
  92. package/dist/psdWriter.js.map +1 -1
  93. package/dist/text.js +98 -122
  94. package/dist/text.js.map +1 -1
  95. package/dist/utf8.js +22 -22
  96. package/dist/utf8.js.map +1 -1
  97. package/dist-es/abr.js +41 -54
  98. package/dist-es/abr.js.map +1 -1
  99. package/dist-es/additionalInfo.js +765 -803
  100. package/dist-es/additionalInfo.js.map +1 -1
  101. package/dist-es/ase.js +20 -20
  102. package/dist-es/ase.js.map +1 -1
  103. package/dist-es/csh.js +16 -27
  104. package/dist-es/csh.js.map +1 -1
  105. package/dist-es/descriptor.js +284 -319
  106. package/dist-es/descriptor.js.map +1 -1
  107. package/dist-es/effectsHelpers.js +88 -109
  108. package/dist-es/effectsHelpers.js.map +1 -1
  109. package/dist-es/engineData.js +45 -51
  110. package/dist-es/engineData.js.map +1 -1
  111. package/dist-es/engineData2.js +8 -9
  112. package/dist-es/engineData2.js.map +1 -1
  113. package/dist-es/helpers.js +79 -85
  114. package/dist-es/helpers.js.map +1 -1
  115. package/dist-es/imageResources.js +338 -377
  116. package/dist-es/imageResources.js.map +1 -1
  117. package/dist-es/index.js +4 -4
  118. package/dist-es/index.js.map +1 -1
  119. package/dist-es/jpeg.js +279 -279
  120. package/dist-es/jpeg.js.map +1 -1
  121. package/dist-es/psdReader.js +333 -344
  122. package/dist-es/psdReader.js.map +1 -1
  123. package/dist-es/psdWriter.d.ts +2 -1
  124. package/dist-es/psdWriter.js +220 -202
  125. package/dist-es/psdWriter.js.map +1 -1
  126. package/dist-es/text.js +98 -122
  127. package/dist-es/text.js.map +1 -1
  128. package/dist-es/utf8.js +22 -22
  129. package/dist-es/utf8.js.map +1 -1
  130. package/package.json +1 -1
  131. package/publish.js +24 -0
  132. package/src/additionalInfo.ts +15 -11
  133. package/src/psdWriter.ts +76 -1
  134. package/tsconfig.json +4 -3
package/dist/psdReader.js CHANGED
@@ -12,23 +12,23 @@ var __rest = (this && this.__rest) || function (s, e) {
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.readPattern = exports.readColor = exports.readSection = exports.readDataRLE = exports.readDataZip = exports.createImageDataBitDepth = exports.readAdditionalLayerInfo = exports.readGlobalLayerMaskInfo = exports.decodeLayerImageData = exports.readLayerInfo = exports.readPsd = exports.checkSignature = exports.skipBytes = exports.readAsciiString = exports.readUnicodeStringWithLengthLE = exports.readUnicodeStringWithLength = exports.readUnicodeString = exports.readPascalString = exports.validSignatureAt = exports.readSignature = exports.readBytes = exports.readFixedPointPath32 = exports.readFixedPoint32 = exports.readFloat64 = exports.readFloat32 = exports.readUint32 = exports.readInt32LE = exports.readInt32 = exports.readUint16LE = exports.readUint16 = exports.readInt16 = exports.peekUint8 = exports.readUint8 = exports.warnOrThrow = exports.createReader = exports.supportedColorModes = void 0;
15
- var pako_1 = require("pako");
16
- var helpers_1 = require("./helpers");
17
- var additionalInfo_1 = require("./additionalInfo");
18
- var imageResources_1 = require("./imageResources");
15
+ const pako_1 = require("pako");
16
+ const helpers_1 = require("./helpers");
17
+ const additionalInfo_1 = require("./additionalInfo");
18
+ const imageResources_1 = require("./imageResources");
19
19
  exports.supportedColorModes = [0 /* ColorMode.Bitmap */, 1 /* ColorMode.Grayscale */, 3 /* ColorMode.RGB */, 2 /* ColorMode.Indexed */];
20
- var colorModes = ['bitmap', 'grayscale', 'indexed', 'RGB', 'CMYK', 'multichannel', 'duotone', 'lab'];
20
+ const colorModes = ['bitmap', 'grayscale', 'indexed', 'RGB', 'CMYK', 'multichannel', 'duotone', 'lab'];
21
21
  function setupGrayscale(data) {
22
- var size = data.width * data.height * 4;
23
- for (var i = 0; i < size; i += 4) {
24
- var c = data.data[i];
22
+ const size = data.width * data.height * 4;
23
+ for (let i = 0; i < size; i += 4) {
24
+ const c = data.data[i];
25
25
  data.data[i + 1] = c;
26
26
  data.data[i + 2] = c;
27
27
  }
28
28
  }
29
29
  function createReader(buffer, offset, length) {
30
- var view = new DataView(buffer, offset, length);
31
- return { view: view, offset: 0, strict: false, debug: false, large: false, globalAlpha: false, log: console.log };
30
+ const view = new DataView(buffer, offset, length);
31
+ return { view, offset: 0, strict: false, debug: false, large: false, globalAlpha: false, log: console.log };
32
32
  }
33
33
  exports.createReader = createReader;
34
34
  function warnOrThrow(reader, message) {
@@ -98,15 +98,15 @@ function readFixedPointPath32(reader) {
98
98
  }
99
99
  exports.readFixedPointPath32 = readFixedPointPath32;
100
100
  function readBytes(reader, length) {
101
- var start = reader.view.byteOffset + reader.offset;
101
+ const start = reader.view.byteOffset + reader.offset;
102
102
  reader.offset += length;
103
103
  if ((start + length) > reader.view.buffer.byteLength) {
104
104
  // fix for broken PSD files that are missing part of file at the end
105
105
  warnOrThrow(reader, 'Reading bytes exceeding buffer length');
106
106
  if (length > (100 * 1024 * 1024))
107
107
  throw new Error('Reading past end of file'); // limit to 100MB
108
- var result = new Uint8Array(length);
109
- var len = Math.min(length, reader.view.byteLength - start);
108
+ const result = new Uint8Array(length);
109
+ const len = Math.min(length, reader.view.byteLength - start);
110
110
  if (len > 0)
111
111
  result.set(new Uint8Array(reader.view.buffer, start, len));
112
112
  return result;
@@ -121,7 +121,7 @@ function readSignature(reader) {
121
121
  }
122
122
  exports.readSignature = readSignature;
123
123
  function validSignatureAt(reader, offset) {
124
- var sig = String.fromCharCode(reader.view.getUint8(offset))
124
+ const sig = String.fromCharCode(reader.view.getUint8(offset))
125
125
  + String.fromCharCode(reader.view.getUint8(offset + 1))
126
126
  + String.fromCharCode(reader.view.getUint8(offset + 2))
127
127
  + String.fromCharCode(reader.view.getUint8(offset + 3));
@@ -129,8 +129,8 @@ function validSignatureAt(reader, offset) {
129
129
  }
130
130
  exports.validSignatureAt = validSignatureAt;
131
131
  function readPascalString(reader, padTo) {
132
- var length = readUint8(reader);
133
- var text = length ? readShortString(reader, length) : '';
132
+ let length = readUint8(reader);
133
+ const text = length ? readShortString(reader, length) : '';
134
134
  while (++length % padTo) { // starts with length + 1 so we count the size byte too
135
135
  reader.offset++;
136
136
  }
@@ -138,14 +138,14 @@ function readPascalString(reader, padTo) {
138
138
  }
139
139
  exports.readPascalString = readPascalString;
140
140
  function readUnicodeString(reader) {
141
- var length = readUint32(reader);
141
+ const length = readUint32(reader);
142
142
  return readUnicodeStringWithLength(reader, length);
143
143
  }
144
144
  exports.readUnicodeString = readUnicodeString;
145
145
  function readUnicodeStringWithLength(reader, length) {
146
- var text = '';
146
+ let text = '';
147
147
  while (length--) {
148
- var value = readUint16(reader);
148
+ const value = readUint16(reader);
149
149
  if (value || length > 0) { // remove trailing \0
150
150
  text += String.fromCharCode(value);
151
151
  }
@@ -154,9 +154,9 @@ function readUnicodeStringWithLength(reader, length) {
154
154
  }
155
155
  exports.readUnicodeStringWithLength = readUnicodeStringWithLength;
156
156
  function readUnicodeStringWithLengthLE(reader, length) {
157
- var text = '';
157
+ let text = '';
158
158
  while (length--) {
159
- var value = readUint16LE(reader);
159
+ const value = readUint16LE(reader);
160
160
  if (value || length > 0) { // remove trailing \0
161
161
  text += String.fromCharCode(value);
162
162
  }
@@ -165,7 +165,7 @@ function readUnicodeStringWithLengthLE(reader, length) {
165
165
  }
166
166
  exports.readUnicodeStringWithLengthLE = readUnicodeStringWithLengthLE;
167
167
  function readAsciiString(reader, length) {
168
- var text = '';
168
+ let text = '';
169
169
  while (length--) {
170
170
  text += String.fromCharCode(readUint8(reader));
171
171
  }
@@ -177,17 +177,17 @@ function skipBytes(reader, count) {
177
177
  }
178
178
  exports.skipBytes = skipBytes;
179
179
  function checkSignature(reader, a, b) {
180
- var offset = reader.offset;
181
- var signature = readSignature(reader);
180
+ const offset = reader.offset;
181
+ const signature = readSignature(reader);
182
182
  if (signature !== a && signature !== b) {
183
- throw new Error("Invalid signature: '".concat(signature, "' at 0x").concat(offset.toString(16)));
183
+ throw new Error(`Invalid signature: '${signature}' at 0x${offset.toString(16)}`);
184
184
  }
185
185
  }
186
186
  exports.checkSignature = checkSignature;
187
187
  function readShortString(reader, length) {
188
- var buffer = readBytes(reader, length);
189
- var result = '';
190
- for (var i = 0; i < buffer.length; i++) {
188
+ const buffer = readBytes(reader, length);
189
+ let result = '';
190
+ for (let i = 0; i < buffer.length; i++) {
191
191
  result += String.fromCharCode(buffer[i]);
192
192
  }
193
193
  return result;
@@ -195,35 +195,34 @@ function readShortString(reader, length) {
195
195
  function isValidSignature(sig) {
196
196
  return sig === '8BIM' || sig === 'MeSa' || sig === 'AgHg' || sig === 'PHUT' || sig === 'DCSR';
197
197
  }
198
- function readPsd(reader, readOptions) {
198
+ function readPsd(reader, readOptions = {}) {
199
199
  var _a;
200
- if (readOptions === void 0) { readOptions = {}; }
201
200
  // header
202
201
  checkSignature(reader, '8BPS');
203
- var version = readUint16(reader);
202
+ const version = readUint16(reader);
204
203
  if (version !== 1 && version !== 2)
205
- throw new Error("Invalid PSD file version: ".concat(version));
204
+ throw new Error(`Invalid PSD file version: ${version}`);
206
205
  skipBytes(reader, 6);
207
- var channels = readUint16(reader);
208
- var height = readUint32(reader);
209
- var width = readUint32(reader);
210
- var bitsPerChannel = readUint16(reader);
211
- var colorMode = readUint16(reader);
212
- var maxSize = version === 1 ? 30000 : 300000;
206
+ const channels = readUint16(reader);
207
+ const height = readUint32(reader);
208
+ const width = readUint32(reader);
209
+ const bitsPerChannel = readUint16(reader);
210
+ const colorMode = readUint16(reader);
211
+ const maxSize = version === 1 ? 30000 : 300000;
213
212
  if (width > maxSize || height > maxSize)
214
- throw new Error("Invalid size: ".concat(width, "x").concat(height));
213
+ throw new Error(`Invalid size: ${width}x${height}`);
215
214
  if (channels > 16)
216
- throw new Error("Invalid channel count: ".concat(channels));
215
+ throw new Error(`Invalid channel count: ${channels}`);
217
216
  if (![1, 8, 16, 32].includes(bitsPerChannel))
218
- throw new Error("Invalid bitsPerChannel: ".concat(bitsPerChannel));
217
+ throw new Error(`Invalid bitsPerChannel: ${bitsPerChannel}`);
219
218
  if (exports.supportedColorModes.indexOf(colorMode) === -1)
220
- throw new Error("Color mode not supported: ".concat((_a = colorModes[colorMode]) !== null && _a !== void 0 ? _a : colorMode));
221
- var psd = { width: width, height: height, channels: channels, bitsPerChannel: bitsPerChannel, colorMode: colorMode };
219
+ throw new Error(`Color mode not supported: ${(_a = colorModes[colorMode]) !== null && _a !== void 0 ? _a : colorMode}`);
220
+ const psd = { width, height, channels, bitsPerChannel, colorMode };
222
221
  Object.assign(reader, readOptions);
223
222
  reader.large = version === 2;
224
223
  reader.globalAlpha = false;
225
224
  // color mode data
226
- readSection(reader, 1, function (left) {
225
+ readSection(reader, 1, left => {
227
226
  if (!left())
228
227
  return;
229
228
  if (colorMode === 2 /* ColorMode.Indexed */) {
@@ -231,11 +230,11 @@ function readPsd(reader, readOptions) {
231
230
  if (left() != 768)
232
231
  throw new Error('Invalid color palette size');
233
232
  psd.palette = [];
234
- for (var i = 0; i < 256; i++)
233
+ for (let i = 0; i < 256; i++)
235
234
  psd.palette.push({ r: readUint8(reader), g: 0, b: 0 });
236
- for (var i = 0; i < 256; i++)
235
+ for (let i = 0; i < 256; i++)
237
236
  psd.palette[i].g = readUint8(reader);
238
- for (var i = 0; i < 256; i++)
237
+ for (let i = 0; i < 256; i++)
239
238
  psd.palette[i].b = readUint8(reader);
240
239
  }
241
240
  else {
@@ -245,15 +244,15 @@ function readPsd(reader, readOptions) {
245
244
  skipBytes(reader, left());
246
245
  });
247
246
  // image resources
248
- var imageResources = {};
249
- readSection(reader, 1, function (left) {
250
- var _loop_1 = function () {
247
+ const imageResources = {};
248
+ readSection(reader, 1, left => {
249
+ while (left() > 0) {
251
250
  realignWithSignature(reader, isValidSignature);
252
- var id = readUint16(reader);
251
+ const id = readUint16(reader);
253
252
  readPascalString(reader, 2); // name
254
- readSection(reader, 2, function (left) {
255
- var handler = imageResources_1.resourceHandlersMap[id];
256
- var skip = id === 1036 && !!reader.skipThumbnail;
253
+ readSection(reader, 2, left => {
254
+ const handler = imageResources_1.resourceHandlersMap[id];
255
+ const skip = id === 1036 && !!reader.skipThumbnail;
257
256
  if (handler && !skip) {
258
257
  try {
259
258
  handler.read(reader, imageResources, left);
@@ -269,24 +268,21 @@ function readPsd(reader, readOptions) {
269
268
  skipBytes(reader, left());
270
269
  }
271
270
  });
272
- };
273
- while (left() > 0) {
274
- _loop_1();
275
271
  }
276
272
  });
277
- var layersGroup = imageResources.layersGroup, layerGroupsEnabledId = imageResources.layerGroupsEnabledId, rest = __rest(imageResources, ["layersGroup", "layerGroupsEnabledId"]);
273
+ const { layersGroup, layerGroupsEnabledId } = imageResources, rest = __rest(imageResources, ["layersGroup", "layerGroupsEnabledId"]);
278
274
  if (Object.keys(rest)) {
279
275
  psd.imageResources = rest;
280
276
  }
281
277
  // layer and mask info
282
- readSection(reader, 1, function (left) {
283
- readSection(reader, 2, function (left) {
278
+ readSection(reader, 1, left => {
279
+ readSection(reader, 2, left => {
284
280
  readLayerInfo(reader, psd, imageResources);
285
281
  skipBytes(reader, left());
286
282
  }, undefined, reader.large);
287
283
  // SAI does not include this section
288
284
  if (left() > 0) {
289
- var globalLayerMaskInfo = readGlobalLayerMaskInfo(reader);
285
+ const globalLayerMaskInfo = readGlobalLayerMaskInfo(reader);
290
286
  if (globalLayerMaskInfo)
291
287
  psd.globalLayerMaskInfo = globalLayerMaskInfo;
292
288
  }
@@ -310,8 +306,8 @@ function readPsd(reader, readOptions) {
310
306
  }
311
307
  }
312
308
  }, undefined, reader.large);
313
- var hasChildren = psd.children && psd.children.length;
314
- var skipComposite = reader.skipCompositeImageData && (reader.skipLayerImageData || hasChildren);
309
+ const hasChildren = psd.children && psd.children.length;
310
+ const skipComposite = reader.skipCompositeImageData && (reader.skipLayerImageData || hasChildren);
315
311
  if (!skipComposite) {
316
312
  readImageData(reader, psd);
317
313
  }
@@ -323,16 +319,16 @@ function readPsd(reader, readOptions) {
323
319
  exports.readPsd = readPsd;
324
320
  function readLayerInfo(reader, psd, imageResources) {
325
321
  var _a, _b;
326
- var _c = imageResources.layersGroup, layersGroup = _c === void 0 ? [] : _c, _d = imageResources.layerGroupsEnabledId, layerGroupsEnabledId = _d === void 0 ? [] : _d;
327
- var layerCount = readInt16(reader);
322
+ const { layersGroup = [], layerGroupsEnabledId = [] } = imageResources;
323
+ let layerCount = readInt16(reader);
328
324
  if (layerCount < 0) {
329
325
  reader.globalAlpha = true;
330
326
  layerCount = -layerCount;
331
327
  }
332
- var layers = [];
333
- var layerChannels = [];
334
- for (var i = 0; i < layerCount; i++) {
335
- var _e = readLayerRecord(reader, psd, imageResources), layer = _e.layer, channels = _e.channels;
328
+ const layers = [];
329
+ const layerChannels = [];
330
+ for (let i = 0; i < layerCount; i++) {
331
+ const { layer, channels } = readLayerRecord(reader, psd, imageResources);
336
332
  if (layersGroup[i] !== undefined)
337
333
  layer.linkGroup = layersGroup[i];
338
334
  if (layerGroupsEnabledId[i] !== undefined)
@@ -340,15 +336,15 @@ function readLayerInfo(reader, psd, imageResources) {
340
336
  layers.push(layer);
341
337
  layerChannels.push(channels);
342
338
  }
343
- for (var i = 0; i < layerCount; i++) {
339
+ for (let i = 0; i < layerCount; i++) {
344
340
  readLayerChannelImageData(reader, psd, layers[i], layerChannels[i]);
345
341
  }
346
342
  if (!psd.children)
347
343
  psd.children = [];
348
- var stack = [psd];
349
- for (var i = layers.length - 1; i >= 0; i--) {
350
- var l = layers[i];
351
- var type = l.sectionDivider ? l.sectionDivider.type : 0 /* SectionDividerType.Other */;
344
+ const stack = [psd];
345
+ for (let i = layers.length - 1; i >= 0; i--) {
346
+ const l = layers[i];
347
+ const type = l.sectionDivider ? l.sectionDivider.type : 0 /* SectionDividerType.Other */;
352
348
  if (type === 1 /* SectionDividerType.OpenFolder */ || type === 2 /* SectionDividerType.ClosedFolder */) {
353
349
  l.opened = type === 1 /* SectionDividerType.OpenFolder */;
354
350
  l.children = [];
@@ -372,31 +368,31 @@ function readLayerInfo(reader, psd, imageResources) {
372
368
  }
373
369
  exports.readLayerInfo = readLayerInfo;
374
370
  function readLayerRecord(reader, psd, imageResources) {
375
- var layer = {};
371
+ const layer = {};
376
372
  layer.top = readInt32(reader);
377
373
  layer.left = readInt32(reader);
378
374
  layer.bottom = readInt32(reader);
379
375
  layer.right = readInt32(reader);
380
- var channelCount = readUint16(reader);
381
- var channels = [];
382
- for (var i = 0; i < channelCount; i++) {
383
- var id = readInt16(reader);
384
- var length_1 = readUint32(reader);
376
+ const channelCount = readUint16(reader);
377
+ const channels = [];
378
+ for (let i = 0; i < channelCount; i++) {
379
+ let id = readInt16(reader);
380
+ let length = readUint32(reader);
385
381
  if (reader.large) {
386
- if (length_1 !== 0)
382
+ if (length !== 0)
387
383
  throw new Error('Sizes larger than 4GB are not supported');
388
- length_1 = readUint32(reader);
384
+ length = readUint32(reader);
389
385
  }
390
- channels.push({ id: id, length: length_1 });
386
+ channels.push({ id, length });
391
387
  }
392
388
  checkSignature(reader, '8BIM');
393
- var blendMode = readSignature(reader);
389
+ const blendMode = readSignature(reader);
394
390
  if (!helpers_1.toBlendMode[blendMode])
395
- throw new Error("Invalid blend mode: '".concat(blendMode, "'"));
391
+ throw new Error(`Invalid blend mode: '${blendMode}'`);
396
392
  layer.blendMode = helpers_1.toBlendMode[blendMode];
397
393
  layer.opacity = readUint8(reader) / 0xff;
398
394
  layer.clipping = readUint8(reader) === 1;
399
- var flags = readUint8(reader);
395
+ const flags = readUint8(reader);
400
396
  layer.transparencyProtected = (flags & 0x01) !== 0;
401
397
  layer.hidden = (flags & 0x02) !== 0;
402
398
  if (flags & 0x20)
@@ -406,9 +402,9 @@ function readLayerRecord(reader, psd, imageResources) {
406
402
  // 0x10 - pixel data irrelevant to appearance of document
407
403
  // 0x20 - effects/filters panel is expanded
408
404
  skipBytes(reader, 1);
409
- readSection(reader, 1, function (left) {
405
+ readSection(reader, 1, left => {
410
406
  readLayerMaskData(reader, layer);
411
- var blendingRanges = readLayerBlendingRanges(reader);
407
+ const blendingRanges = readLayerBlendingRanges(reader);
412
408
  if (blendingRanges)
413
409
  layer.blendingRanges = blendingRanges;
414
410
  layer.name = readPascalString(reader, 1); // should be padded to 4, but is not sometimes
@@ -419,27 +415,27 @@ function readLayerRecord(reader, psd, imageResources) {
419
415
  readAdditionalLayerInfo(reader, layer, psd, imageResources);
420
416
  skipBytes(reader, left());
421
417
  });
422
- return { layer: layer, channels: channels };
418
+ return { layer, channels };
423
419
  }
424
420
  function readLayerMaskData(reader, layer) {
425
- return readSection(reader, 1, function (left) {
421
+ return readSection(reader, 1, left => {
426
422
  if (!left())
427
423
  return undefined;
428
- var mask = {};
424
+ const mask = {};
429
425
  layer.mask = mask;
430
426
  mask.top = readInt32(reader);
431
427
  mask.left = readInt32(reader);
432
428
  mask.bottom = readInt32(reader);
433
429
  mask.right = readInt32(reader);
434
430
  mask.defaultColor = readUint8(reader);
435
- var flags = readUint8(reader);
431
+ const flags = readUint8(reader);
436
432
  mask.positionRelativeToLayer = (flags & 1 /* LayerMaskFlags.PositionRelativeToLayer */) !== 0;
437
433
  mask.disabled = (flags & 2 /* LayerMaskFlags.LayerMaskDisabled */) !== 0;
438
434
  mask.fromVectorData = (flags & 8 /* LayerMaskFlags.LayerMaskFromRenderingOtherData */) !== 0;
439
435
  if (left() >= 18) {
440
- var realMask = {};
436
+ const realMask = {};
441
437
  layer.realMask = realMask;
442
- var realFlags = readUint8(reader);
438
+ const realFlags = readUint8(reader);
443
439
  realMask.positionRelativeToLayer = (realFlags & 1 /* LayerMaskFlags.PositionRelativeToLayer */) !== 0;
444
440
  realMask.disabled = (realFlags & 2 /* LayerMaskFlags.LayerMaskDisabled */) !== 0;
445
441
  realMask.fromVectorData = (realFlags & 8 /* LayerMaskFlags.LayerMaskFromRenderingOtherData */) !== 0;
@@ -450,7 +446,7 @@ function readLayerMaskData(reader, layer) {
450
446
  realMask.right = readInt32(reader);
451
447
  }
452
448
  if (flags & 16 /* LayerMaskFlags.MaskHasParametersAppliedToIt */) {
453
- var params = readUint8(reader);
449
+ const params = readUint8(reader);
454
450
  if (params & 1 /* MaskParams.UserMaskDensity */)
455
451
  mask.userMaskDensity = readUint8(reader) / 0xff;
456
452
  if (params & 2 /* MaskParams.UserMaskFeather */)
@@ -467,28 +463,27 @@ function readBlendingRange(reader) {
467
463
  return [readUint8(reader), readUint8(reader), readUint8(reader), readUint8(reader)];
468
464
  }
469
465
  function readLayerBlendingRanges(reader) {
470
- return readSection(reader, 1, function (left) {
471
- var compositeGrayBlendSource = readBlendingRange(reader);
472
- var compositeGraphBlendDestinationRange = readBlendingRange(reader);
473
- var ranges = [];
466
+ return readSection(reader, 1, left => {
467
+ const compositeGrayBlendSource = readBlendingRange(reader);
468
+ const compositeGraphBlendDestinationRange = readBlendingRange(reader);
469
+ const ranges = [];
474
470
  while (left() > 0) {
475
- var sourceRange = readBlendingRange(reader);
476
- var destRange = readBlendingRange(reader);
477
- ranges.push({ sourceRange: sourceRange, destRange: destRange });
471
+ const sourceRange = readBlendingRange(reader);
472
+ const destRange = readBlendingRange(reader);
473
+ ranges.push({ sourceRange, destRange });
478
474
  }
479
- return { compositeGrayBlendSource: compositeGrayBlendSource, compositeGraphBlendDestinationRange: compositeGraphBlendDestinationRange, ranges: ranges };
475
+ return { compositeGrayBlendSource, compositeGraphBlendDestinationRange, ranges };
480
476
  });
481
477
  }
482
478
  function readLayerChannelImageData(reader, psd, layer, channels) {
483
479
  if (reader.skipLayerImageData)
484
480
  return;
485
- var _a = psd.colorMode, colorMode = _a === void 0 ? 3 /* ColorMode.RGB */ : _a, _b = psd.bitsPerChannel, bitsPerChannel = _b === void 0 ? 8 : _b;
486
- layer.rawData = { colorMode: colorMode, bitsPerChannel: bitsPerChannel, channels: [], large: reader.large };
487
- for (var _i = 0, channels_1 = channels; _i < channels_1.length; _i++) {
488
- var channel = channels_1[_i];
489
- var start = reader.offset;
490
- var compression = 0 /* Compression.RawData */;
491
- var data = undefined;
481
+ const { colorMode = 3 /* ColorMode.RGB */, bitsPerChannel = 8 } = psd;
482
+ layer.rawData = { colorMode, bitsPerChannel, channels: [], large: reader.large };
483
+ for (const channel of channels) {
484
+ const start = reader.offset;
485
+ let compression = 0 /* Compression.RawData */;
486
+ let data = undefined;
492
487
  if (channel.length === 1)
493
488
  throw new Error('Invalid channel length');
494
489
  if (channel.length) {
@@ -504,37 +499,36 @@ function readLayerChannelImageData(reader, psd, layer, channels) {
504
499
  compression = readUint16(reader);
505
500
  }
506
501
  if (compression > 3)
507
- throw new Error("Invalid compression: ".concat(compression));
502
+ throw new Error(`Invalid compression: ${compression}`);
508
503
  if (channel.length > 2) {
509
504
  data = readBytes(reader, channel.length - 2);
510
505
  }
511
506
  }
512
507
  reader.offset = start + channel.length;
513
- layer.rawData.channels.push({ id: channel.id, compression: compression, data: data });
508
+ layer.rawData.channels.push({ id: channel.id, compression, data });
514
509
  }
515
510
  if (!reader.useRawData) {
516
511
  decodeLayerImageData(layer, !!reader.useImageData, !!reader.throwForMissingFeatures);
517
512
  }
518
513
  }
519
- function resetAlpha(_a, cmyk) {
520
- var data = _a.data;
521
- var alpha = (data instanceof Float32Array) ? 1.0 : ((data instanceof Uint16Array) ? 0xffff : 0xff);
522
- var offset = (cmyk ? 4 : 3) | 0;
523
- var length = data.length | 0;
524
- var step = (cmyk ? 5 : 4) | 0;
525
- for (var p = offset; p < length; p = (p + step) | 0) {
514
+ function resetAlpha({ data }, cmyk) {
515
+ const alpha = (data instanceof Float32Array) ? 1.0 : ((data instanceof Uint16Array) ? 0xffff : 0xff);
516
+ const offset = (cmyk ? 4 : 3) | 0;
517
+ const length = data.length | 0;
518
+ const step = (cmyk ? 5 : 4) | 0;
519
+ for (let p = offset; p < length; p = (p + step) | 0) {
526
520
  data[p] = alpha;
527
521
  }
528
522
  }
529
523
  function decodeLayerImageData(layer, useImageData, throwForMissingFeatures) {
530
524
  if (!layer.rawData)
531
525
  return;
532
- var _a = layer.rawData, colorMode = _a.colorMode, bitsPerChannel = _a.bitsPerChannel, channels = _a.channels, large = _a.large;
533
- var layerWidth = (layer.right || 0) - (layer.left || 0);
534
- var layerHeight = (layer.bottom || 0) - (layer.top || 0);
535
- var cmyk = colorMode === 4 /* ColorMode.CMYK */;
536
- var imageData;
537
- var initializedAlpha = false;
526
+ const { colorMode, bitsPerChannel, channels, large } = layer.rawData;
527
+ const layerWidth = (layer.right || 0) - (layer.left || 0);
528
+ const layerHeight = (layer.bottom || 0) - (layer.top || 0);
529
+ const cmyk = colorMode === 4 /* ColorMode.CMYK */;
530
+ let imageData;
531
+ let initializedAlpha = false;
538
532
  if (layerWidth && layerHeight) {
539
533
  if (cmyk) {
540
534
  if (bitsPerChannel !== 8)
@@ -549,21 +543,20 @@ function decodeLayerImageData(layer, useImageData, throwForMissingFeatures) {
549
543
  layer.imageDataRaw = [];
550
544
  layer.imageDataRawCompression = [];
551
545
  }
552
- for (var _i = 0, channels_2 = channels; _i < channels_2.length; _i++) {
553
- var _b = channels_2[_i], id = _b.id, compression = _b.compression, data = _b.data;
546
+ for (const { id, compression, data } of channels) {
554
547
  if (!data)
555
548
  continue;
556
- var dataReader = createReader(data.buffer, data.byteOffset, data.byteLength);
549
+ const dataReader = createReader(data.buffer, data.byteOffset, data.byteLength);
557
550
  if (id === -2 /* ChannelID.UserMask */ || id === -3 /* ChannelID.RealUserMask */) {
558
- var mask = id === -2 /* ChannelID.UserMask */ ? layer.mask : layer.realMask;
551
+ const mask = id === -2 /* ChannelID.UserMask */ ? layer.mask : layer.realMask;
559
552
  if (!mask)
560
- throw new Error("Missing layer ".concat(id === -2 /* ChannelID.UserMask */ ? 'mask' : 'real mask', " data"));
561
- var maskWidth = (mask.right || 0) - (mask.left || 0);
562
- var maskHeight = (mask.bottom || 0) - (mask.top || 0);
553
+ throw new Error(`Missing layer ${id === -2 /* ChannelID.UserMask */ ? 'mask' : 'real mask'} data`);
554
+ const maskWidth = (mask.right || 0) - (mask.left || 0);
555
+ const maskHeight = (mask.bottom || 0) - (mask.top || 0);
563
556
  if (maskWidth < 0 || maskHeight < 0 || maskWidth > 30000 || maskHeight > 30000)
564
557
  throw new Error('Invalid mask size');
565
558
  if (maskWidth && maskHeight) {
566
- var maskData = createImageDataBitDepth(maskWidth, maskHeight, bitsPerChannel);
559
+ const maskData = createImageDataBitDepth(maskWidth, maskHeight, bitsPerChannel);
567
560
  readData(dataReader, data.byteLength, maskData, compression, maskWidth, maskHeight, bitsPerChannel, 0, large, 4);
568
561
  if (helpers_1.RAW_IMAGE_DATA) { // TODO: use layer.rawData instead
569
562
  if (id === -2 /* ChannelID.UserMask */) {
@@ -586,12 +579,12 @@ function decodeLayerImageData(layer, useImageData, throwForMissingFeatures) {
586
579
  }
587
580
  }
588
581
  else {
589
- var offset = (0, helpers_1.offsetForChannel)(id, cmyk);
590
- var targetData = imageData;
582
+ const offset = (0, helpers_1.offsetForChannel)(id, cmyk);
583
+ let targetData = imageData;
591
584
  if (offset < 0) {
592
585
  targetData = undefined;
593
586
  if (throwForMissingFeatures) {
594
- throw new Error("Channel not supported: ".concat(id));
587
+ throw new Error(`Channel not supported: ${id}`);
595
588
  }
596
589
  }
597
590
  readData(dataReader, data.byteLength, targetData, compression, layerWidth, layerHeight, bitsPerChannel, offset, large, cmyk ? 5 : 4);
@@ -611,7 +604,7 @@ function decodeLayerImageData(layer, useImageData, throwForMissingFeatures) {
611
604
  if (!initializedAlpha)
612
605
  resetAlpha(imageData, cmyk);
613
606
  if (cmyk) {
614
- var cmykData = imageData;
607
+ const cmykData = imageData;
615
608
  imageData = (0, helpers_1.createImageData)(cmykData.width, cmykData.height);
616
609
  cmykToRgb(cmykData, imageData, false);
617
610
  }
@@ -630,9 +623,9 @@ function readData(reader, length, pixels, compression, width, height, bitDepth,
630
623
  return;
631
624
  if (compression === 0 /* Compression.RawData */) {
632
625
  if (length !== (width * height * Math.floor(bitDepth / 8))) {
633
- reader.log("Invalid length (".concat(length, ", ").concat(width * height * Math.floor(bitDepth / 8), ")"));
626
+ reader.log(`Invalid length (${length}, ${width * height * Math.floor(bitDepth / 8)})`);
634
627
  }
635
- var data = readBytes(reader, length);
628
+ const data = readBytes(reader, length);
636
629
  readDataRaw(data, pixels, bitDepth, step, offset);
637
630
  }
638
631
  else if (compression === 1 /* Compression.RleCompressed */) {
@@ -640,40 +633,39 @@ function readData(reader, length, pixels, compression, width, height, bitDepth,
640
633
  readDataRLE(reader, pixels, width, height, bitDepth, step, [offset], large);
641
634
  }
642
635
  else if (compression === 2 /* Compression.ZipWithoutPrediction */) {
643
- var data = readBytes(reader, length);
636
+ const data = readBytes(reader, length);
644
637
  readDataZip(data, pixels, width, height, bitDepth, step, offset, false);
645
638
  }
646
639
  else if (compression === 3 /* Compression.ZipWithPrediction */) {
647
- var data = readBytes(reader, length);
640
+ const data = readBytes(reader, length);
648
641
  readDataZip(data, pixels, width, height, bitDepth, step, offset, true);
649
642
  }
650
643
  else {
651
- throw new Error("Invalid Compression type: ".concat(compression));
644
+ throw new Error(`Invalid Compression type: ${compression}`);
652
645
  }
653
646
  }
654
647
  function readGlobalLayerMaskInfo(reader) {
655
- return readSection(reader, 1, function (left) {
648
+ return readSection(reader, 1, left => {
656
649
  if (!left())
657
650
  return undefined;
658
- var overlayColorSpace = readUint16(reader);
659
- var colorSpace1 = readUint16(reader);
660
- var colorSpace2 = readUint16(reader);
661
- var colorSpace3 = readUint16(reader);
662
- var colorSpace4 = readUint16(reader);
663
- var opacity = readUint16(reader) / 0xff;
664
- var kind = readUint8(reader);
651
+ const overlayColorSpace = readUint16(reader);
652
+ const colorSpace1 = readUint16(reader);
653
+ const colorSpace2 = readUint16(reader);
654
+ const colorSpace3 = readUint16(reader);
655
+ const colorSpace4 = readUint16(reader);
656
+ const opacity = readUint16(reader) / 0xff;
657
+ const kind = readUint8(reader);
665
658
  skipBytes(reader, left()); // 3 bytes of padding ?
666
- return { overlayColorSpace: overlayColorSpace, colorSpace1: colorSpace1, colorSpace2: colorSpace2, colorSpace3: colorSpace3, colorSpace4: colorSpace4, opacity: opacity, kind: kind };
659
+ return { overlayColorSpace, colorSpace1, colorSpace2, colorSpace3, colorSpace4, opacity, kind };
667
660
  });
668
661
  }
669
662
  exports.readGlobalLayerMaskInfo = readGlobalLayerMaskInfo;
670
- var fixOffsets = [0, 1, -1, 2, -2, 3, -3, 4, -4];
663
+ const fixOffsets = [0, 1, -1, 2, -2, 3, -3, 4, -4];
671
664
  function realignWithSignature(reader, isValid) {
672
- var sigOffset = reader.offset;
673
- var sig = '';
665
+ const sigOffset = reader.offset;
666
+ let sig = '';
674
667
  // attempt to fix broken document by realigning with the signature
675
- for (var _i = 0, fixOffsets_1 = fixOffsets; _i < fixOffsets_1.length; _i++) {
676
- var offset = fixOffsets_1[_i];
668
+ for (const offset of fixOffsets) {
677
669
  try {
678
670
  reader.offset = sigOffset + offset;
679
671
  sig = readSignature(reader);
@@ -683,7 +675,7 @@ function realignWithSignature(reader, isValid) {
683
675
  break;
684
676
  }
685
677
  if (!isValid(sig)) {
686
- throw new Error("Invalid signature: '".concat(sig, "' at 0x").concat((sigOffset).toString(16)));
678
+ throw new Error(`Invalid signature: '${sig}' at 0x${(sigOffset).toString(16)}`);
687
679
  }
688
680
  return sig;
689
681
  }
@@ -691,12 +683,12 @@ function isValidAdditionalInfoSignature(sig) {
691
683
  return sig === '8BIM' || sig === '8B64';
692
684
  }
693
685
  function readAdditionalLayerInfo(reader, target, psd, imageResources) {
694
- var sig = realignWithSignature(reader, isValidAdditionalInfoSignature);
695
- var key = readSignature(reader);
686
+ const sig = realignWithSignature(reader, isValidAdditionalInfoSignature);
687
+ const key = readSignature(reader);
696
688
  // `largeAdditionalInfoKeys` fallback, because some keys don't have 8B64 signature even when they are 64bit
697
- var u64 = sig === '8B64' || (reader.large && helpers_1.largeAdditionalInfoKeys.indexOf(key) !== -1);
698
- readSection(reader, 2, function (left) {
699
- var handler = additionalInfo_1.infoHandlersMap[key];
689
+ const u64 = sig === '8B64' || (reader.large && helpers_1.largeAdditionalInfoKeys.indexOf(key) !== -1);
690
+ readSection(reader, 2, left => {
691
+ const handler = additionalInfo_1.infoHandlersMap[key];
700
692
  if (handler) {
701
693
  try {
702
694
  handler.read(reader, target, left, psd, imageResources);
@@ -707,52 +699,51 @@ function readAdditionalLayerInfo(reader, target, psd, imageResources) {
707
699
  }
708
700
  }
709
701
  else {
710
- reader.logMissingFeatures && reader.log("Unhandled additional info: ".concat(key));
702
+ reader.logMissingFeatures && reader.log(`Unhandled additional info: ${key}`);
711
703
  skipBytes(reader, left());
712
704
  }
713
705
  if (left()) {
714
- reader.logMissingFeatures && reader.log("Unread ".concat(left(), " bytes left for additional info: ").concat(key));
706
+ reader.logMissingFeatures && reader.log(`Unread ${left()} bytes left for additional info: ${key}`);
715
707
  skipBytes(reader, left());
716
708
  }
717
709
  }, false, u64);
718
710
  }
719
711
  exports.readAdditionalLayerInfo = readAdditionalLayerInfo;
720
- function createImageDataBitDepth(width, height, bitDepth, channels) {
721
- if (channels === void 0) { channels = 4; }
712
+ function createImageDataBitDepth(width, height, bitDepth, channels = 4) {
722
713
  if (bitDepth === 1 || bitDepth === 8) {
723
714
  if (channels === 4) {
724
715
  return (0, helpers_1.createImageData)(width, height);
725
716
  }
726
717
  else {
727
- return { width: width, height: height, data: new Uint8ClampedArray(width * height * channels) };
718
+ return { width, height, data: new Uint8ClampedArray(width * height * channels) };
728
719
  }
729
720
  }
730
721
  else if (bitDepth === 16) {
731
- return { width: width, height: height, data: new Uint16Array(width * height * channels) };
722
+ return { width, height, data: new Uint16Array(width * height * channels) };
732
723
  }
733
724
  else if (bitDepth === 32) {
734
- return { width: width, height: height, data: new Float32Array(width * height * channels) };
725
+ return { width, height, data: new Float32Array(width * height * channels) };
735
726
  }
736
727
  else {
737
- throw new Error("Invalid bitDepth (".concat(bitDepth, ")"));
728
+ throw new Error(`Invalid bitDepth (${bitDepth})`);
738
729
  }
739
730
  }
740
731
  exports.createImageDataBitDepth = createImageDataBitDepth;
741
732
  function readImageData(reader, psd) {
742
733
  var _a;
743
- var compression = readUint16(reader);
744
- var bitsPerChannel = (_a = psd.bitsPerChannel) !== null && _a !== void 0 ? _a : 8;
734
+ const compression = readUint16(reader);
735
+ const bitsPerChannel = (_a = psd.bitsPerChannel) !== null && _a !== void 0 ? _a : 8;
745
736
  if (exports.supportedColorModes.indexOf(psd.colorMode) === -1)
746
- throw new Error("Color mode not supported: ".concat(psd.colorMode));
737
+ throw new Error(`Color mode not supported: ${psd.colorMode}`);
747
738
  if (compression !== 0 /* Compression.RawData */ && compression !== 1 /* Compression.RleCompressed */)
748
- throw new Error("Compression type not supported: ".concat(compression));
749
- var imageData = createImageDataBitDepth(psd.width, psd.height, bitsPerChannel);
739
+ throw new Error(`Compression type not supported: ${compression}`);
740
+ const imageData = createImageDataBitDepth(psd.width, psd.height, bitsPerChannel);
750
741
  (0, helpers_1.resetImageData)(imageData);
751
742
  switch (psd.colorMode) {
752
743
  case 0 /* ColorMode.Bitmap */: {
753
744
  if (bitsPerChannel !== 1)
754
745
  throw new Error('Invalid bitsPerChannel for bitmap color mode');
755
- var bytes = void 0;
746
+ let bytes;
756
747
  if (compression === 0 /* Compression.RawData */) {
757
748
  bytes = readBytes(reader, Math.ceil(psd.width / 8) * psd.height);
758
749
  }
@@ -761,16 +752,16 @@ function readImageData(reader, psd) {
761
752
  readDataRLE(reader, { data: bytes, width: psd.width, height: psd.height }, psd.width, psd.height, 8, 1, [0], reader.large);
762
753
  }
763
754
  else {
764
- throw new Error("Bitmap compression not supported: ".concat(compression));
755
+ throw new Error(`Bitmap compression not supported: ${compression}`);
765
756
  }
766
757
  (0, helpers_1.decodeBitmap)(bytes, imageData.data, psd.width, psd.height);
767
758
  break;
768
759
  }
769
760
  case 3 /* ColorMode.RGB */:
770
761
  case 1 /* ColorMode.Grayscale */: {
771
- var channels = psd.colorMode === 1 /* ColorMode.Grayscale */ ? [0] : [0, 1, 2];
762
+ const channels = psd.colorMode === 1 /* ColorMode.Grayscale */ ? [0] : [0, 1, 2];
772
763
  if (psd.channels && psd.channels > 3) {
773
- for (var i = 3; i < psd.channels; i++) {
764
+ for (let i = 3; i < psd.channels; i++) {
774
765
  // TODO: store these channels in additional image data
775
766
  channels.push(i);
776
767
  }
@@ -779,13 +770,13 @@ function readImageData(reader, psd) {
779
770
  channels.push(3);
780
771
  }
781
772
  if (compression === 0 /* Compression.RawData */) {
782
- for (var i = 0; i < channels.length; i++) {
783
- var data = readBytes(reader, psd.width * psd.height * Math.floor(bitsPerChannel / 8));
773
+ for (let i = 0; i < channels.length; i++) {
774
+ const data = readBytes(reader, psd.width * psd.height * Math.floor(bitsPerChannel / 8));
784
775
  readDataRaw(data, imageData, bitsPerChannel, 4, channels[i]);
785
776
  }
786
777
  }
787
778
  else if (compression === 1 /* Compression.RleCompressed */) {
788
- var start = reader.offset;
779
+ const start = reader.offset;
789
780
  readDataRLE(reader, imageData, psd.width, psd.height, bitsPerChannel, 4, channels, reader.large);
790
781
  if (helpers_1.RAW_IMAGE_DATA)
791
782
  psd.imageDataRaw = new Uint8Array(reader.view.buffer, reader.view.byteOffset + start, reader.offset - start);
@@ -803,10 +794,10 @@ function readImageData(reader, psd) {
803
794
  if (!psd.palette)
804
795
  throw new Error('Missing color palette');
805
796
  if (compression === 0 /* Compression.RawData */) {
806
- throw new Error("Not implemented");
797
+ throw new Error(`Not implemented`);
807
798
  }
808
799
  else if (compression === 1 /* Compression.RleCompressed */) {
809
- var indexedImageData = {
800
+ const indexedImageData = {
810
801
  width: imageData.width,
811
802
  height: imageData.height,
812
803
  data: new Uint8Array(imageData.width * imageData.height),
@@ -815,7 +806,7 @@ function readImageData(reader, psd) {
815
806
  indexedToRgb(indexedImageData, imageData, psd.palette);
816
807
  }
817
808
  else {
818
- throw new Error("Not implemented");
809
+ throw new Error(`Not implemented`);
819
810
  }
820
811
  break;
821
812
  }
@@ -823,48 +814,48 @@ function readImageData(reader, psd) {
823
814
  if (bitsPerChannel !== 8)
824
815
  throw new Error('bitsPerChannel Not supproted');
825
816
  if (psd.channels !== 4)
826
- throw new Error("Invalid channel count");
827
- var channels = [0, 1, 2, 3];
817
+ throw new Error(`Invalid channel count`);
818
+ const channels = [0, 1, 2, 3];
828
819
  if (reader.globalAlpha)
829
820
  channels.push(4);
830
821
  if (compression === 0 /* Compression.RawData */) {
831
- throw new Error("Not implemented");
822
+ throw new Error(`Not implemented`);
832
823
  // TODO: ...
833
824
  // for (let i = 0; i < channels.length; i++) {
834
825
  // readDataRaw(reader, imageData, channels[i], psd.width, psd.height);
835
826
  // }
836
827
  }
837
828
  else if (compression === 1 /* Compression.RleCompressed */) {
838
- var cmykImageData = {
829
+ const cmykImageData = {
839
830
  width: imageData.width,
840
831
  height: imageData.height,
841
832
  data: new Uint8Array(imageData.width * imageData.height * 5),
842
833
  };
843
- var start = reader.offset;
834
+ const start = reader.offset;
844
835
  readDataRLE(reader, cmykImageData, psd.width, psd.height, bitsPerChannel, 5, channels, reader.large);
845
836
  cmykToRgb(cmykImageData, imageData, true);
846
837
  if (helpers_1.RAW_IMAGE_DATA)
847
838
  psd.imageDataRaw = new Uint8Array(reader.view.buffer, reader.view.byteOffset + start, reader.offset - start);
848
839
  }
849
840
  else {
850
- throw new Error("Not implemented");
841
+ throw new Error(`Not implemented`);
851
842
  }
852
843
  break;
853
844
  }
854
- default: throw new Error("Color mode not supported: ".concat(psd.colorMode));
845
+ default: throw new Error(`Color mode not supported: ${psd.colorMode}`);
855
846
  }
856
847
  // remove weird white matte
857
848
  if (reader.globalAlpha) {
858
849
  if (psd.bitsPerChannel !== 8)
859
850
  throw new Error('bitsPerChannel Not supproted');
860
- var p = imageData.data;
861
- var size = imageData.width * imageData.height * 4;
862
- for (var i = 0; i < size; i += 4) {
863
- var pa = p[i + 3];
851
+ const p = imageData.data;
852
+ const size = imageData.width * imageData.height * 4;
853
+ for (let i = 0; i < size; i += 4) {
854
+ const pa = p[i + 3];
864
855
  if (pa != 0 && pa != 255) {
865
- var a = pa / 255;
866
- var ra = 1 / a;
867
- var invA = 255 * (1 - ra);
856
+ const a = pa / 255;
857
+ const ra = 1 / a;
858
+ const invA = 255 * (1 - ra);
868
859
  p[i + 0] = p[i + 0] * ra + invA;
869
860
  p[i + 1] = p[i + 1] * ra + invA;
870
861
  p[i + 2] = p[i + 2] * ra + invA;
@@ -879,14 +870,14 @@ function readImageData(reader, psd) {
879
870
  }
880
871
  }
881
872
  function cmykToRgb(cmyk, rgb, reverseAlpha) {
882
- var size = rgb.width * rgb.height * 4;
883
- var srcData = cmyk.data;
884
- var dstData = rgb.data;
885
- for (var src = 0, dst = 0; dst < size; src += 5, dst += 4) {
886
- var c = srcData[src];
887
- var m = srcData[src + 1];
888
- var y = srcData[src + 2];
889
- var k = srcData[src + 3];
873
+ const size = rgb.width * rgb.height * 4;
874
+ const srcData = cmyk.data;
875
+ const dstData = rgb.data;
876
+ for (let src = 0, dst = 0; dst < size; src += 5, dst += 4) {
877
+ const c = srcData[src];
878
+ const m = srcData[src + 1];
879
+ const y = srcData[src + 2];
880
+ const k = srcData[src + 3];
890
881
  dstData[dst] = ((((c * k) | 0) / 255) | 0);
891
882
  dstData[dst + 1] = ((((m * k) | 0) / 255) | 0);
892
883
  dstData[dst + 2] = ((((y * k) | 0) / 255) | 0);
@@ -904,11 +895,11 @@ function cmykToRgb(cmyk, rgb, reverseAlpha) {
904
895
  // }
905
896
  }
906
897
  function indexedToRgb(indexed, rgb, palette) {
907
- var size = indexed.width * indexed.height;
908
- var srcData = indexed.data;
909
- var dstData = rgb.data;
910
- for (var src = 0, dst = 0; src < size; src++, dst += 4) {
911
- var c = palette[srcData[src]];
898
+ const size = indexed.width * indexed.height;
899
+ const srcData = indexed.data;
900
+ const dstData = rgb.data;
901
+ for (let src = 0, dst = 0; src < size; src++, dst += 4) {
902
+ const c = palette[srcData[src]];
912
903
  dstData[dst + 0] = c.r;
913
904
  dstData[dst + 1] = c.g;
914
905
  dstData[dst + 2] = c.b;
@@ -927,13 +918,13 @@ function bytesToArray(bytes, bitDepth) {
927
918
  else if (bitDepth === 16) {
928
919
  // PSD files store 16-bit channel data in big-endian byte order.
929
920
  // Swap each pair of bytes so that Uint16Array (native-endian) reads the correct values.
930
- for (var i = 0; i < bytes.byteLength; i += 2) {
931
- var tmp = bytes[i];
921
+ for (let i = 0; i < bytes.byteLength; i += 2) {
922
+ const tmp = bytes[i];
932
923
  bytes[i] = bytes[i + 1];
933
924
  bytes[i + 1] = tmp;
934
925
  }
935
926
  if (bytes.byteOffset % 2) {
936
- var result = new Uint16Array(bytes.byteLength / 2);
927
+ const result = new Uint16Array(bytes.byteLength / 2);
937
928
  new Uint8Array(result.buffer, result.byteOffset, result.byteLength).set(bytes);
938
929
  return result;
939
930
  }
@@ -943,7 +934,7 @@ function bytesToArray(bytes, bitDepth) {
943
934
  }
944
935
  else if (bitDepth === 32) {
945
936
  if (bytes.byteOffset % 4) {
946
- var result = new Float32Array(bytes.byteLength / 4);
937
+ const result = new Float32Array(bytes.byteLength / 4);
947
938
  new Uint8Array(result.buffer, result.byteOffset, result.byteLength).set(bytes);
948
939
  return result;
949
940
  }
@@ -952,47 +943,47 @@ function bytesToArray(bytes, bitDepth) {
952
943
  }
953
944
  }
954
945
  else {
955
- throw new Error("Invalid bitDepth (".concat(bitDepth, ")"));
946
+ throw new Error(`Invalid bitDepth (${bitDepth})`);
956
947
  }
957
948
  }
958
949
  function copyChannelToPixelData(pixelData, channel, offset, step) {
959
950
  verifyCompatible(pixelData.data, channel);
960
- var size = pixelData.width * pixelData.height;
961
- var data = pixelData.data;
962
- for (var i = 0, p = offset | 0; i < size; i++, p = (p + step) | 0) {
951
+ const size = pixelData.width * pixelData.height;
952
+ const data = pixelData.data;
953
+ for (let i = 0, p = offset | 0; i < size; i++, p = (p + step) | 0) {
963
954
  data[p] = channel[i];
964
955
  }
965
956
  }
966
957
  function readDataRaw(buffer, pixelData, bitDepth, step, offset) {
967
958
  if (bitDepth == 32) {
968
- for (var i = 0; i < buffer.byteLength; i += 4) {
969
- var a = buffer[i + 0];
970
- var b = buffer[i + 1];
971
- var c = buffer[i + 2];
972
- var d = buffer[i + 3];
959
+ for (let i = 0; i < buffer.byteLength; i += 4) {
960
+ const a = buffer[i + 0];
961
+ const b = buffer[i + 1];
962
+ const c = buffer[i + 2];
963
+ const d = buffer[i + 3];
973
964
  buffer[i + 0] = d;
974
965
  buffer[i + 1] = c;
975
966
  buffer[i + 2] = b;
976
967
  buffer[i + 3] = a;
977
968
  }
978
969
  }
979
- var array = bytesToArray(buffer, bitDepth);
970
+ const array = bytesToArray(buffer, bitDepth);
980
971
  if (pixelData && offset < step) {
981
972
  copyChannelToPixelData(pixelData, array, offset, step);
982
973
  }
983
974
  }
984
975
  function decodePredicted(data, width, height, mod) {
985
- for (var y = 0; y < height; y++) {
986
- var offset = y * width;
987
- for (var x = 1, o = offset + 1; x < width; x++, o++) {
976
+ for (let y = 0; y < height; y++) {
977
+ const offset = y * width;
978
+ for (let x = 1, o = offset + 1; x < width; x++, o++) {
988
979
  data[o] = (data[o - 1] + data[o]) % mod;
989
980
  }
990
981
  }
991
982
  }
992
983
  function readDataZip(compressed, pixelData, width, height, bitDepth, step, offset, prediction) {
993
- var decompressed = (0, pako_1.inflate)(compressed);
984
+ const decompressed = (0, pako_1.inflate)(compressed);
994
985
  if (pixelData && offset < step) {
995
- var array = bytesToArray(decompressed, bitDepth);
986
+ const array = bytesToArray(decompressed, bitDepth);
996
987
  if (bitDepth === 8) {
997
988
  if (prediction)
998
989
  decodePredicted(decompressed, width, height, 0x100);
@@ -1006,14 +997,14 @@ function readDataZip(compressed, pixelData, width, height, bitDepth, step, offse
1006
997
  else if (bitDepth === 32) {
1007
998
  if (prediction)
1008
999
  decodePredicted(decompressed, width * 4, height, 0x100);
1009
- var di = offset;
1010
- var dst = new Uint32Array(pixelData.data.buffer, pixelData.data.byteOffset, pixelData.data.length);
1011
- for (var y = 0; y < height; y++) {
1012
- var a = width * 4 * y;
1013
- for (var x = 0; x < width; x++, a++, di += step) {
1014
- var b = a + width;
1015
- var c = b + width;
1016
- var d = c + width;
1000
+ let di = offset;
1001
+ const dst = new Uint32Array(pixelData.data.buffer, pixelData.data.byteOffset, pixelData.data.length);
1002
+ for (let y = 0; y < height; y++) {
1003
+ let a = width * 4 * y;
1004
+ for (let x = 0; x < width; x++, a++, di += step) {
1005
+ const b = a + width;
1006
+ const c = b + width;
1007
+ const d = c + width;
1017
1008
  dst[di] = ((decompressed[a] << 24) | (decompressed[b] << 16) | (decompressed[c] << 8) | decompressed[d]) >>> 0;
1018
1009
  }
1019
1010
  }
@@ -1025,50 +1016,50 @@ function readDataZip(compressed, pixelData, width, height, bitDepth, step, offse
1025
1016
  }
1026
1017
  exports.readDataZip = readDataZip;
1027
1018
  function readDataRLE(reader, pixelData, width, height, _bitDepth, step, offsets, large) {
1028
- var data = pixelData && pixelData.data;
1029
- var lengths;
1019
+ const data = pixelData && pixelData.data;
1020
+ let lengths;
1030
1021
  if (large) {
1031
1022
  lengths = new Uint32Array(offsets.length * height);
1032
- for (var o = 0, li = 0; o < offsets.length; o++) {
1033
- for (var y = 0; y < height; y++, li++) {
1023
+ for (let o = 0, li = 0; o < offsets.length; o++) {
1024
+ for (let y = 0; y < height; y++, li++) {
1034
1025
  lengths[li] = readUint32(reader);
1035
1026
  }
1036
1027
  }
1037
1028
  }
1038
1029
  else {
1039
1030
  lengths = new Uint16Array(offsets.length * height);
1040
- for (var o = 0, li = 0; o < offsets.length; o++) {
1041
- for (var y = 0; y < height; y++, li++) {
1031
+ for (let o = 0, li = 0; o < offsets.length; o++) {
1032
+ for (let y = 0; y < height; y++, li++) {
1042
1033
  lengths[li] = readUint16(reader);
1043
1034
  }
1044
1035
  }
1045
1036
  }
1046
1037
  // if (bitDepth !== 1 && bitDepth !== 8) throw new Error(`Invalid bit depth (${bitDepth})`);
1047
- var extraLimit = (step - 1) | 0; // 3 for rgb, 4 for cmyk
1048
- for (var c = 0, li = 0; c < offsets.length; c++) {
1049
- var offset = offsets[c] | 0;
1050
- var extra = c > extraLimit || offset > extraLimit;
1038
+ const extraLimit = (step - 1) | 0; // 3 for rgb, 4 for cmyk
1039
+ for (let c = 0, li = 0; c < offsets.length; c++) {
1040
+ const offset = offsets[c] | 0;
1041
+ const extra = c > extraLimit || offset > extraLimit;
1051
1042
  if (!data || extra) {
1052
- for (var y = 0; y < height; y++, li++) {
1043
+ for (let y = 0; y < height; y++, li++) {
1053
1044
  skipBytes(reader, lengths[li]);
1054
1045
  }
1055
1046
  }
1056
1047
  else {
1057
- for (var y = 0, p = offset | 0; y < height; y++, li++) {
1058
- var length_2 = lengths[li];
1059
- var buffer = readBytes(reader, length_2);
1060
- for (var i = 0, x = 0; i < length_2; i++) {
1061
- var header = buffer[i];
1048
+ for (let y = 0, p = offset | 0; y < height; y++, li++) {
1049
+ const length = lengths[li];
1050
+ const buffer = readBytes(reader, length);
1051
+ for (let i = 0, x = 0; i < length; i++) {
1052
+ let header = buffer[i];
1062
1053
  if (header > 128) {
1063
- var value = buffer[++i];
1054
+ const value = buffer[++i];
1064
1055
  header = (256 - header) | 0;
1065
- for (var j = 0; j <= header && x < width; j = (j + 1) | 0, x = (x + 1) | 0) {
1056
+ for (let j = 0; j <= header && x < width; j = (j + 1) | 0, x = (x + 1) | 0) {
1066
1057
  data[p] = value;
1067
1058
  p = (p + step) | 0;
1068
1059
  }
1069
1060
  }
1070
1061
  else if (header < 128) {
1071
- for (var j = 0; j <= header && x < width; j = (j + 1) | 0, x = (x + 1) | 0) {
1062
+ for (let j = 0; j <= header && x < width; j = (j + 1) | 0, x = (x + 1) | 0) {
1072
1063
  data[p] = buffer[++i];
1073
1064
  p = (p + step) | 0;
1074
1065
  }
@@ -1084,10 +1075,8 @@ function readDataRLE(reader, pixelData, width, height, _bitDepth, step, offsets,
1084
1075
  }
1085
1076
  }
1086
1077
  exports.readDataRLE = readDataRLE;
1087
- function readSection(reader, round, func, skipEmpty, eightBytes) {
1088
- if (skipEmpty === void 0) { skipEmpty = true; }
1089
- if (eightBytes === void 0) { eightBytes = false; }
1090
- var length = readUint32(reader);
1078
+ function readSection(reader, round, func, skipEmpty = true, eightBytes = false) {
1079
+ let length = readUint32(reader);
1091
1080
  if (eightBytes) {
1092
1081
  if (length !== 0)
1093
1082
  throw new Error('Sizes larger than 4GB are not supported');
@@ -1095,16 +1084,16 @@ function readSection(reader, round, func, skipEmpty, eightBytes) {
1095
1084
  }
1096
1085
  if (length <= 0 && skipEmpty)
1097
1086
  return undefined;
1098
- var end = reader.offset + length;
1087
+ let end = reader.offset + length;
1099
1088
  if (end > reader.view.byteLength)
1100
1089
  throw new Error('Section exceeds file size');
1101
- var result = func(function () { return end - reader.offset; });
1090
+ const result = func(() => end - reader.offset);
1102
1091
  if (reader.offset !== end) {
1103
1092
  if (reader.offset > end) {
1104
1093
  warnOrThrow(reader, 'Exceeded section limits');
1105
1094
  }
1106
1095
  else {
1107
- warnOrThrow(reader, "Unread section data"); // : ${end - reader.offset} bytes at 0x${reader.offset.toString(16)}`);
1096
+ warnOrThrow(reader, `Unread section data`); // : ${end - reader.offset} bytes at 0x${reader.offset.toString(16)}`);
1108
1097
  }
1109
1098
  }
1110
1099
  while (length % round) {
@@ -1117,42 +1106,42 @@ function readSection(reader, round, func, skipEmpty, eightBytes) {
1117
1106
  }
1118
1107
  exports.readSection = readSection;
1119
1108
  function readColor(reader) {
1120
- var colorSpace = readUint16(reader);
1109
+ const colorSpace = readUint16(reader);
1121
1110
  switch (colorSpace) {
1122
1111
  case 0 /* ColorSpace.RGB */: {
1123
- var r = readUint16(reader) / 257;
1124
- var g = readUint16(reader) / 257;
1125
- var b = readUint16(reader) / 257;
1112
+ const r = readUint16(reader) / 257;
1113
+ const g = readUint16(reader) / 257;
1114
+ const b = readUint16(reader) / 257;
1126
1115
  skipBytes(reader, 2);
1127
- return { r: r, g: g, b: b };
1116
+ return { r, g, b };
1128
1117
  }
1129
1118
  case 1 /* ColorSpace.HSB */: {
1130
- var h = readUint16(reader) / 0xffff;
1131
- var s = readUint16(reader) / 0xffff;
1132
- var b = readUint16(reader) / 0xffff;
1119
+ const h = readUint16(reader) / 0xffff;
1120
+ const s = readUint16(reader) / 0xffff;
1121
+ const b = readUint16(reader) / 0xffff;
1133
1122
  skipBytes(reader, 2);
1134
- return { h: h, s: s, b: b };
1123
+ return { h, s, b };
1135
1124
  }
1136
1125
  case 2 /* ColorSpace.CMYK */: {
1137
- var c = readUint16(reader) / 257;
1138
- var m = readUint16(reader) / 257;
1139
- var y = readUint16(reader) / 257;
1140
- var k = readUint16(reader) / 257;
1141
- return { c: c, m: m, y: y, k: k };
1126
+ const c = readUint16(reader) / 257;
1127
+ const m = readUint16(reader) / 257;
1128
+ const y = readUint16(reader) / 257;
1129
+ const k = readUint16(reader) / 257;
1130
+ return { c, m, y, k };
1142
1131
  }
1143
1132
  case 7 /* ColorSpace.Lab */: {
1144
- var l = readInt16(reader) / 10000;
1145
- var ta = readInt16(reader);
1146
- var tb = readInt16(reader);
1147
- var a = ta < 0 ? (ta / 12800) : (ta / 12700);
1148
- var b = tb < 0 ? (tb / 12800) : (tb / 12700);
1133
+ const l = readInt16(reader) / 10000;
1134
+ const ta = readInt16(reader);
1135
+ const tb = readInt16(reader);
1136
+ const a = ta < 0 ? (ta / 12800) : (ta / 12700);
1137
+ const b = tb < 0 ? (tb / 12800) : (tb / 12700);
1149
1138
  skipBytes(reader, 2);
1150
- return { l: l, a: a, b: b };
1139
+ return { l, a, b };
1151
1140
  }
1152
1141
  case 8 /* ColorSpace.Grayscale */: {
1153
- var k = readUint16(reader) * 255 / 10000;
1142
+ const k = readUint16(reader) * 255 / 10000;
1154
1143
  skipBytes(reader, 6);
1155
- return { k: k };
1144
+ return { k };
1156
1145
  }
1157
1146
  default:
1158
1147
  throw new Error('Invalid color space');
@@ -1160,25 +1149,25 @@ function readColor(reader) {
1160
1149
  }
1161
1150
  exports.readColor = readColor;
1162
1151
  function readPattern(reader) {
1163
- var length = readUint32(reader);
1152
+ let length = readUint32(reader);
1164
1153
  while (length % 4)
1165
1154
  length++;
1166
- var end = reader.offset + length;
1167
- var version = readUint32(reader);
1155
+ const end = reader.offset + length;
1156
+ const version = readUint32(reader);
1168
1157
  if (version !== 1)
1169
- throw new Error("Invalid pattern version: ".concat(version));
1170
- var colorMode = readUint32(reader);
1171
- var x = readInt16(reader);
1172
- var y = readInt16(reader);
1158
+ throw new Error(`Invalid pattern version: ${version}`);
1159
+ const colorMode = readUint32(reader);
1160
+ const x = readInt16(reader);
1161
+ const y = readInt16(reader);
1173
1162
  // we only support RGB and grayscale for now
1174
1163
  if (colorMode !== 3 /* ColorMode.RGB */ && colorMode !== 1 /* ColorMode.Grayscale */ && colorMode !== 2 /* ColorMode.Indexed */) {
1175
- throw new Error("Unsupported pattern color mode: ".concat(colorMode));
1164
+ throw new Error(`Unsupported pattern color mode: ${colorMode}`);
1176
1165
  }
1177
- var name = readUnicodeString(reader);
1178
- var id = readPascalString(reader, 1);
1179
- var palette = [];
1166
+ let name = readUnicodeString(reader);
1167
+ const id = readPascalString(reader, 1);
1168
+ const palette = [];
1180
1169
  if (colorMode === 2 /* ColorMode.Indexed */) {
1181
- for (var i = 0; i < 256; i++) {
1170
+ for (let i = 0; i < 256; i++) {
1182
1171
  palette.push({
1183
1172
  r: readUint8(reader),
1184
1173
  g: readUint8(reader),
@@ -1188,58 +1177,58 @@ function readPattern(reader) {
1188
1177
  skipBytes(reader, 4); // no idea what this is
1189
1178
  }
1190
1179
  // virtual memory array list
1191
- var version2 = readUint32(reader);
1180
+ const version2 = readUint32(reader);
1192
1181
  if (version2 !== 3)
1193
- throw new Error("Invalid pattern VMAL version: ".concat(version2));
1182
+ throw new Error(`Invalid pattern VMAL version: ${version2}`);
1194
1183
  readUint32(reader); // length
1195
- var top = readUint32(reader);
1196
- var left = readUint32(reader);
1197
- var bottom = readUint32(reader);
1198
- var right = readUint32(reader);
1199
- var channelsCount = readUint32(reader);
1200
- var width = right - left;
1201
- var height = bottom - top;
1202
- var data = new Uint8Array(width * height * 4);
1203
- for (var i = 3; i < data.byteLength; i += 4) {
1184
+ const top = readUint32(reader);
1185
+ const left = readUint32(reader);
1186
+ const bottom = readUint32(reader);
1187
+ const right = readUint32(reader);
1188
+ const channelsCount = readUint32(reader);
1189
+ const width = right - left;
1190
+ const height = bottom - top;
1191
+ const data = new Uint8Array(width * height * 4);
1192
+ for (let i = 3; i < data.byteLength; i += 4) {
1204
1193
  data[i] = 255;
1205
1194
  }
1206
- for (var i = 0, ch = 0; i < (channelsCount + 2); i++) {
1207
- var has = readUint32(reader);
1195
+ for (let i = 0, ch = 0; i < (channelsCount + 2); i++) {
1196
+ const has = readUint32(reader);
1208
1197
  if (!has)
1209
1198
  continue;
1210
- var length_3 = readUint32(reader);
1211
- var pixelDepth = readUint32(reader);
1212
- var ctop = readUint32(reader);
1213
- var cleft = readUint32(reader);
1214
- var cbottom = readUint32(reader);
1215
- var cright = readUint32(reader);
1216
- var pixelDepth2 = readUint16(reader);
1217
- var compressionMode = readUint8(reader); // 0 - raw, 1 - rle
1218
- var dataLength = length_3 - (4 + 16 + 2 + 1);
1219
- var cdata = readBytes(reader, dataLength);
1199
+ const length = readUint32(reader);
1200
+ const pixelDepth = readUint32(reader);
1201
+ const ctop = readUint32(reader);
1202
+ const cleft = readUint32(reader);
1203
+ const cbottom = readUint32(reader);
1204
+ const cright = readUint32(reader);
1205
+ const pixelDepth2 = readUint16(reader);
1206
+ const compressionMode = readUint8(reader); // 0 - raw, 1 - rle
1207
+ const dataLength = length - (4 + 16 + 2 + 1);
1208
+ const cdata = readBytes(reader, dataLength);
1220
1209
  if (pixelDepth !== 8 || pixelDepth2 !== 8) {
1221
1210
  throw new Error('16bit pixel depth not supported for patterns');
1222
1211
  }
1223
- var w = cright - cleft;
1224
- var h = cbottom - ctop;
1225
- var ox = cleft - left;
1226
- var oy = ctop - top;
1212
+ const w = cright - cleft;
1213
+ const h = cbottom - ctop;
1214
+ const ox = cleft - left;
1215
+ const oy = ctop - top;
1227
1216
  if (compressionMode === 0) {
1228
1217
  if (colorMode === 3 /* ColorMode.RGB */ && ch < 3) {
1229
- for (var y_1 = 0; y_1 < h; y_1++) {
1230
- for (var x_1 = 0; x_1 < w; x_1++) {
1231
- var src = x_1 + y_1 * w;
1232
- var dst = (ox + x_1 + (y_1 + oy) * width) * 4;
1218
+ for (let y = 0; y < h; y++) {
1219
+ for (let x = 0; x < w; x++) {
1220
+ const src = x + y * w;
1221
+ const dst = (ox + x + (y + oy) * width) * 4;
1233
1222
  data[dst + ch] = cdata[src];
1234
1223
  }
1235
1224
  }
1236
1225
  }
1237
1226
  if (colorMode === 1 /* ColorMode.Grayscale */ && ch < 1) {
1238
- for (var y_2 = 0; y_2 < h; y_2++) {
1239
- for (var x_2 = 0; x_2 < w; x_2++) {
1240
- var src = x_2 + y_2 * w;
1241
- var dst = (ox + x_2 + (y_2 + oy) * width) * 4;
1242
- var value = cdata[src];
1227
+ for (let y = 0; y < h; y++) {
1228
+ for (let x = 0; x < w; x++) {
1229
+ const src = x + y * w;
1230
+ const dst = (ox + x + (y + oy) * width) * 4;
1231
+ const value = cdata[src];
1243
1232
  data[dst + 0] = value;
1244
1233
  data[dst + 1] = value;
1245
1234
  data[dst + 2] = value;
@@ -1252,9 +1241,9 @@ function readPattern(reader) {
1252
1241
  }
1253
1242
  }
1254
1243
  else if (compressionMode === 1) {
1255
- var pixelData = { data: data, width: width, height: height };
1256
- var tempData = { data: new Uint8Array(w * h), width: w, height: h };
1257
- var cdataReader = createReader(cdata.buffer, cdata.byteOffset, cdata.byteLength);
1244
+ const pixelData = { data, width, height };
1245
+ const tempData = { data: new Uint8Array(w * h), width: w, height: h };
1246
+ const cdataReader = createReader(cdata.buffer, cdata.byteOffset, cdata.byteLength);
1258
1247
  if (colorMode === 3 /* ColorMode.RGB */ && ch < 3) {
1259
1248
  readDataRLE(cdataReader, tempData, w, h, 8, 1, [0], false);
1260
1249
  copyChannelToRGBA(tempData, pixelData, ox, oy, ch);
@@ -1275,18 +1264,18 @@ function readPattern(reader) {
1275
1264
  ch++;
1276
1265
  }
1277
1266
  reader.offset = end;
1278
- return { id: id, name: name, x: x, y: y, bounds: { x: left, y: top, w: width, h: height }, data: data };
1267
+ return { id, name, x, y, bounds: { x: left, y: top, w: width, h: height }, data };
1279
1268
  }
1280
1269
  exports.readPattern = readPattern;
1281
1270
  function copyChannelToRGBA(srcData, dstData, ox, oy, offset) {
1282
- var w = srcData.width;
1283
- var h = srcData.height;
1284
- var width = dstData.width;
1285
- for (var y = 0; y < h; y++) {
1286
- for (var x = 0; x < w; x++) {
1287
- var src = x + y * w;
1288
- var dst = (ox + x + (y + oy) * width) * 4;
1289
- var value = srcData.data[src];
1271
+ const w = srcData.width;
1272
+ const h = srcData.height;
1273
+ const width = dstData.width;
1274
+ for (let y = 0; y < h; y++) {
1275
+ for (let x = 0; x < w; x++) {
1276
+ const src = x + y * w;
1277
+ const dst = (ox + x + (y + oy) * width) * 4;
1278
+ const value = srcData.data[src];
1290
1279
  dstData.data[dst + offset] = value;
1291
1280
  }
1292
1281
  }