ag-psd 25.0.0 → 27.0.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 (58) hide show
  1. package/.v8-cache/v22.13.1-x64-00250a7c/4511bacf +0 -0
  2. package/.v8-cache/v22.13.1-x64-00250a7c/acc36e66 +0 -0
  3. package/.v8-cache/v22.13.1-x64-00250a7c/b3c2fab7 +0 -0
  4. package/.v8-cache/v22.13.1-x64-00250a7c/c314aece +0 -0
  5. package/.v8-cache/v22.13.1-x64-00250a7c/cfc49f4f +0 -0
  6. package/.v8-cache/v22.13.1-x64-00250a7c/d02dd6f7 +0 -0
  7. package/.v8-cache/v22.13.1-x64-00250a7c/e03e2acd +0 -0
  8. package/CHANGELOG.md +6 -0
  9. package/{TODO → TODO.md} +46 -0
  10. package/dist/additionalInfo.js +86 -54
  11. package/dist/additionalInfo.js.map +1 -1
  12. package/dist/bundle.js +683 -194
  13. package/dist/descriptor.js +4 -4
  14. package/dist/descriptor.js.map +1 -1
  15. package/dist/engineData2.d.ts +2 -1
  16. package/dist/engineData2.js +59 -3
  17. package/dist/engineData2.js.map +1 -1
  18. package/dist/helpers.d.ts +1 -0
  19. package/dist/helpers.js.map +1 -1
  20. package/dist/imageResources.js +39 -5
  21. package/dist/imageResources.js.map +1 -1
  22. package/dist/psd.d.ts +26 -0
  23. package/dist/psd.js.map +1 -1
  24. package/dist/psdReader.js +29 -31
  25. package/dist/psdReader.js.map +1 -1
  26. package/dist/psdWriter.js +79 -67
  27. package/dist/psdWriter.js.map +1 -1
  28. package/dist/text.d.ts +13 -2
  29. package/dist/text.js.map +1 -1
  30. package/dist-es/additionalInfo.js +86 -54
  31. package/dist-es/additionalInfo.js.map +1 -1
  32. package/dist-es/descriptor.js +4 -4
  33. package/dist-es/descriptor.js.map +1 -1
  34. package/dist-es/engineData2.d.ts +2 -1
  35. package/dist-es/engineData2.js +59 -3
  36. package/dist-es/engineData2.js.map +1 -1
  37. package/dist-es/helpers.d.ts +1 -0
  38. package/dist-es/helpers.js.map +1 -1
  39. package/dist-es/imageResources.js +41 -7
  40. package/dist-es/imageResources.js.map +1 -1
  41. package/dist-es/psd.d.ts +26 -0
  42. package/dist-es/psd.js.map +1 -1
  43. package/dist-es/psdReader.js +29 -31
  44. package/dist-es/psdReader.js.map +1 -1
  45. package/dist-es/psdWriter.js +79 -67
  46. package/dist-es/psdWriter.js.map +1 -1
  47. package/dist-es/text.d.ts +13 -2
  48. package/dist-es/text.js.map +1 -1
  49. package/package.json +1 -1
  50. package/src/additionalInfo.ts +91 -55
  51. package/src/descriptor.ts +5 -4
  52. package/src/engineData2.ts +62 -4
  53. package/src/helpers.ts +1 -0
  54. package/src/imageResources.ts +46 -20
  55. package/src/psd.ts +30 -0
  56. package/src/psdReader.ts +32 -34
  57. package/src/psdWriter.ts +75 -69
  58. package/src/text.ts +16 -2
package/dist/bundle.js CHANGED
@@ -298,7 +298,7 @@ function readAbr(buffer, options) {
298
298
  }
299
299
  exports.readAbr = readAbr;
300
300
 
