ag-psd 19.0.1 → 20.1.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 (65) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README_PSD.md +20 -2
  3. package/TODO +7 -0
  4. package/dist/abr.js +4 -4
  5. package/dist/abr.js.map +1 -1
  6. package/dist/additionalInfo.d.ts +3 -3
  7. package/dist/additionalInfo.js +107 -12
  8. package/dist/additionalInfo.js.map +1 -1
  9. package/dist/bundle.js +15305 -7643
  10. package/dist/descriptor.js +21 -16
  11. package/dist/descriptor.js.map +1 -1
  12. package/dist/engineData2.d.ts +1 -0
  13. package/dist/engineData2.js +349 -0
  14. package/dist/engineData2.js.map +1 -0
  15. package/dist/helpers.d.ts +2 -7
  16. package/dist/helpers.js +45 -12
  17. package/dist/helpers.js.map +1 -1
  18. package/dist/imageResources.js +42 -1
  19. package/dist/imageResources.js.map +1 -1
  20. package/dist/psd.d.ts +46 -3
  21. package/dist/psd.js +8 -1
  22. package/dist/psd.js.map +1 -1
  23. package/dist/psdReader.d.ts +11 -5
  24. package/dist/psdReader.js +213 -100
  25. package/dist/psdReader.js.map +1 -1
  26. package/dist/psdWriter.js +24 -4
  27. package/dist/psdWriter.js.map +1 -1
  28. package/dist/utf8.js +10 -4
  29. package/dist/utf8.js.map +1 -1
  30. package/dist-es/abr.js +4 -4
  31. package/dist-es/abr.js.map +1 -1
  32. package/dist-es/additionalInfo.d.ts +3 -3
  33. package/dist-es/additionalInfo.js +110 -15
  34. package/dist-es/additionalInfo.js.map +1 -1
  35. package/dist-es/descriptor.js +21 -16
  36. package/dist-es/descriptor.js.map +1 -1
  37. package/dist-es/engineData2.d.ts +1 -0
  38. package/dist-es/engineData2.js +345 -0
  39. package/dist-es/engineData2.js.map +1 -0
  40. package/dist-es/helpers.d.ts +2 -7
  41. package/dist-es/helpers.js +43 -11
  42. package/dist-es/helpers.js.map +1 -1
  43. package/dist-es/imageResources.js +42 -1
  44. package/dist-es/imageResources.js.map +1 -1
  45. package/dist-es/psd.d.ts +46 -3
  46. package/dist-es/psd.js +7 -0
  47. package/dist-es/psd.js.map +1 -1
  48. package/dist-es/psdReader.d.ts +11 -5
  49. package/dist-es/psdReader.js +212 -102
  50. package/dist-es/psdReader.js.map +1 -1
  51. package/dist-es/psdWriter.js +25 -5
  52. package/dist-es/psdWriter.js.map +1 -1
  53. package/dist-es/utf8.js +10 -4
  54. package/dist-es/utf8.js.map +1 -1
  55. package/package.json +6 -7
  56. package/src/abr.ts +4 -4
  57. package/src/additionalInfo.ts +156 -51
  58. package/src/descriptor.ts +14 -9
  59. package/src/engineData2.ts +367 -0
  60. package/src/helpers.ts +47 -20
  61. package/src/imageResources.ts +59 -2
  62. package/src/psd.ts +41 -5
  63. package/src/psdReader.ts +210 -128
  64. package/src/psdWriter.ts +33 -14
  65. package/src/utf8.ts +12 -4