301
- },{"./descriptor":4,"./psdReader":11}],2:[function(require,module,exports){
301
+ },{"./descriptor":4,"./psdReader":12}],2:[function(require,module,exports){
302
302
  "use strict";
303
303
  var __assign = (this && this.__assign) || function () {
304
304
  __assign = Object.assign || function(t) {
@@ -321,6 +321,7 @@ var psdWriter_1 = require("./psdWriter");
321
321
  var descriptor_1 = require("./descriptor");
322
322
  var engineData_1 = require("./engineData");
323
323
  var text_1 = require("./text");
324
+ var engineData2_1 = require("./engineData2");
324
325
  var fromAtoZ = 'abcdefghijklmnopqrstuvwxyz';
325
326
  exports.infoHandlers = [];
326
327
  exports.infoHandlersMap = {};
@@ -640,58 +641,55 @@ addHandler('vogk', hasKey('vectorOrigination'), function (reader, target, left)
640
641
  var desc = { keyDescriptorList: [] };
641
642
  for (var i = 0; i < orig.keyDescriptorList.length; i++) {
642
643
  var item = orig.keyDescriptorList[i];
643
- if (item.keyShapeInvalidated) {
644
- desc.keyDescriptorList.push({ keyShapeInvalidated: true, keyOriginIndex: i });
644
+ desc.keyDescriptorList.push({}); // we're adding keyOriginIndex at the end
645
+ var out = desc.keyDescriptorList[desc.keyDescriptorList.length - 1];
646
+ if (item.keyOriginType != null)
647
+ out.keyOriginType = item.keyOriginType;
648
+ if (item.keyOriginResolution != null)
649
+ out.keyOriginResolution = item.keyOriginResolution;
650
+ var radii = item.keyOriginRRectRadii;
651
+ if (radii) {
652
+ out.keyOriginRRectRadii = {
653
+ unitValueQuadVersion: 1,
654
+ topRight: (0, descriptor_1.unitsValue)(radii.topRight, 'topRight'),
655
+ topLeft: (0, descriptor_1.unitsValue)(radii.topLeft, 'topLeft'),
656
+ bottomLeft: (0, descriptor_1.unitsValue)(radii.bottomLeft, 'bottomLeft'),
657
+ bottomRight: (0, descriptor_1.unitsValue)(radii.bottomRight, 'bottomRight'),
658
+ };
645
659
  }
646
- else {
647
- desc.keyDescriptorList.push({}); // we're adding keyOriginIndex at the end
648
- var out = desc.keyDescriptorList[desc.keyDescriptorList.length - 1];
649
- if (item.keyOriginType != null)
650
- out.keyOriginType = item.keyOriginType;
651
- if (item.keyOriginResolution != null)
652
- out.keyOriginResolution = item.keyOriginResolution;
653
- var radii = item.keyOriginRRectRadii;
654
- if (radii) {
655
- out.keyOriginRRectRadii = {
656
- unitValueQuadVersion: 1,
657
- topRight: (0, descriptor_1.unitsValue)(radii.topRight, 'topRight'),
658
- topLeft: (0, descriptor_1.unitsValue)(radii.topLeft, 'topLeft'),
659
- bottomLeft: (0, descriptor_1.unitsValue)(radii.bottomLeft, 'bottomLeft'),
660
- bottomRight: (0, descriptor_1.unitsValue)(radii.bottomRight, 'bottomRight'),
661
- };
662
- }
663
- var box = item.keyOriginShapeBoundingBox;
664
- if (box) {
665
- out.keyOriginShapeBBox = {
666
- unitValueQuadVersion: 1,
667
- 'Top ': (0, descriptor_1.unitsValue)(box.top, 'top'),
668
- Left: (0, descriptor_1.unitsValue)(box.left, 'left'),
669
- Btom: (0, descriptor_1.unitsValue)(box.bottom, 'bottom'),
670
- Rght: (0, descriptor_1.unitsValue)(box.right, 'right'),
671
- };
672
- }
673
- var corners = item.keyOriginBoxCorners;
674
- if (corners && corners.length === 4) {
675
- out.keyOriginBoxCorners = {
676
- rectangleCornerA: { Hrzn: corners[0].x, Vrtc: corners[0].y },
677
- rectangleCornerB: { Hrzn: corners[1].x, Vrtc: corners[1].y },
678
- rectangleCornerC: { Hrzn: corners[2].x, Vrtc: corners[2].y },
679
- rectangleCornerD: { Hrzn: corners[3].x, Vrtc: corners[3].y },
680
- };
681
- }
682
- var transform = item.transform;
683
- if (transform && transform.length === 6) {
684
- out.Trnf = {
685
- xx: transform[0],
686
- xy: transform[1],
687
- yx: transform[2],
688
- yy: transform[3],
689
- tx: transform[4],
690
- ty: transform[5],
691
- };
692
- }
693
- out.keyOriginIndex = i;
660
+ var box = item.keyOriginShapeBoundingBox;
661
+ if (box) {
662
+ out.keyOriginShapeBBox = {
663
+ unitValueQuadVersion: 1,
664
+ 'Top ': (0, descriptor_1.unitsValue)(box.top, 'top'),
665
+ Left: (0, descriptor_1.unitsValue)(box.left, 'left'),
666
+ Btom: (0, descriptor_1.unitsValue)(box.bottom, 'bottom'),
667
+ Rght: (0, descriptor_1.unitsValue)(box.right, 'right'),
668
+ };
669
+ }
670
+ var corners = item.keyOriginBoxCorners;
671
+ if (corners && corners.length === 4) {
672
+ out.keyOriginBoxCorners = {
673
+ rectangleCornerA: { Hrzn: corners[0].x, Vrtc: corners[0].y },
674
+ rectangleCornerB: { Hrzn: corners[1].x, Vrtc: corners[1].y },
675
+ rectangleCornerC: { Hrzn: corners[2].x, Vrtc: corners[2].y },
676
+ rectangleCornerD: { Hrzn: corners[3].x, Vrtc: corners[3].y },
677
+ };
678
+ }
679
+ var transform = item.transform;
680
+ if (transform && transform.length === 6) {
681
+ out.Trnf = {
682
+ xx: transform[0],
683
+ xy: transform[1],
684
+ yx: transform[2],
685
+ yy: transform[3],
686
+ tx: transform[4],
687
+ ty: transform[5],
688
+ };
694
689
  }
690
+ if (item.keyShapeInvalidated != null)
691
+ out.keyShapeInvalidated = item.keyShapeInvalidated;
692
+ out.keyOriginIndex = i;
695
693
  }
696
694
  (0, psdWriter_1.writeInt32)(writer, 1); // version
697
695
  (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
@@ -1163,7 +1161,13 @@ function isQuiltWarp(warp) {
1163
1161
  }
1164
1162
  function encodeWarp(warp) {
1165
1163
  var bounds = warp.bounds;
1166
- var desc = __assign(__assign({ warpStyle: descriptor_1.warpStyle.encode(warp.style) }, (warp.values ? { warpValues: warp.values } : { warpValue: warp.value || 0 })), { warpPerspective: warp.perspective || 0, warpPerspectiveOther: warp.perspectiveOther || 0, warpRotate: descriptor_1.Ornt.encode(warp.rotate), bounds: {
1164
+ var desc = __assign(__assign({ warpStyle: descriptor_1.warpStyle.encode(warp.style) }, (warp.values ? { warpValues: warp.values } : { warpValue: warp.value || 0 })), { warpPerspective: warp.perspective || 0, warpPerspectiveOther: warp.perspectiveOther || 0, warpRotate: descriptor_1.Ornt.encode(warp.rotate), bounds: /*1 ? { // testing
1165
+ _classID: 'classFloatRect',
1166
+ 'Top ': bounds && bounds.top && bounds.top.value || 0,
1167
+ Left: bounds && bounds.left && bounds.left.value || 0,
1168
+ Btom: bounds && bounds.bottom && bounds.bottom.value || 0,
1169
+ Rght: bounds && bounds.right && bounds.right.value || 0,
1170
+ } :*/ {
1167
1171
  'Top ': (0, descriptor_1.unitsValue)(bounds && bounds.top || { units: 'Pixels', value: 0 }, 'bounds.top'),
1168
1172
  Left: (0, descriptor_1.unitsValue)(bounds && bounds.left || { units: 'Pixels', value: 0 }, 'bounds.left'),
1169
1173
  Btom: (0, descriptor_1.unitsValue)(bounds && bounds.bottom || { units: 'Pixels', value: 0 }, 'bounds.bottom'),
@@ -1728,6 +1732,7 @@ function serializeFilterFXItem(f) {
1728
1732
  'Rds ': uvRadius(f.filter),
1729
1733
  }, filterID: 697 });
1730
1734
  case 'gaussian blur': return __assign(__assign({}, base), { Fltr: {
1735
+ // _name: '高斯模糊', // Testing
1731
1736
  _name: 'Gaussian Blur',
1732
1737
  _classID: 'GsnB',
1733
1738
  'Rds ': uvRadius(f.filter),
@@ -3386,11 +3391,38 @@ addHandler('CgEd', function (target) {
3386
3391
  throw new Error('Unhandled CgEd case');
3387
3392
  }
3388
3393
  });
3389
- addHandler('Txt2', hasKey('engineData'), function (reader, target, left) {
3394
+ function getTextLayersSortedByIndex(psd) {
3395
+ var layers = [];
3396
+ function collect(layer) {
3397
+ var _a;
3398
+ if (layer.children) {
3399
+ for (var _i = 0, _b = layer.children; _i < _b.length; _i++) {
3400
+ var child = _b[_i];
3401
+ if (((_a = child.text) === null || _a === void 0 ? void 0 : _a.index) !== undefined) {
3402
+ layers[child.text.index] = child;
3403
+ }
3404
+ collect(child);
3405
+ }
3406
+ }
3407
+ }
3408
+ collect(psd);
3409
+ return layers;
3410
+ }
3411
+ addHandler('Txt2', hasKey('engineData'), function (reader, target, left, psd) {
3390
3412
  var data = (0, psdReader_1.readBytes)(reader, left());
3391
3413
  target.engineData = (0, base64_js_1.fromByteArray)(data);
3392
- // const engineData = parseEngineData(data);
3393
- // const engineData2 = decodeEngineData2(engineData);
3414
+ var layersByIndex = getTextLayersSortedByIndex(psd);
3415
+ var engineData = (0, engineData_1.parseEngineData)(data);
3416
+ var engineData2 = (0, engineData2_1.decodeEngineData2)(engineData);
3417
+ var TextFrameSet = engineData2.ResourceDict.TextFrameSet;
3418
+ if (TextFrameSet) {
3419
+ for (var i = 0; i < TextFrameSet.length; i++) {
3420
+ var layer = layersByIndex[i];
3421
+ if (TextFrameSet[i].path && (layer === null || layer === void 0 ? void 0 : layer.text)) {
3422
+ layer.text.textPath = TextFrameSet[i].path;
3423
+ }
3424
+ }
3425
+ }
3394
3426
  // console.log(require('util').inspect(engineData, false, 99, true));
3395
3427
  // require('fs').writeFileSync('test_data.bin', data);
3396
3428
  // require('fs').writeFileSync('test_data.txt', require('util').inspect(engineData, false, 99, false), 'utf8');
@@ -3660,7 +3692,7 @@ addHandler('tsly', hasKey('transparencyShapesLayer'), function (reader, target)
3660
3692
  (0, psdWriter_1.writeZeros)(writer, 3);
3661
3693
  });
3662
3694
 
3663
- },{"./descriptor":4,"./effectsHelpers":5,"./engineData":6,"./helpers":7,"./psdReader":11,"./psdWriter":12,"./text":13,"base64-js":15}],3:[function(require,module,exports){
3695
+ },{"./descriptor":4,"./effectsHelpers":5,"./engineData":6,"./engineData2":7,"./helpers":8,"./psdReader":12,"./psdWriter":13,"./text":14,"base64-js":16}],3:[function(require,module,exports){
3664
3696
  "use strict";
3665
3697
  var __assign = (this && this.__assign) || function () {
3666
3698
  __assign = Object.assign || function(t) {
@@ -3709,7 +3741,7 @@ function readCsh(buffer) {
3709
3741
  }
3710
3742
  exports.readCsh = readCsh;
3711
3743
 
3712
- },{"./additionalInfo":2,"./psdReader":11}],4:[function(require,module,exports){
3744
+ },{"./additionalInfo":2,"./psdReader":12}],4:[function(require,module,exports){
3713
3745
  "use strict";
3714
3746
  var __assign = (this && this.__assign) || function () {
3715
3747
  __assign = Object.assign || function(t) {
@@ -3756,12 +3788,13 @@ function makeType(name, classID) {
3756
3788
  return { name: name, classID: classID };
3757
3789
  }
3758
3790
  var nullType = makeType('', 'null');
3791
+ var USE_CHINESE = false; // Testing
3759
3792
  var fieldToExtType = {
3760
3793
  strokeStyleContent: makeType('', 'solidColorLayer'),
3761
- // printProofSetup: makeType('校样设置', 'proofSetup'), // TESTING
3762
- printProofSetup: makeType('Proof Setup', 'proofSetup'),
3794
+ printProofSetup: makeType(USE_CHINESE ? '校样设置' : 'Proof Setup', 'proofSetup'),
3795
+ Grad: makeType(USE_CHINESE ? '渐变' : 'Gradient', 'Grdn'),
3796
+ Trnf: makeType(USE_CHINESE ? '变换' : 'Transform', 'Trnf'),
3763
3797
  patternFill: makeType('', 'patternFill'),
3764
- Grad: makeType('Gradient', 'Grdn'),
3765
3798
  ebbl: makeType('', 'ebbl'),
3766
3799
  SoFi: makeType('', 'SoFi'),
3767
3800
  GrFl: makeType('', 'GrFl'),
@@ -3803,7 +3836,6 @@ var fieldToExtType = {
3803
3836
  rectangleCornerC: makeType('', 'Pnt '),
3804
3837
  rectangleCornerD: makeType('', 'Pnt '),
3805
3838
  compInfo: nullType,
3806
- Trnf: makeType('Transform', 'Trnf'),
3807
3839
  quiltWarp: makeType('', 'quiltWarp'),
3808
3840
  generatorSettings: nullType,
3809
3841
  crema: nullType,
@@ -5729,7 +5761,7 @@ exports.presetKindType = (0, helpers_1.createEnum)('presetKindType', 'presetKind
5729
5761
  default: 'presetKindDefault',
5730
5762
  });
5731
5763
 
5732
- },{"./helpers":7,"./psdReader":11,"./psdWriter":12}],5:[function(require,module,exports){
5764
+ },{"./helpers":8,"./psdReader":12,"./psdWriter":13}],5:[function(require,module,exports){
5733
5765
  "use strict";
5734
5766
  Object.defineProperty(exports, "__esModule", { value: true });
5735
5767
  exports.writeEffects = exports.readEffects = void 0;
@@ -6039,7 +6071,7 @@ function writeEffects(writer, effects) {
6039
6071
  }
6040
6072
  exports.writeEffects = writeEffects;
6041
6073
 
6042
- },{"./helpers":7,"./psdReader":11,"./psdWriter":12}],6:[function(require,module,exports){
6074
+ },{"./helpers":8,"./psdReader":12,"./psdWriter":13}],6:[function(require,module,exports){
6043
6075
  "use strict";
6044
6076
  Object.defineProperty(exports, "__esModule", { value: true });
6045
6077
  exports.serializeEngineData = exports.parseEngineData = void 0;
@@ -6379,6 +6411,419 @@ exports.serializeEngineData = serializeEngineData;
6379
6411
 
6380
6412
  },{}],7:[function(require,module,exports){
6381
6413
  "use strict";
6414
+ /// Engine data 2 experiments
6415
+ // /test/engineData2.json:1109 is character codes
6416
+ Object.defineProperty(exports, "__esModule", { value: true });
6417
+ exports.decodeEngineData2 = void 0;
6418
+ var keysColor = {
6419
+ '0': {
6420
+ uproot: true,
6421
+ children: {
6422
+ '0': { name: 'Type' },
6423
+ '1': { name: 'Values' },
6424
+ },
6425
+ },
6426
+ };
6427
+ var keysStyleSheet = {
6428
+ '0': { name: 'Font' },
6429
+ '1': { name: 'FontSize' },
6430
+ '2': { name: 'FauxBold' },
6431
+ '3': { name: 'FauxItalic' },
6432
+ '4': { name: 'AutoLeading' },
6433
+ '5': { name: 'Leading' },
6434
+ '6': { name: 'HorizontalScale' },
6435
+ '7': { name: 'VerticalScale' },
6436
+ '8': { name: 'Tracking' },
6437
+ '9': { name: 'BaselineShift' },
6438
+ // '10': ???
6439
+ '11': { name: 'Kerning?' },
6440
+ '12': { name: 'FontCaps' },
6441
+ '13': { name: 'FontBaseline' },
6442
+ '15': { name: 'Strikethrough?' },
6443
+ '16': { name: 'Underline?' },
6444
+ '18': { name: 'Ligatures' },
6445
+ '19': { name: 'DLigatures' },
6446
+ // '20': ???
6447
+ // '21': ???
6448
+ // '22': ???
6449
+ '23': { name: 'Fractions' },
6450
+ '24': { name: 'Ordinals' },
6451
+ // '25': ???
6452
+ // '26': ???
6453
+ // '27': ???
6454
+ '28': { name: 'StylisticAlternates' },
6455
+ // '29': ???
6456
+ '30': { name: 'OldStyle?' },
6457
+ '35': { name: 'BaselineDirection' },
6458
+ '38': { name: 'Language' },
6459
+ '52': { name: 'NoBreak' },
6460
+ '53': { name: 'FillColor', children: keysColor },
6461
+ '54': { name: 'StrokeColor', children: keysColor },
6462
+ '55': { children: { '99': { uproot: true } } },
6463
+ // '68': ???
6464
+ // '70': ???
6465
+ // '71': ???
6466
+ // '72': ???
6467
+ // '73': ???
6468
+ '79': { children: keysColor },
6469
+ // '85': ???
6470
+ // '87': ???
6471
+ // '88': ???
6472
+ };
6473
+ var keysParagraph = {
6474
+ '0': { name: 'Justification' },
6475
+ '1': { name: 'FirstLineIndent' },
6476
+ '2': { name: 'StartIndent' },
6477
+ '3': { name: 'EndIndent' },
6478
+ '4': { name: 'SpaceBefore' },
6479
+ '5': { name: 'SpaceAfter' },
6480
+ '7': { name: 'AutoLeading' },
6481
+ '9': { name: 'AutoHyphenate' },
6482
+ '10': { name: 'HyphenatedWordSize' },
6483
+ '11': { name: 'PreHyphen' },
6484
+ '12': { name: 'PostHyphen' },
6485
+ '13': { name: 'ConsecutiveHyphens?' },
6486
+ '14': { name: 'Zone' },
6487
+ '15': { name: 'HypenateCapitalizedWords' },
6488
+ '17': { name: 'WordSpacing' },
6489
+ '18': { name: 'LetterSpacing' },
6490
+ '19': { name: 'GlyphSpacing' },
6491
+ '32': { name: 'StyleSheet', children: keysStyleSheet },
6492
+ };
6493
+ var keysStyleSheetData = {
6494
+ name: 'StyleSheetData',
6495
+ children: keysStyleSheet,
6496
+ };
6497
+ var keysRoot = {
6498
+ '0': {
6499
+ name: 'ResourceDict',
6500
+ children: {
6501
+ '1': {
6502
+ name: 'FontSet',
6503
+ children: {
6504
+ '0': {
6505
+ uproot: true,
6506
+ children: {
6507
+ '0': {
6508
+ uproot: true,
6509
+ children: {
6510
+ '0': {
6511
+ uproot: true,
6512
+ children: {
6513
+ '0': { name: 'Name' },
6514
+ '2': { name: 'FontType' },
6515
+ },
6516
+ },
6517
+ },
6518
+ },
6519
+ },
6520
+ },
6521
+ },
6522
+ },
6523
+ '2': {
6524
+ name: '2',
6525
+ children: {},
6526
+ },
6527
+ '3': {
6528
+ name: 'MojiKumiSet',
6529
+ children: {
6530
+ '0': {
6531
+ uproot: true,
6532
+ children: {
6533
+ '0': {
6534
+ uproot: true,
6535
+ children: {
6536
+ '0': { name: 'InternalName' },
6537
+ },
6538
+ },
6539
+ },
6540
+ },
6541
+ },
6542
+ },
6543
+ '4': {
6544
+ name: 'KinsokuSet',
6545
+ children: {
6546
+ '0': {
6547
+ uproot: true,
6548
+ children: {
6549
+ '0': {
6550
+ uproot: true,
6551
+ children: {
6552
+ '0': { name: 'Name' },
6553
+ '5': {
6554
+ uproot: true,
6555
+ children: {
6556
+ '0': { name: 'NoStart' },
6557
+ '1': { name: 'NoEnd' },
6558
+ '2': { name: 'Keep' },
6559
+ '3': { name: 'Hanging' },
6560
+ '4': { name: 'Name' },
6561
+ },
6562
+ },
6563
+ },
6564
+ },
6565
+ },
6566
+ },
6567
+ },
6568
+ },
6569
+ '5': {
6570
+ name: 'StyleSheetSet',
6571
+ children: {
6572
+ '0': {
6573
+ uproot: true,
6574
+ children: {
6575
+ '0': {
6576
+ uproot: true,
6577
+ children: {
6578
+ '0': { name: 'Name' },
6579
+ '6': keysStyleSheetData,
6580
+ },
6581
+ },
6582
+ },
6583
+ },
6584
+ },
6585
+ },
6586
+ '6': {
6587
+ name: 'ParagraphSheetSet',
6588
+ children: {
6589
+ '0': {
6590
+ uproot: true,
6591
+ children: {
6592
+ '0': {
6593
+ uproot: true,
6594
+ children: {
6595
+ '0': { name: 'Name' },
6596
+ '5': {
6597
+ name: 'Properties',
6598
+ children: keysParagraph,
6599
+ },
6600
+ '6': { name: 'DefaultStyleSheet' },
6601
+ },
6602
+ },
6603
+ },
6604
+ },
6605
+ },
6606
+ },
6607
+ '8': {
6608
+ name: 'TextFrameSet',
6609
+ children: {
6610
+ '0': {
6611
+ uproot: true,
6612
+ children: {
6613
+ '0': {
6614
+ name: 'path',
6615
+ children: {
6616
+ '0': { name: 'name' },
6617
+ '1': {
6618
+ name: 'bezierCurve',
6619
+ children: {
6620
+ '0': { name: 'controlPoints' },
6621
+ },
6622
+ },
6623
+ '2': {
6624
+ name: 'data',
6625
+ children: {
6626
+ '0': { name: 'type' },
6627
+ '1': { name: 'orientation' },
6628
+ '2': { name: 'frameMatrix' },
6629
+ '4': { name: '4' },
6630
+ '6': { name: 'textRange' },
6631
+ '7': { name: 'rowGutter' },
6632
+ '8': { name: 'columnGutter' },
6633
+ '9': { name: '9' },
6634
+ '10': {
6635
+ name: 'baselineAlignment',
6636
+ children: {
6637
+ '0': { name: 'flag' },
6638
+ '1': { name: 'min' },
6639
+ },
6640
+ },
6641
+ '11': {
6642
+ name: 'pathData',
6643
+ children: {
6644
+ '1': { name: '1' },
6645
+ '0': { name: 'reversed' },
6646
+ '2': { name: '2' },
6647
+ '3': { name: '3' },
6648
+ '4': { name: 'spacing' },
6649
+ '5': { name: '5' },
6650
+ '6': { name: '6' },
6651
+ '7': { name: '7' },
6652
+ '18': { name: '18' },
6653
+ },
6654
+ },
6655
+ '12': { name: '12' },
6656
+ '13': { name: '13' },
6657
+ },
6658
+ },
6659
+ '3': { name: '3' },
6660
+ '97': { name: 'uuid' },
6661
+ },
6662
+ },
6663
+ },
6664
+ },
6665
+ },
6666
+ },
6667
+ '9': {
6668
+ name: 'Predefined',
6669
+ children: {
6670
+ '0': {
6671
+ children: { '0': { uproot: true } },
6672
+ },
6673
+ '1': {
6674
+ children: { '0': { uproot: true } },
6675
+ },
6676
+ },
6677
+ },
6678
+ },
6679
+ },
6680
+ '1': {
6681
+ name: 'EngineDict',
6682
+ children: {
6683
+ '0': {
6684
+ name: '0',
6685
+ children: {
6686
+ // 0: ???
6687
+ // 1: ???
6688
+ // 2: ???
6689
+ '3': { name: 'SuperscriptSize' },
6690
+ '4': { name: 'SuperscriptPosition' },
6691
+ '5': { name: 'SubscriptSize' },
6692
+ '6': { name: 'SubscriptPosition' },
6693
+ '7': { name: 'SmallCapSize' },
6694
+ '8': { name: 'UseFractionalGlyphWidths' },
6695
+ '15': { children: { '0': { uproot: true } } },
6696
+ // 16: ???
6697
+ // 17: ???
6698
+ },
6699
+ },
6700
+ '1': {
6701
+ name: 'Editors?',
6702
+ children: {
6703
+ '0': {
6704
+ name: 'Editor',
6705
+ children: {
6706
+ '0': { name: 'Text' },
6707
+ '5': {
6708
+ name: 'ParagraphRun',
6709
+ children: {
6710
+ '0': {
6711
+ name: 'RunArray',
6712
+ children: {
6713
+ '0': {
6714
+ name: 'ParagraphSheet',
6715
+ children: {
6716
+ '0': {
6717
+ uproot: true,
6718
+ children: {
6719
+ '0': { name: '0' },
6720
+ '5': {
6721
+ name: '5',
6722
+ children: keysParagraph,
6723
+ },
6724
+ '6': { name: '6' },
6725
+ },
6726
+ },
6727
+ },
6728
+ },
6729
+ '1': { name: 'RunLength' },
6730
+ },
6731
+ },
6732
+ },
6733
+ },
6734
+ '6': {
6735
+ name: 'StyleRun',
6736
+ children: {
6737
+ '0': {
6738
+ name: 'RunArray',
6739
+ children: {
6740
+ '0': {
6741
+ name: 'StyleSheet',
6742
+ children: {
6743
+ '0': {
6744
+ uproot: true,
6745
+ children: {
6746
+ '6': keysStyleSheetData,
6747
+ },
6748
+ },
6749
+ },
6750
+ },
6751
+ '1': { name: 'RunLength' },
6752
+ },
6753
+ },
6754
+ },
6755
+ },
6756
+ },
6757
+ },
6758
+ '1': {
6759
+ name: 'FontVectorData ???',
6760
+ // children: {
6761
+ // '0': {},
6762
+ // '2': {
6763
+ // // '5'
6764
+ // // '6'
6765
+ // },
6766
+ // }
6767
+ // "1": [ // this is probably bounding box? there seem to be many of them nested
6768
+ // 0,
6769
+ // 0,
6770
+ // 999,
6771
+ // 176.30014
6772
+ // ],
6773
+ // various types: /PC, /F, /R, /L, /S, /G
6774
+ },
6775
+ },
6776
+ },
6777
+ '2': {
6778
+ name: 'StyleSheet',
6779
+ children: keysStyleSheet,
6780
+ },
6781
+ '3': {
6782
+ name: 'ParagraphSheet',
6783
+ children: keysParagraph,
6784
+ },
6785
+ },
6786
+ },
6787
+ };
6788
+ function decodeObj(obj, keys) {
6789
+ var _a, _b;
6790
+ if (obj === null)
6791
+ return obj;
6792
+ if (Array.isArray(obj))
6793
+ return obj.map(function (x) { return decodeObj(x, keys); });
6794
+ if (typeof obj !== 'object')
6795
+ return obj;
6796
+ var result = {};
6797
+ for (var _i = 0, _c = Object.keys(obj); _i < _c.length; _i++) {
6798
+ var key = _c[_i];
6799
+ if (keys[key]) {
6800
+ if (keys[key].uproot) {
6801
+ if (key !== '99')
6802
+ result = decodeObj(obj[key], (_a = keys[key].children) !== null && _a !== void 0 ? _a : {});
6803
+ if (obj['99'])
6804
+ result._type = obj['99'];
6805
+ break;
6806
+ }
6807
+ else {
6808
+ result[keys[key].name || key] = decodeObj(obj[key], (_b = keys[key].children) !== null && _b !== void 0 ? _b : {});
6809
+ }
6810
+ }
6811
+ else if (key === '99') {
6812
+ result._type = obj[key];
6813
+ }
6814
+ else {
6815
+ result[key] = decodeObj(obj[key], {});
6816
+ }
6817
+ }
6818
+ return result;
6819
+ }
6820
+ function decodeEngineData2(data) {
6821
+ return decodeObj(data, keysRoot);
6822
+ }
6823
+ exports.decodeEngineData2 = decodeEngineData2;
6824
+
6825
+ },{}],8:[function(require,module,exports){
6826
+ "use strict";
6382
6827
  Object.defineProperty(exports, "__esModule", { value: true });
6383
6828
  exports.initializeCanvas = exports.createImageData = exports.createCanvasFromData = exports.createCanvas = exports.writeDataZipWithoutPrediction = exports.writeDataRLE = exports.writeDataRaw = exports.decodeBitmap = exports.imageDataToCanvas = exports.resetImageData = exports.hasAlpha = exports.clamp = exports.offsetForChannel = exports.Compression = exports.ChannelID = exports.MaskParams = exports.LayerMaskFlags = exports.ColorSpace = exports.createEnum = exports.revMap = exports.largeAdditionalInfoKeys = exports.layerColors = exports.toBlendMode = exports.fromBlendMode = exports.RAW_IMAGE_DATA = exports.MOCK_HANDLERS = void 0;
6384
6829
  var base64_js_1 = require("base64-js");
@@ -6743,7 +7188,7 @@ function initializeCanvas(createCanvasMethod, createCanvasFromDataMethod, create
6743
7188
  }
6744
7189
  exports.initializeCanvas = initializeCanvas;
6745
7190
 
6746
- },{"base64-js":15,"pako":18}],8:[function(require,module,exports){
7191
+ },{"base64-js":16,"pako":19}],9:[function(require,module,exports){
6747
7192
  "use strict";
6748
7193
  var __assign = (this && this.__assign) || function () {
6749
7194
  __assign = Object.assign || function(t) {
@@ -6789,6 +7234,33 @@ function writeUtf8String(writer, value) {
6789
7234
  var buffer = (0, utf8_1.encodeString)(value);
6790
7235
  (0, psdWriter_1.writeBytes)(writer, buffer);
6791
7236
  }
7237
+ function readEncodedString(reader) {
7238
+ var length = (0, psdReader_1.readUint8)(reader);
7239
+ var buffer = (0, psdReader_1.readBytes)(reader, length);
7240
+ var notAscii = false;
7241
+ for (var i = 0; i < buffer.byteLength; i++) {
7242
+ if (buffer[i] & 0x80) {
7243
+ notAscii = true;
7244
+ break;
7245
+ }
7246
+ }
7247
+ if (notAscii) {
7248
+ var decoder = new TextDecoder('gbk');
7249
+ return decoder.decode(buffer);
7250
+ }
7251
+ else {
7252
+ return (0, utf8_1.decodeString)(buffer);
7253
+ }
7254
+ }
7255
+ function writeEncodedString(writer, value) {
7256
+ var ascii = '';
7257
+ for (var i = 0, code = value.codePointAt(i++); code !== undefined; code = value.codePointAt(i++)) {
7258
+ ascii += code > 0x7f ? '?' : String.fromCodePoint(code);
7259
+ }
7260
+ var buffer = (0, utf8_1.encodeString)(ascii);
7261
+ (0, psdWriter_1.writeUint8)(writer, buffer.byteLength);
7262
+ (0, psdWriter_1.writeBytes)(writer, buffer);
7263
+ }
6792
7264
  helpers_1.MOCK_HANDLERS && addHandler(1028, // IPTC-NAA record
6793
7265
  function (// IPTC-NAA record
6794
7266
  target) { return target._ir1028 !== undefined; }, function (reader, target, left) {
@@ -6936,15 +7408,22 @@ addHandler(1062, function (target) { return target.printScale !== undefined; },
6936
7408
  (0, psdWriter_1.writeFloat32)(writer, scale || 0);
6937
7409
  });
6938
7410
  addHandler(1006, function (target) { return target.alphaChannelNames !== undefined; }, function (reader, target, left) {
6939
- target.alphaChannelNames = [];
6940
- while (left() > 0) {
6941
- var value = (0, psdReader_1.readPascalString)(reader, 1);
6942
- target.alphaChannelNames.push(value);
7411
+ if (!target.alphaChannelNames) { // skip if the unicode versions are already read
7412
+ target.alphaChannelNames = [];
7413
+ while (left() > 0) {
7414
+ var value = readEncodedString(reader);
7415
+ // const value = readPascalString(reader, 1);
7416
+ target.alphaChannelNames.push(value);
7417
+ }
7418
+ }
7419
+ else {
7420
+ (0, psdReader_1.skipBytes)(reader, left());
6943
7421
  }
6944
7422
  }, function (writer, target) {
6945
7423
  for (var _i = 0, _a = target.alphaChannelNames; _i < _a.length; _i++) {
6946
7424
  var name_1 = _a[_i];
6947
- (0, psdWriter_1.writePascalString)(writer, name_1, 1);
7425
+ writeEncodedString(writer, name_1);
7426
+ // writePascalString(writer, name, 1);
6948
7427
  }
6949
7428
  });
6950
7429
  addHandler(1045, function (target) { return target.alphaChannelNames !== undefined; }, function (reader, target, left) {
@@ -7769,7 +8248,7 @@ target) { return target._ir4002 !== undefined; }, function (reader, target, left
7769
8248
  (0, psdWriter_1.writeBytes)(writer, target._ir4002);
7770
8249
  });
7771
8250
 
7772
- },{"./descriptor":4,"./helpers":7,"./psdReader":11,"./psdWriter":12,"./utf8":14,"base64-js":15}],9:[function(require,module,exports){
8251
+ },{"./descriptor":4,"./helpers":8,"./psdReader":12,"./psdWriter":13,"./utf8":15,"base64-js":16}],10:[function(require,module,exports){
7773
8252
  (function (Buffer){(function (){
7774
8253
  "use strict";
7775
8254
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
@@ -7825,7 +8304,7 @@ function writePsdBuffer(psd, options) {
7825
8304
  exports.writePsdBuffer = writePsdBuffer;
7826
8305
 
7827
8306
  }).call(this)}).call(this,require("buffer").Buffer)
7828
- },{"./abr":1,"./csh":3,"./helpers":7,"./psd":10,"./psdReader":11,"./psdWriter":12,"base64-js":15,"buffer":16}],10:[function(require,module,exports){
8307
+ },{"./abr":1,"./csh":3,"./helpers":8,"./psd":11,"./psdReader":12,"./psdWriter":13,"base64-js":16,"buffer":17}],11:[function(require,module,exports){
7829
8308
  "use strict";
7830
8309
  Object.defineProperty(exports, "__esModule", { value: true });
7831
8310
  exports.LayerCompCapturedInfo = exports.SectionDividerType = exports.ColorMode = void 0;
@@ -7855,7 +8334,7 @@ var LayerCompCapturedInfo;
7855
8334
  LayerCompCapturedInfo[LayerCompCapturedInfo["Appearance"] = 4] = "Appearance";
7856
8335
  })(LayerCompCapturedInfo = exports.LayerCompCapturedInfo || (exports.LayerCompCapturedInfo = {}));
7857
8336
 
7858
- },{}],11:[function(require,module,exports){
8337
+ },{}],12:[function(require,module,exports){
7859
8338
  "use strict";
7860
8339
  Object.defineProperty(exports, "__esModule", { value: true });
7861
8340
  exports.readPattern = exports.readColor = exports.readSection = exports.readDataRLE = exports.readDataZip = exports.createImageDataBitDepth = exports.readAdditionalLayerInfo = exports.readGlobalLayerMaskInfo = exports.readData = 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;
@@ -8264,9 +8743,7 @@ function readLayerRecord(reader, psd) {
8264
8743
  // 0x20 - effects/filters panel is expanded
8265
8744
  skipBytes(reader, 1);
8266
8745
  readSection(reader, 1, function (left) {
8267
- var mask = readLayerMaskData(reader);
8268
- if (mask)
8269
- layer.mask = mask;
8746
+ readLayerMaskData(reader, layer);
8270
8747
  var blendingRanges = readLayerBlendingRanges(reader);
8271
8748
  if (blendingRanges)
8272
8749
  layer.blendingRanges = blendingRanges;
@@ -8280,11 +8757,12 @@ function readLayerRecord(reader, psd) {
8280
8757
  });
8281
8758
  return { layer: layer, channels: channels };
8282
8759
  }
8283
- function readLayerMaskData(reader) {
8760
+ function readLayerMaskData(reader, layer) {
8284
8761
  return readSection(reader, 1, function (left) {
8285
8762
  if (!left())
8286
8763
  return undefined;
8287
8764
  var mask = {};
8765
+ layer.mask = mask;
8288
8766
  mask.top = readInt32(reader);
8289
8767
  mask.left = readInt32(reader);
8290
8768
  mask.bottom = readInt32(reader);
@@ -8294,6 +8772,19 @@ function readLayerMaskData(reader) {
8294
8772
  mask.positionRelativeToLayer = (flags & 1 /* LayerMaskFlags.PositionRelativeToLayer */) !== 0;
8295
8773
  mask.disabled = (flags & 2 /* LayerMaskFlags.LayerMaskDisabled */) !== 0;
8296
8774
  mask.fromVectorData = (flags & 8 /* LayerMaskFlags.LayerMaskFromRenderingOtherData */) !== 0;
8775
+ if (left() >= 18) {
8776
+ var realMask = {};
8777
+ layer.realMask = realMask;
8778
+ var realFlags = readUint8(reader);
8779
+ realMask.positionRelativeToLayer = (realFlags & 1 /* LayerMaskFlags.PositionRelativeToLayer */) !== 0;
8780
+ realMask.disabled = (realFlags & 2 /* LayerMaskFlags.LayerMaskDisabled */) !== 0;
8781
+ realMask.fromVectorData = (realFlags & 8 /* LayerMaskFlags.LayerMaskFromRenderingOtherData */) !== 0;
8782
+ realMask.defaultColor = readUint8(reader); // Real user mask background. 0 or 255.
8783
+ realMask.top = readInt32(reader);
8784
+ realMask.left = readInt32(reader);
8785
+ realMask.bottom = readInt32(reader);
8786
+ realMask.right = readInt32(reader);
8787
+ }
8297
8788
  if (flags & 16 /* LayerMaskFlags.MaskHasParametersAppliedToIt */) {
8298
8789
  var params = readUint8(reader);
8299
8790
  if (params & 1 /* MaskParams.UserMaskDensity */)
@@ -8305,23 +8796,7 @@ function readLayerMaskData(reader) {
8305
8796
  if (params & 8 /* MaskParams.VectorMaskFeather */)
8306
8797
  mask.vectorMaskFeather = readFloat64(reader);
8307
8798
  }
8308
- if (left() > 2) {
8309
- // TODO: handle these values, this is RealUserMask
8310
- /*const realFlags = readUint8(reader);
8311
- const realUserMaskBackground = readUint8(reader);
8312
- const top2 = readInt32(reader);
8313
- const left2 = readInt32(reader);
8314
- const bottom2 = readInt32(reader);
8315
- const right2 = readInt32(reader);
8316
-
8317
- // TEMP
8318
- (mask as any)._real = { realFlags, realUserMaskBackground, top2, left2, bottom2, right2 };*/
8319
- if (reader.logMissingFeatures) {
8320
- reader.log('Unhandled extra real user mask params');
8321
- }
8322
- }
8323
8799
  skipBytes(reader, left());
8324
- return mask;
8325
8800
  });
8326
8801
  }
8327
8802
  function readBlendingRange(reader) {
@@ -8383,20 +8858,28 @@ function readLayerChannelImageData(reader, psd, layer, channels) {
8383
8858
  }
8384
8859
  if (compression > 3)
8385
8860
  throw new Error("Invalid compression: ".concat(compression));
8386
- if (channel.id === -2 /* ChannelID.UserMask */) {
8387
- var mask = layer.mask;
8861
+ if (channel.id === -2 /* ChannelID.UserMask */ || channel.id === -3 /* ChannelID.RealUserMask */) {
8862
+ var mask = channel.id === -2 /* ChannelID.UserMask */ ? layer.mask : layer.realMask;
8388
8863
  if (!mask)
8389
- throw new Error("Missing layer mask data");
8864
+ throw new Error("Missing layer ".concat(channel.id === -2 /* ChannelID.UserMask */ ? 'mask' : 'real mask', " data"));
8390
8865
  var maskWidth = (mask.right || 0) - (mask.left || 0);
8391
8866
  var maskHeight = (mask.bottom || 0) - (mask.top || 0);
8867
+ if (maskWidth < 0 || maskHeight < 0 || maskWidth > 30000 || maskHeight > 30000)
8868
+ throw new Error('Invalid mask size');
8392
8869
  if (maskWidth && maskHeight) {
8393
8870
  var maskData = createImageDataBitDepth(maskWidth, maskHeight, (_b = psd.bitsPerChannel) !== null && _b !== void 0 ? _b : 8);
8394
8871
  (0, helpers_1.resetImageData)(maskData);
8395
8872
  var start_1 = reader.offset;
8396
8873
  readData(reader, channel.length, maskData, compression, maskWidth, maskHeight, (_c = psd.bitsPerChannel) !== null && _c !== void 0 ? _c : 8, 0, reader.large, 4);
8397
8874
  if (helpers_1.RAW_IMAGE_DATA) {
8398
- layer.maskDataRawCompression = compression;
8399
- layer.maskDataRaw = new Uint8Array(reader.view.buffer, reader.view.byteOffset + start_1, reader.offset - start_1);
8875
+ if (channel.id === -2 /* ChannelID.UserMask */) {
8876
+ layer.maskDataRawCompression = compression;
8877
+ layer.maskDataRaw = new Uint8Array(reader.view.buffer, reader.view.byteOffset + start_1, reader.offset - start_1);
8878
+ }
8879
+ else {
8880
+ layer.realMaskDataRawCompression = compression;
8881
+ layer.realMaskDataRaw = new Uint8Array(reader.view.buffer, reader.view.byteOffset + start_1, reader.offset - start_1);
8882
+ }
8400
8883
  }
8401
8884
  setupGrayscale(maskData);
8402
8885
  if (reader.useImageData) {
@@ -8407,12 +8890,6 @@ function readLayerChannelImageData(reader, psd, layer, channels) {
8407
8890
  }
8408
8891
  }
8409
8892
  }
8410
- else if (channel.id === -3 /* ChannelID.RealUserMask */) {
8411
- if (reader.logMissingFeatures) {
8412
- reader.log("RealUserMask not supported");
8413
- }
8414
- reader.offset = start + channel.length;
8415
- }
8416
8893
  else {
8417
8894
  var offset = (0, helpers_1.offsetForChannel)(channel.id, cmyk);
8418
8895
  var targetData = imageData;
@@ -9054,7 +9531,7 @@ function readPattern(reader) {
9054
9531
  }
9055
9532
  exports.readPattern = readPattern;
9056
9533
 
9057
- },{"./additionalInfo":2,"./helpers":7,"./imageResources":8,"pako":18}],12:[function(require,module,exports){
9534
+ },{"./additionalInfo":2,"./helpers":8,"./imageResources":9,"pako":19}],13:[function(require,module,exports){
9058
9535
  "use strict";
9059
9536
  var __assign = (this && this.__assign) || function () {
9060
9537
  __assign = Object.assign || function(t) {
@@ -9396,7 +9873,7 @@ function writeLayerInfo(writer, psd, globalAlpha, options) {
9396
9873
  flags |= 0x01;
9397
9874
  if (layer.hidden)
9398
9875
  flags |= 0x02;
9399
- if (layer.vectorMask || (layer.sectionDivider && layer.sectionDivider.type !== 0 /* SectionDividerType.Other */)) {
9876
+ if (layer.vectorMask || (layer.sectionDivider && layer.sectionDivider.type !== 0 /* SectionDividerType.Other */) || layer.adjustment) {
9400
9877
  flags |= 0x10; // pixel data irrelevant to appearance of document
9401
9878
  }
9402
9879
  if (layer.effectsOpen)
@@ -9429,36 +9906,52 @@ function writeLayerInfo(writer, psd, globalAlpha, options) {
9429
9906
  }, true, options.psb);
9430
9907
  }
9431
9908
  function writeLayerMaskData(writer, _a, layerData) {
9432
- var mask = _a.mask;
9909
+ var mask = _a.mask, realMask = _a.realMask;
9433
9910
  writeSection(writer, 1, function () {
9434
- if (!mask)
9911
+ if (!mask && !realMask)
9435
9912
  return;
9913
+ var params = 0, flags = 0, realFlags = 0;
9914
+ if (mask) {
9915
+ if (mask.userMaskDensity !== undefined)
9916
+ params |= 1 /* MaskParams.UserMaskDensity */;
9917
+ if (mask.userMaskFeather !== undefined)
9918
+ params |= 2 /* MaskParams.UserMaskFeather */;
9919
+ if (mask.vectorMaskDensity !== undefined)
9920
+ params |= 4 /* MaskParams.VectorMaskDensity */;
9921
+ if (mask.vectorMaskFeather !== undefined)
9922
+ params |= 8 /* MaskParams.VectorMaskFeather */;
9923
+ if (mask.disabled)
9924
+ flags |= 2 /* LayerMaskFlags.LayerMaskDisabled */;
9925
+ if (mask.positionRelativeToLayer)
9926
+ flags |= 1 /* LayerMaskFlags.PositionRelativeToLayer */;
9927
+ if (mask.fromVectorData)
9928
+ flags |= 8 /* LayerMaskFlags.LayerMaskFromRenderingOtherData */;
9929
+ if (params)
9930
+ flags |= 16 /* LayerMaskFlags.MaskHasParametersAppliedToIt */;
9931
+ }
9436
9932
  var m = layerData.mask || {};
9437
9933
  writeInt32(writer, m.top || 0);
9438
9934
  writeInt32(writer, m.left || 0);
9439
9935
  writeInt32(writer, m.bottom || 0);
9440
9936
  writeInt32(writer, m.right || 0);
9441
- writeUint8(writer, mask.defaultColor || 0);
9442
- var params = 0;
9443
- if (mask.userMaskDensity !== undefined)
9444
- params |= 1 /* MaskParams.UserMaskDensity */;
9445
- if (mask.userMaskFeather !== undefined)
9446
- params |= 2 /* MaskParams.UserMaskFeather */;
9447
- if (mask.vectorMaskDensity !== undefined)
9448
- params |= 4 /* MaskParams.VectorMaskDensity */;
9449
- if (mask.vectorMaskFeather !== undefined)
9450
- params |= 8 /* MaskParams.VectorMaskFeather */;
9451
- var flags = 0;
9452
- if (mask.disabled)
9453
- flags |= 2 /* LayerMaskFlags.LayerMaskDisabled */;
9454
- if (mask.positionRelativeToLayer)
9455
- flags |= 1 /* LayerMaskFlags.PositionRelativeToLayer */;
9456
- if (mask.fromVectorData)
9457
- flags |= 8 /* LayerMaskFlags.LayerMaskFromRenderingOtherData */;
9458
- if (params)
9459
- flags |= 16 /* LayerMaskFlags.MaskHasParametersAppliedToIt */;
9937
+ writeUint8(writer, mask && mask.defaultColor || 0);
9460
9938
  writeUint8(writer, flags);
9461
- if (params) {
9939
+ if (realMask) {
9940
+ if (realMask.disabled)
9941
+ realFlags |= 2 /* LayerMaskFlags.LayerMaskDisabled */;
9942
+ if (realMask.positionRelativeToLayer)
9943
+ realFlags |= 1 /* LayerMaskFlags.PositionRelativeToLayer */;
9944
+ if (realMask.fromVectorData)
9945
+ realFlags |= 8 /* LayerMaskFlags.LayerMaskFromRenderingOtherData */;
9946
+ var r = layerData.realMask || {};
9947
+ writeUint8(writer, realFlags);
9948
+ writeUint8(writer, realMask.defaultColor || 0);
9949
+ writeInt32(writer, r.top || 0);
9950
+ writeInt32(writer, r.left || 0);
9951
+ writeInt32(writer, r.bottom || 0);
9952
+ writeInt32(writer, r.right || 0);
9953
+ }
9954
+ if (params && mask) {
9462
9955
  writeUint8(writer, params);
9463
9956
  if (mask.userMaskDensity !== undefined)
9464
9957
  writeUint8(writer, Math.round(mask.userMaskDensity * 0xff));
@@ -9469,7 +9962,6 @@ function writeLayerMaskData(writer, _a, layerData) {
9469
9962
  if (mask.vectorMaskFeather !== undefined)
9470
9963
  writeFloat64(writer, mask.vectorMaskFeather);
9471
9964
  }
9472
- // TODO: handle rest of the fields
9473
9965
  writeZeros(writer, 2);
9474
9966
  });
9475
9967
  }
@@ -9535,8 +10027,8 @@ function writeAdditionalLayerInfo(writer, target, psd, options) {
9535
10027
  function addChildren(layers, children) {
9536
10028
  if (!children)
9537
10029
  return;
9538
- // const layerIds = [];
9539
- // const timestamps = []
10030
+ // const layerIds: number[] = [2];
10031
+ // const timestamps: number[] = [1740120767.0230637];
9540
10032
  for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {
9541
10033
  var c = children_1[_i];
9542
10034
  if (c.children && c.canvas)
@@ -9549,6 +10041,7 @@ function addChildren(layers, children) {
9549
10041
  sectionDivider: {
9550
10042
  type: 3 /* SectionDividerType.BoundingSectionDivider */,
9551
10043
  },
10044
+ // blendingRanges: children[0].blendingRanges,
9552
10045
  // nameSource: 'lset',
9553
10046
  // id: layerIds.shift(),
9554
10047
  // protected: {
@@ -9556,12 +10049,9 @@ function addChildren(layers, children) {
9556
10049
  // composite: false,
9557
10050
  // position: false,
9558
10051
  // },
9559
- // layerColor: 'none',
10052
+ // layerColor: 'red',
9560
10053
  // timestamp: timestamps.shift(),
9561
- // referencePoint: {
9562
- // x: 0,
9563
- // y: 0,
9564
- // },
10054
+ // referencePoint: { x: 0, y: 0 },
9565
10055
  });
9566
10056
  addChildren(layers, c.children);
9567
10057
  layers.push(__assign(__assign({}, c), { blendMode: c.blendMode === 'pass through' ? 'normal' : c.blendMode, sectionDivider: {
@@ -9620,47 +10110,46 @@ function createThumbnail(psd) {
9620
10110
  }
9621
10111
  return canvas;
9622
10112
  }
9623
- function getChannels(tempBuffer, layer, background, options) {
9624
- var layerData = getLayerChannels(tempBuffer, layer, background, options);
9625
- var mask = layer.mask;
9626
- if (mask) {
9627
- var top_2 = mask.top | 0;
9628
- var left = mask.left | 0;
9629
- var right = mask.right | 0;
9630
- var bottom = mask.bottom | 0;
9631
- var _a = getLayerDimentions(mask), width = _a.width, height = _a.height;
9632
- var imageData = mask.imageData;
9633
- if (!imageData && mask.canvas && width && height) {
9634
- imageData = mask.canvas.getContext('2d').getImageData(0, 0, width, height);
9635
- }
9636
- if (width && height && imageData) {
9637
- right = left + width;
9638
- bottom = top_2 + height;
9639
- if (imageData.width !== width || imageData.height !== height) {
9640
- throw new Error('Invalid imageData dimentions');
9641
- }
9642
- var buffer = void 0;
9643
- var compression = void 0;
9644
- if (helpers_1.RAW_IMAGE_DATA && layer.maskDataRaw) {
9645
- // console.log('written raw layer image data');
9646
- buffer = layer.maskDataRaw;
9647
- compression = layer.maskDataRawCompression;
9648
- }
9649
- else if (options.compress) {
9650
- buffer = (0, helpers_1.writeDataZipWithoutPrediction)(imageData, [0]);
9651
- compression = 2 /* Compression.ZipWithoutPrediction */;
9652
- }
9653
- else {
9654
- buffer = (0, helpers_1.writeDataRLE)(tempBuffer, imageData, [0], !!options.psb);
9655
- compression = 1 /* Compression.RleCompressed */;
9656
- }
9657
- layerData.mask = { top: top_2, left: left, right: right, bottom: bottom };
9658
- layerData.channels.push({ channelId: -2 /* ChannelID.UserMask */, compression: compression, buffer: buffer, length: 2 + buffer.length });
10113
+ function getMaskChannels(tempBuffer, layerData, layer, mask, options, realMask) {
10114
+ var top = mask.top | 0;
10115
+ var left = mask.left | 0;
10116
+ var right = mask.right | 0;
10117
+ var bottom = mask.bottom | 0;
10118
+ var _a = getLayerDimentions(mask), width = _a.width, height = _a.height;
10119
+ var imageData = mask.imageData;
10120
+ if (!imageData && mask.canvas && width && height) {
10121
+ imageData = mask.canvas.getContext('2d').getImageData(0, 0, width, height);
10122
+ }
10123
+ if (width && height && imageData) {
10124
+ right = left + width;
10125
+ bottom = top + height;
10126
+ if (imageData.width !== width || imageData.height !== height) {
10127
+ throw new Error('Invalid imageData dimentions');
10128
+ }
10129
+ var buffer = void 0;
10130
+ var compression = void 0;
10131
+ if (helpers_1.RAW_IMAGE_DATA && layer[realMask ? 'realMaskDataRaw' : 'maskDataRaw']) {
10132
+ buffer = layer[realMask ? 'realMaskDataRaw' : 'maskDataRaw'];
10133
+ compression = layer[realMask ? 'realMaskDataRawCompression' : 'maskDataRawCompression'];
10134
+ }
10135
+ else if (options.compress) {
10136
+ buffer = (0, helpers_1.writeDataZipWithoutPrediction)(imageData, [0]);
10137
+ compression = 2 /* Compression.ZipWithoutPrediction */;
9659
10138
  }
9660
10139
  else {
9661
- layerData.mask = { top: 0, left: 0, right: 0, bottom: 0 };
10140
+ buffer = (0, helpers_1.writeDataRLE)(tempBuffer, imageData, [0], !!options.psb);
10141
+ compression = 1 /* Compression.RleCompressed */;
9662
10142
  }
10143
+ layerData.channels.push({ channelId: realMask ? -3 /* ChannelID.RealUserMask */ : -2 /* ChannelID.UserMask */, compression: compression, buffer: buffer, length: 2 + buffer.length });
9663
10144
  }
10145
+ layerData[realMask ? 'realMask' : 'mask'] = { top: top, left: left, right: right, bottom: bottom };
10146
+ }
10147
+ function getChannels(tempBuffer, layer, background, options) {
10148
+ var layerData = getLayerChannels(tempBuffer, layer, background, options);
10149
+ if (layer.mask)
10150
+ getMaskChannels(tempBuffer, layerData, layer, layer.mask, options, false);
10151
+ if (layer.realMask)
10152
+ getMaskChannels(tempBuffer, layerData, layer, layer.realMask, options, true);
9664
10153
  return layerData;
9665
10154
  }
9666
10155
  function getLayerDimentions(_a) {
@@ -9835,7 +10324,7 @@ function writeColor(writer, color) {
9835
10324
  }
9836
10325
  exports.writeColor = writeColor;
9837
10326
 
9838
- },{"./additionalInfo":2,"./helpers":7,"./imageResources":8}],13:[function(require,module,exports){
10327
+ },{"./additionalInfo":2,"./helpers":8,"./imageResources":9}],14:[function(require,module,exports){
9839
10328
  "use strict";
9840
10329
  var __assign = (this && this.__assign) || function () {
9841
10330
  __assign = Object.assign || function(t) {
@@ -10414,7 +10903,7 @@ function encodeEngineData(data) {
10414
10903
  }
10415
10904
  exports.encodeEngineData = encodeEngineData;
10416
10905
 
10417
- },{}],14:[function(require,module,exports){
10906
+ },{}],15:[function(require,module,exports){
10418
10907
  "use strict";
10419
10908
  Object.defineProperty(exports, "__esModule", { value: true });
10420
10909
  exports.decodeString = exports.encodeString = exports.encodeStringTo = exports.stringLengthInBytes = void 0;
@@ -10573,7 +11062,7 @@ function decodeString(value) {
10573
11062
  }
10574
11063
  exports.decodeString = decodeString;
10575
11064
 
10576
- },{}],15:[function(require,module,exports){
11065
+ },{}],16:[function(require,module,exports){
10577
11066
  'use strict'
10578
11067
 
10579
11068
  exports.byteLength = byteLength
@@ -10725,7 +11214,7 @@ function fromByteArray (uint8) {
10725
11214
  return parts.join('')
10726
11215
  }
10727
11216
 
10728
- },{}],16:[function(require,module,exports){
11217
+ },{}],17:[function(require,module,exports){
10729
11218
  (function (Buffer){(function (){
10730
11219
  /*!
10731
11220
  * The buffer module from node.js, for the browser.
@@ -12506,7 +12995,7 @@ function numberIsNaN (obj) {
12506
12995
  }
12507
12996
 
12508
12997
  }).call(this)}).call(this,require("buffer").Buffer)
12509
- },{"base64-js":15,"buffer":16,"ieee754":17}],17:[function(require,module,exports){
12998
+ },{"base64-js":16,"buffer":17,"ieee754":18}],18:[function(require,module,exports){
12510
12999
  /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
12511
13000
  exports.read = function (buffer, offset, isLE, mLen, nBytes) {
12512
13001
  var e, m
@@ -12593,7 +13082,7 @@ exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
12593
13082
  buffer[offset + i - d] |= s * 128
12594
13083
  }
12595
13084
 
12596
- },{}],18:[function(require,module,exports){
13085
+ },{}],19:[function(require,module,exports){
12597
13086
  // Top level file is just a mixin of submodules & constants
12598
13087
  'use strict';
12599
13088
 
@@ -12613,7 +13102,7 @@ module.exports.inflateRaw = inflateRaw;
12613
13102
  module.exports.ungzip = ungzip;
12614
13103
  module.exports.constants = constants;
12615
13104
 
12616
- },{"./lib/deflate":19,"./lib/inflate":20,"./lib/zlib/constants":24}],19:[function(require,module,exports){
13105
+ },{"./lib/deflate":20,"./lib/inflate":21,"./lib/zlib/constants":25}],20:[function(require,module,exports){
12617
13106
  'use strict';
12618
13107
 
12619
13108
 
@@ -12995,7 +13484,7 @@ module.exports.deflateRaw = deflateRaw;
12995
13484
  module.exports.gzip = gzip;
12996
13485
  module.exports.constants = require('./zlib/constants');
12997
13486
 
12998
- },{"./utils/common":21,"./utils/strings":22,"./zlib/constants":24,"./zlib/deflate":26,"./zlib/messages":31,"./zlib/zstream":33}],20:[function(require,module,exports){
13487
+ },{"./utils/common":22,"./utils/strings":23,"./zlib/constants":25,"./zlib/deflate":27,"./zlib/messages":32,"./zlib/zstream":34}],21:[function(require,module,exports){
12999
13488
  'use strict';
13000
13489
 
13001
13490
 
@@ -13416,7 +13905,7 @@ module.exports.inflateRaw = inflateRaw;
13416
13905
  module.exports.ungzip = inflate;
13417
13906
  module.exports.constants = require('./zlib/constants');
13418
13907
 
13419
- },{"./utils/common":21,"./utils/strings":22,"./zlib/constants":24,"./zlib/gzheader":27,"./zlib/inflate":29,"./zlib/messages":31,"./zlib/zstream":33}],21:[function(require,module,exports){
13908
+ },{"./utils/common":22,"./utils/strings":23,"./zlib/constants":25,"./zlib/gzheader":28,"./zlib/inflate":30,"./zlib/messages":32,"./zlib/zstream":34}],22:[function(require,module,exports){
13420
13909
  'use strict';
13421
13910
 
13422
13911
 
@@ -13466,7 +13955,7 @@ module.exports.flattenChunks = (chunks) => {
13466
13955
  return result;
13467
13956
  };
13468
13957
 
13469
- },{}],22:[function(require,module,exports){
13958
+ },{}],23:[function(require,module,exports){
13470
13959
  // String encode/decode helpers
13471
13960
  'use strict';
13472
13961
 
@@ -13642,7 +14131,7 @@ module.exports.utf8border = (buf, max) => {
13642
14131
  return (pos + _utf8len[buf[pos]] > max) ? pos : max;
13643
14132
  };
13644
14133
 
13645
- },{}],23:[function(require,module,exports){
14134
+ },{}],24:[function(require,module,exports){
13646
14135
  'use strict';
13647
14136
 
13648
14137
  // Note: adler32 takes 12% for level 0 and 2% for level 6.
@@ -13695,7 +14184,7 @@ const adler32 = (adler, buf, len, pos) => {
13695
14184
 
13696
14185
  module.exports = adler32;
13697
14186
 
13698
- },{}],24:[function(require,module,exports){
14187
+ },{}],25:[function(require,module,exports){
13699
14188
  'use strict';
13700
14189
 
13701
14190
  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
@@ -13765,7 +14254,7 @@ module.exports = {
13765
14254
  //Z_NULL: null // Use -1 or null inline, depending on var type
13766
14255
  };
13767
14256
 
13768
- },{}],25:[function(require,module,exports){
14257
+ },{}],26:[function(require,module,exports){
13769
14258
  'use strict';
13770
14259
 
13771
14260
  // Note: we can't get significant speed boost here.
@@ -13826,7 +14315,7 @@ const crc32 = (crc, buf, len, pos) => {
13826
14315
 
13827
14316
  module.exports = crc32;
13828
14317
 
13829
- },{}],26:[function(require,module,exports){
14318
+ },{}],27:[function(require,module,exports){
13830
14319
  'use strict';
13831
14320
 
13832
14321
  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
@@ -15876,7 +16365,7 @@ module.exports.deflatePrime = deflatePrime;
15876
16365
  module.exports.deflateTune = deflateTune;
15877
16366
  */
15878
16367
 
15879
- },{"./adler32":23,"./constants":24,"./crc32":25,"./messages":31,"./trees":32}],27:[function(require,module,exports){
16368
+ },{"./adler32":24,"./constants":25,"./crc32":26,"./messages":32,"./trees":33}],28:[function(require,module,exports){
15880
16369
  'use strict';
15881
16370
 
15882
16371
  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
@@ -15936,7 +16425,7 @@ function GZheader() {
15936
16425
 
15937
16426
  module.exports = GZheader;
15938
16427
 
15939
- },{}],28:[function(require,module,exports){
16428
+ },{}],29:[function(require,module,exports){
15940
16429
  'use strict';
15941
16430
 
15942
16431
  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
@@ -16282,7 +16771,7 @@ module.exports = function inflate_fast(strm, start) {
16282
16771
  return;
16283
16772
  };
16284
16773
 
16285
- },{}],29:[function(require,module,exports){
16774
+ },{}],30:[function(require,module,exports){
16286
16775
  'use strict';
16287
16776
 
16288
16777
  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
@@ -17856,7 +18345,7 @@ module.exports.inflateUndermine = inflateUndermine;
17856
18345
  module.exports.inflateValidate = inflateValidate;
17857
18346
  */
17858
18347
 
17859
- },{"./adler32":23,"./constants":24,"./crc32":25,"./inffast":28,"./inftrees":30}],30:[function(require,module,exports){
18348
+ },{"./adler32":24,"./constants":25,"./crc32":26,"./inffast":29,"./inftrees":31}],31:[function(require,module,exports){
17860
18349
  'use strict';
17861
18350
 
17862
18351
  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
@@ -18198,7 +18687,7 @@ const inflate_table = (type, lens, lens_index, codes, table, table_index, work,
18198
18687
 
18199
18688
  module.exports = inflate_table;
18200
18689
 
18201
- },{}],31:[function(require,module,exports){
18690
+ },{}],32:[function(require,module,exports){
18202
18691
  'use strict';
18203
18692
 
18204
18693
  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
@@ -18232,7 +18721,7 @@ module.exports = {
18232
18721
  '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */
18233
18722
  };
18234
18723
 
18235
- },{}],32:[function(require,module,exports){
18724
+ },{}],33:[function(require,module,exports){
18236
18725
  'use strict';
18237
18726
 
18238
18727
  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
@@ -19413,7 +19902,7 @@ module.exports._tr_flush_block = _tr_flush_block;
19413
19902
  module.exports._tr_tally = _tr_tally;
19414
19903
  module.exports._tr_align = _tr_align;
19415
19904
 
19416
- },{}],33:[function(require,module,exports){
19905
+ },{}],34:[function(require,module,exports){
19417
19906
  'use strict';
19418
19907
 
19419
19908
  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
@@ -19462,5 +19951,5 @@ function ZStream() {
19462
19951
 
19463
19952
  module.exports = ZStream;
19464
19953
 
19465
- },{}]},{},[9])(9)
19954
+ },{}]},{},[10])(10)
19466
19955
  });