@@ -12,9 +12,9 @@ var __assign = (this && this.__assign) || function () {
12
12
  import { fromByteArray, toByteArray } from 'base64-js';
13
13
  import { readEffects, writeEffects } from './effectsHelpers';
14
14
  import { clamp, createEnum, layerColors, MOCK_HANDLERS } from './helpers';
15
- import { readSignature, readUnicodeString, skipBytes, readUint32, readUint8, readFloat64, readUint16, readBytes, readInt16, checkSignature, readFloat32, readFixedPointPath32, readSection, readColor, readInt32, readPascalString, readUnicodeStringWithLength, readAsciiString, readPattern, } from './psdReader';
16
- import { writeZeros, writeSignature, writeBytes, writeUint32, writeUint16, writeFloat64, writeUint8, writeInt16, writeFloat32, writeFixedPointPath32, writeUnicodeString, writeSection, writeUnicodeStringWithPadding, writeColor, writePascalString, writeInt32, } from './psdWriter';
17
- import { Annt, BlnM, parsePercent, parseUnits, parseUnitsOrNumber, strokeStyleLineAlignment, strokeStyleLineCapType, strokeStyleLineJoinType, textGridding, unitsPercent, unitsValue, warpStyle, writeVersionAndDescriptor, readVersionAndDescriptor, Ornt, horzVrtcToXY, xyToHorzVrtc, serializeEffects, parseEffects, parseColor, serializeColor, serializeVectorContent, parseVectorContent, parseTrackList, serializeTrackList, BlrM, BlrQ, SmBQ, SmBM, DspM, UndA, Cnvr, RplS, SphM, Wvtp, ZZTy, Dstr, Chnl, MztT, Lns, blurType, DfsM, ExtT, ExtR, FlCl, CntE, WndM, Drct, IntE, IntC, FlMd, unitsPercentF, frac, ClrS, descBoundsToBounds, boundsToDescBounds, } from './descriptor';
15
+ import { readSignature, readUnicodeString, skipBytes, readUint32, readUint8, readFloat64, readUint16, readBytes, readInt16, checkSignature, readFloat32, readFixedPointPath32, readSection, readColor, readInt32, readPascalString, readUnicodeStringWithLength, readAsciiString, readPattern, readLayerInfo } from './psdReader';
16
+ import { writeZeros, writeSignature, writeBytes, writeUint32, writeUint16, writeFloat64, writeUint8, writeInt16, writeFloat32, writeFixedPointPath32, writeUnicodeString, writeSection, writeUnicodeStringWithPadding, writeColor, writePascalString, writeInt32 } from './psdWriter';
17
+ import { Annt, BlnM, parsePercent, parseUnits, parseUnitsOrNumber, strokeStyleLineAlignment, strokeStyleLineCapType, strokeStyleLineJoinType, textGridding, unitsPercent, unitsValue, warpStyle, writeVersionAndDescriptor, readVersionAndDescriptor, Ornt, horzVrtcToXY, xyToHorzVrtc, serializeEffects, parseEffects, parseColor, serializeColor, serializeVectorContent, parseVectorContent, parseTrackList, serializeTrackList, BlrM, BlrQ, SmBQ, SmBM, DspM, UndA, Cnvr, RplS, SphM, Wvtp, ZZTy, Dstr, Chnl, MztT, Lns, blurType, DfsM, ExtT, ExtR, FlCl, CntE, WndM, Drct, IntE, IntC, FlMd, unitsPercentF, frac, ClrS, descBoundsToBounds, boundsToDescBounds } from './descriptor';
18
18
  import { serializeEngineData, parseEngineData } from './engineData';
19
19
  import { encodeEngineData, decodeEngineData } from './text';
20
20
  var fromAtoZ = 'abcdefghijklmnopqrstuvwxyz';
@@ -49,9 +49,11 @@ addHandler('TySh', hasKey('text'), function (reader, target, leftBytes) {
49
49
  if (readInt16(reader) !== 50)
50
50
  throw new Error("Invalid TySh text version");
51
51
  var text = readVersionAndDescriptor(reader);
52
+ // console.log(require('util').inspect(text, false, 99, false), 'utf8');
52
53
  if (readInt16(reader) !== 1)
53
54
  throw new Error("Invalid TySh warp version");
54
55
  var warp = readVersionAndDescriptor(reader);
56
+ // console.log(require('util').inspect(warp, false, 99, false), 'utf8');
55
57
  target.text = {
56
58
  transform: transform,
57
59
  left: readFloat32(reader),
@@ -78,6 +80,7 @@ addHandler('TySh', hasKey('text'), function (reader, target, leftBytes) {
78
80
  if (text.EngineData) {
79
81
  var engineData = parseEngineData(text.EngineData);
80
82
  var textData = decodeEngineData(engineData);
83
+ // console.log(require('util').inspect(engineData, false, 99, false), 'utf8');
81
84
  // require('fs').writeFileSync(`layer-${target.name}.txt`, require('util').inspect(engineData, false, 99, false), 'utf8');
82
85
  // const before = parseEngineData(text.EngineData);
83
86
  // const after = encodeEngineData(engineData);
@@ -493,7 +496,7 @@ addHandler('lclr', hasKey('layerColor'), function (reader, target) {
493
496
  writeZeros(writer, 6);
494
497
  });
495
498
  addHandler('shmd', function (target) { return target.timestamp !== undefined || target.animationFrames !== undefined ||
496
- target.animationFrameFlags !== undefined || target.timeline !== undefined; }, function (reader, target, left, _, options) {
499
+ target.animationFrameFlags !== undefined || target.timeline !== undefined || target.comps !== undefined; }, function (reader, target, left, _, options) {
497
500
  var count = readUint32(reader);
498
501
  var _loop_1 = function (i) {
499
502
  checkSignature(reader, '8BIM');
@@ -557,8 +560,28 @@ addHandler('shmd', function (target) { return target.timestamp !== undefined ||
557
560
  target.timeline = timeline;
558
561
  // console.log('tmln:result', target.name, target.id, require('util').inspect(timeline, false, 99, true));
559
562
  }
563
+ else if (key === 'cmls') {
564
+ var desc = readVersionAndDescriptor(reader);
565
+ // console.log('cmls', require('util').inspect(desc, false, 99, true));
566
+ target.comps = {
567
+ settings: [],
568
+ };
569
+ if (desc.origFXRefPoint)
570
+ target.comps.originalEffectsReferencePoint = { x: desc.origFXRefPoint.Hrzn, y: desc.origFXRefPoint.Vrtc };
571
+ for (var _i = 0, _a = desc.layerSettings; _i < _a.length; _i++) {
572
+ var item = _a[_i];
573
+ target.comps.settings.push({ compList: item.compList });
574
+ var t = target.comps.settings[target.comps.settings.length - 1];
575
+ if ('enab' in item)
576
+ t.enabled = item.enab;
577
+ if (item.Ofst)
578
+ t.offset = { x: item.Ofst.Hrzn, y: item.Ofst.Vrtc };
579
+ if (item.FXRefPoint)
580
+ t.effectsReferencePoint = { x: item.FXRefPoint.Hrzn, y: item.FXRefPoint.Vrtc };
581
+ }
582
+ }
560
583
  else {
561
- options.logDevFeatures && console.log('Unhandled "shmd" section key', key);
584
+ options.logMissingFeatures && console.log('Unhandled "shmd" section key', key);
562
585
  }
563
586
  skipBytes(reader, left());
564
587
  });
@@ -568,7 +591,7 @@ addHandler('shmd', function (target) { return target.timestamp !== undefined ||
568
591
  }
569
592
  skipBytes(reader, left());
570
593
  }, function (writer, target, _, options) {
571
- var animationFrames = target.animationFrames, animationFrameFlags = target.animationFrameFlags, timestamp = target.timestamp, timeline = target.timeline;
594
+ var animationFrames = target.animationFrames, animationFrameFlags = target.animationFrameFlags, timestamp = target.timestamp, timeline = target.timeline, comps = target.comps;
572
595
  var count = 0;
573
596
  if (animationFrames)
574
597
  count++;
@@ -578,6 +601,8 @@ addHandler('shmd', function (target) { return target.timestamp !== undefined ||
578
601
  count++;
579
602
  if (timestamp !== undefined)
580
603
  count++;
604
+ if (comps)
605
+ count++;
581
606
  writeUint32(writer, count);
582
607
  if (animationFrames) {
583
608
  writeSignature(writer, '8BIM');
@@ -643,7 +668,7 @@ addHandler('shmd', function (target) { return target.timestamp !== undefined ||
643
668
  if (timeline.tracks) {
644
669
  desc.trackList = serializeTrackList(timeline.tracks);
645
670
  }
646
- var id = options.layerToId.get(target) || target.id || 0;
671
+ var id = options.layerToId.get(target) || target.id;
647
672
  if (!id)
648
673
  throw new Error('You need to provide layer.id value whan writing document with animations');
649
674
  desc.LyrI = id;
@@ -663,6 +688,37 @@ addHandler('shmd', function (target) { return target.timestamp !== undefined ||
663
688
  writeVersionAndDescriptor(writer, '', 'metadata', desc);
664
689
  }, true);
665
690
  }
691
+ if (comps) {
692
+ writeSignature(writer, '8BIM');
693
+ writeSignature(writer, 'cmls');
694
+ writeUint8(writer, 0); // copy (always false)
695
+ writeZeros(writer, 3);
696
+ writeSection(writer, 2, function () {
697
+ var id = options.layerToId.get(target) || target.id;
698
+ if (!id)
699
+ throw new Error('You need to provide layer.id value whan writing document with layer comps');
700
+ var desc = {};
701
+ if (comps.originalEffectsReferencePoint) {
702
+ desc.origFXRefPoint = { Hrzn: comps.originalEffectsReferencePoint.x, Vrtc: comps.originalEffectsReferencePoint.y };
703
+ }
704
+ desc.LyrI = id;
705
+ desc.layerSettings = [];
706
+ for (var _i = 0, _a = comps.settings; _i < _a.length; _i++) {
707
+ var item = _a[_i];
708
+ var t = {};
709
+ if (item.enabled !== undefined)
710
+ t.enab = item.enabled;
711
+ if (item.offset)
712
+ t.Ofst = { Hrzn: item.offset.x, Vrtc: item.offset.y };
713
+ if (item.effectsReferencePoint)
714
+ t.FXRefPoint = { Hrzn: item.effectsReferencePoint.x, Vrtc: item.effectsReferencePoint.y };
715
+ t.compList = item.compList;
716
+ desc.layerSettings.push(t);
717
+ }
718
+ // console.log('cmls', require('util').inspect(desc, false, 99, true));
719
+ writeVersionAndDescriptor(writer, '', 'null', desc);
720
+ }, true);
721
+ }
666
722
  });
667
723
  addHandler('vstk', hasKey('vectorStroke'), function (reader, target, left) {
668
724
  var desc = readVersionAndDescriptor(reader);
@@ -1839,6 +1895,42 @@ addHandler('fxrp', hasKey('referencePoint'), function (reader, target) {
1839
1895
  writeFloat64(writer, target.referencePoint.x);
1840
1896
  writeFloat64(writer, target.referencePoint.y);
1841
1897
  });
1898
+ addHandler('Lr16', function () { return false; }, function (reader, _target, _left, psd, options) {
1899
+ readLayerInfo(reader, psd, options);
1900
+ }, function (_writer, _target) {
1901
+ });
1902
+ addHandler('Lr32', function () { return false; }, function (reader, _target, _left, psd, options) {
1903
+ readLayerInfo(reader, psd, options);
1904
+ }, function (_writer, _target) {
1905
+ });
1906
+ addHandler('LMsk', hasKey('userMask'), function (reader, target) {
1907
+ target.userMask = {
1908
+ colorSpace: readColor(reader),
1909
+ opacity: readUint16(reader) / 0xff,
1910
+ };
1911
+ var flag = readUint8(reader);
1912
+ if (flag !== 128)
1913
+ throw new Error('Invalid flag value');
1914
+ skipBytes(reader, 1);
1915
+ }, function (writer, target) {
1916
+ var userMask = target.userMask;
1917
+ writeColor(writer, userMask.colorSpace);
1918
+ writeUint16(writer, clamp(userMask.opacity, 0, 1) * 0xff);
1919
+ writeUint8(writer, 128);
1920
+ writeZeros(writer, 1);
1921
+ });
1922
+ if (MOCK_HANDLERS) {
1923
+ addHandler('vowv', // appears with Lr16 section ?
1924
+ function (// appears with Lr16 section ?
1925
+ _) { return false; }, function (reader, target, left) {
1926
+ var value = readUint32(reader); // 2 ????
1927
+ reader;
1928
+ target;
1929
+ console.log('vowv', { value: value }, left());
1930
+ }, function (_writer, _target) {
1931
+ // TODO: write
1932
+ });
1933
+ }
1842
1934
  if (MOCK_HANDLERS) {
1843
1935
  addHandler('Patt', function (target) { return target._Patt !== undefined; }, function (reader, target, left) {
1844
1936
  // console.log('additional info: Patt');
@@ -2131,15 +2223,16 @@ addHandlerAlias('lnkD', 'lnk2');
2131
2223
  addHandlerAlias('lnk3', 'lnk2');
2132
2224
  addHandlerAlias('lnkE', 'lnk2');
2133
2225
  addHandler('pths', hasKey('pathList'), function (reader, target) {
2134
- var descriptor = readVersionAndDescriptor(reader);
2135
- target.pathList = []; // TODO: read paths (find example with non-empty list)
2136
- descriptor;
2137
- // console.log('pths', descriptor); // TODO: remove this
2226
+ var desc = readVersionAndDescriptor(reader, true);
2227
+ // console.log(require('util').inspect(desc, false, 99, true));
2228
+ // if (options.throwForMissingFeatures && desc?.pathList?.length) throw new Error('non-empty pathList in `pths`');
2229
+ desc;
2230
+ target.pathList = []; // TODO: read paths
2138
2231
  }, function (writer, _target) {
2139
- var descriptor = {
2232
+ var desc = {
2140
2233
  pathList: [], // TODO: write paths
2141
2234
  };
2142
- writeVersionAndDescriptor(writer, '', 'pathsDataClass', descriptor);
2235
+ writeVersionAndDescriptor(writer, '', 'pathsDataClass', desc);
2143
2236
  });
2144
2237
  addHandler('lyvr', hasKey('version'), function (reader, target) { return target.version = readUint32(reader); }, function (writer, target) { return writeUint32(writer, target.version); });
2145
2238
  function adjustmentType(type) {
@@ -2834,9 +2927,11 @@ addHandler('Txt2', hasKey('engineData'), function (reader, target, left) {
2834
2927
  var data = readBytes(reader, left());
2835
2928
  target.engineData = fromByteArray(data);
2836
2929
  // const engineData = parseEngineData(data);
2930
+ // const engineData2 = decodeEngineData2(engineData);
2837
2931
  // console.log(require('util').inspect(engineData, false, 99, true));
2838
- // require('fs').writeFileSync('resources/engineData2Simple.txt', require('util').inspect(engineData, false, 99, false), 'utf8');
2839
- // require('fs').writeFileSync('test_data.json', JSON.stringify(ed, null, 2), 'utf8');
2932
+ // require('fs').writeFileSync('test_data.bin', data);
2933
+ // require('fs').writeFileSync('test_data.txt', require('util').inspect(engineData, false, 99, false), 'utf8');
2934
+ // require('fs').writeFileSync('test_data.json', JSON.stringify(engineData2, null, 2), 'utf8');
2840
2935
  }, function (writer, target) {
2841
2936
  var buffer = toByteArray(target.engineData);
2842
2937
  writeBytes(writer, buffer);