ag-psd 22.0.2 → 23.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.
package/dist/bundle.js CHANGED
@@ -1601,11 +1601,22 @@ function parseFilterFXItem(f, options) {
1601
1601
  lightDirection: f.Fltr.LghD,
1602
1602
  specularity: f.Fltr.specularity,
1603
1603
  } });
1604
- case 'LqFy': {
1605
- return __assign(__assign({}, base), { type: 'liquify', filter: {
1606
- liquifyMesh: f.Fltr.LqMe,
1607
- } });
1608
- }
1604
+ case 'LqFy':
1605
+ {
1606
+ return __assign(__assign({}, base), { type: 'liquify', filter: {
1607
+ liquifyMesh: f.Fltr.LqMe,
1608
+ } });
1609
+ }
1610
+ ;
1611
+ case 'perspectiveWarpTransform':
1612
+ {
1613
+ return __assign(__assign({}, base), { type: 'perspective warp', filter: {
1614
+ vertices: f.Fltr.vertices.map(hrznVrtcToPoint),
1615
+ warpedVertices: f.Fltr.warpedVertices.map(hrznVrtcToPoint),
1616
+ quads: f.Fltr.quads.map(function (q) { return q.indices; }),
1617
+ } });
1618
+ }
1619
+ ;
1609
1620
  default:
1610
1621
  if (options.throwForMissingFeatures) {
1611
1622
  throw new Error("Unknown filter classId: ".concat(f.Fltr._classID));
@@ -2078,6 +2089,13 @@ function serializeFilterFXItem(f) {
2078
2089
  _classID: 'LqFy',
2079
2090
  LqMe: f.filter.liquifyMesh,
2080
2091
  }, filterID: 1282492025 });
2092
+ case 'perspective warp': return __assign(__assign({}, base), { Fltr: {
2093
+ _name: 'Perspective Warp',
2094
+ _classID: 'perspectiveWarpTransform',
2095
+ vertices: f.filter.vertices.map(pointToHrznVrtc),
2096
+ warpedVertices: f.filter.warpedVertices.map(pointToHrznVrtc),
2097
+ quads: f.filter.quads.map(function (indices) { return ({ indices: indices }); }),
2098
+ }, filterID: 442 });
2081
2099
  default: throw new Error("Unknow filter type: ".concat(f.type));
2082
2100
  }
2083
2101
  }
@@ -2432,130 +2450,170 @@ addHandler('Anno', function (target) { return target.annotations !== undefined;
2432
2450
  writer.view.setUint32(dataOffset - 4, writer.offset - dataOffset, false);
2433
2451
  }
2434
2452
  });
2435
- addHandler('lnk2', function (target) { return !!target.linkedFiles && target.linkedFiles.length > 0; }, function (reader, target, left) {
2436
- var psd = target;
2437
- psd.linkedFiles = psd.linkedFiles || [];
2438
- while (left() > 8) {
2439
- var size = readLength64(reader); // size
2440
- var startOffset = reader.offset;
2441
- var type = (0, psdReader_1.readSignature)(reader);
2442
- // liFD - linked file data
2443
- // liFE - linked file external
2444
- // liFA - linked file alias
2445
- var version = (0, psdReader_1.readInt32)(reader);
2446
- var id = (0, psdReader_1.readPascalString)(reader, 1);
2447
- var name_3 = (0, psdReader_1.readUnicodeString)(reader);
2448
- var fileType = (0, psdReader_1.readSignature)(reader).trim(); // ' ' if empty
2449
- var fileCreator = (0, psdReader_1.readSignature)(reader).trim(); // ' ' or '\0\0\0\0' if empty
2450
- var dataSize = readLength64(reader);
2451
- var hasFileOpenDescriptor = (0, psdReader_1.readUint8)(reader);
2452
- var fileOpenDescriptor = hasFileOpenDescriptor ? (0, descriptor_1.readVersionAndDescriptor)(reader) : undefined;
2453
- var linkedFileDescriptor = type === 'liFE' ? (0, descriptor_1.readVersionAndDescriptor)(reader) : undefined;
2454
- var file = { id: id, name: name_3 };
2455
- if (fileType)
2456
- file.type = fileType;
2457
- if (fileCreator)
2458
- file.creator = fileCreator;
2459
- if (fileOpenDescriptor) {
2460
- file.descriptor = {
2461
- compInfo: {
2462
- compID: fileOpenDescriptor.compInfo.compID,
2463
- originalCompID: fileOpenDescriptor.compInfo.originalCompID,
2464
- }
2465
- };
2466
- }
2467
- if (type === 'liFE' && version > 3) {
2468
- var year = (0, psdReader_1.readInt32)(reader);
2469
- var month = (0, psdReader_1.readUint8)(reader);
2470
- var day = (0, psdReader_1.readUint8)(reader);
2471
- var hour = (0, psdReader_1.readUint8)(reader);
2472
- var minute = (0, psdReader_1.readUint8)(reader);
2473
- var seconds = (0, psdReader_1.readFloat64)(reader);
2474
- var wholeSeconds = Math.floor(seconds);
2475
- var ms = (seconds - wholeSeconds) * 1000;
2476
- file.time = (new Date(year, month, day, hour, minute, wholeSeconds, ms)).toISOString();
2477
- }
2478
- var fileSize = type === 'liFE' ? readLength64(reader) : 0;
2479
- if (type === 'liFA')
2480
- (0, psdReader_1.skipBytes)(reader, 8);
2481
- if (type === 'liFD')
2482
- file.data = (0, psdReader_1.readBytes)(reader, dataSize); // seems to be a typo in docs
2483
- if (version >= 5)
2484
- file.childDocumentID = (0, psdReader_1.readUnicodeString)(reader);
2485
- if (version >= 6)
2486
- file.assetModTime = (0, psdReader_1.readFloat64)(reader);
2487
- if (version >= 7)
2488
- file.assetLockedState = (0, psdReader_1.readUint8)(reader);
2489
- if (type === 'liFE' && version === 2)
2490
- file.data = (0, psdReader_1.readBytes)(reader, fileSize);
2491
- if (reader.skipLinkedFilesData)
2492
- file.data = undefined;
2493
- psd.linkedFiles.push(file);
2494
- linkedFileDescriptor;
2495
- while (size % 4)
2496
- size++;
2497
- reader.offset = startOffset + size;
2498
- }
2499
- (0, psdReader_1.skipBytes)(reader, left()); // ?
2500
- }, function (writer, target) {
2501
- var psd = target;
2502
- for (var _i = 0, _a = psd.linkedFiles; _i < _a.length; _i++) {
2503
- var file = _a[_i];
2504
- var version = 2;
2505
- if (file.assetLockedState != null)
2506
- version = 7;
2507
- else if (file.assetModTime != null)
2508
- version = 6;
2509
- else if (file.childDocumentID != null)
2510
- version = 5;
2511
- // TODO: else if (file.time != null) version = 3; (only for liFE)
2512
- (0, psdWriter_1.writeUint32)(writer, 0);
2513
- (0, psdWriter_1.writeUint32)(writer, 0); // size
2514
- var sizeOffset = writer.offset;
2515
- (0, psdWriter_1.writeSignature)(writer, file.data ? 'liFD' : 'liFA');
2516
- (0, psdWriter_1.writeInt32)(writer, version);
2517
- if (!file.id || typeof file.id !== 'string' || !/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/.test(file.id)) {
2518
- throw new Error('Linked file ID must be in a GUID format (example: 20953ddb-9391-11ec-b4f1-c15674f50bc4)');
2519
- }
2520
- (0, psdWriter_1.writePascalString)(writer, file.id, 1);
2521
- (0, psdWriter_1.writeUnicodeStringWithPadding)(writer, file.name || '');
2522
- (0, psdWriter_1.writeSignature)(writer, file.type ? "".concat(file.type, " ").substring(0, 4) : ' ');
2523
- (0, psdWriter_1.writeSignature)(writer, file.creator ? "".concat(file.creator, " ").substring(0, 4) : '\0\0\0\0');
2524
- writeLength64(writer, file.data ? file.data.byteLength : 0);
2525
- if (file.descriptor && file.descriptor.compInfo) {
2526
- var desc = {
2527
- compInfo: {
2528
- compID: file.descriptor.compInfo.compID,
2529
- originalCompID: file.descriptor.compInfo.originalCompID,
2530
- }
2531
- };
2532
- (0, psdWriter_1.writeUint8)(writer, 1);
2533
- (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
2534
- }
2535
- else {
2536
- (0, psdWriter_1.writeUint8)(writer, 0);
2453
+ function createLnkHandler(tag) {
2454
+ addHandler(tag, function (target) {
2455
+ var psd = target;
2456
+ if (!psd.linkedFiles || !psd.linkedFiles.length)
2457
+ return false;
2458
+ if (tag === 'lnkE' && !psd.linkedFiles.some(function (f) { return f.linkedFile; }))
2459
+ return false;
2460
+ return true;
2461
+ }, function (reader, target, left, _psd) {
2462
+ var psd = target;
2463
+ psd.linkedFiles = psd.linkedFiles || [];
2464
+ while (left() > 8) {
2465
+ var size = readLength64(reader);
2466
+ var startOffset = reader.offset;
2467
+ var type = (0, psdReader_1.readSignature)(reader);
2468
+ // liFD - linked file data
2469
+ // liFE - linked file external
2470
+ // liFA - linked file alias
2471
+ var version = (0, psdReader_1.readInt32)(reader);
2472
+ var id = (0, psdReader_1.readPascalString)(reader, 1);
2473
+ var name_3 = (0, psdReader_1.readUnicodeString)(reader);
2474
+ var fileType = (0, psdReader_1.readSignature)(reader).trim(); // ' ' if empty
2475
+ var fileCreator = (0, psdReader_1.readSignature)(reader).trim(); // ' ' or '\0\0\0\0' if empty
2476
+ var dataSize = readLength64(reader);
2477
+ var hasFileOpenDescriptor = (0, psdReader_1.readUint8)(reader);
2478
+ var fileOpenDescriptor = hasFileOpenDescriptor ? (0, descriptor_1.readVersionAndDescriptor)(reader) : undefined;
2479
+ var linkedFileDescriptor = type === 'liFE' ? (0, descriptor_1.readVersionAndDescriptor)(reader) : undefined;
2480
+ var file = { id: id, name: name_3 };
2481
+ if (fileType)
2482
+ file.type = fileType;
2483
+ if (fileCreator)
2484
+ file.creator = fileCreator;
2485
+ if (fileOpenDescriptor) {
2486
+ file.descriptor = {
2487
+ compInfo: {
2488
+ compID: fileOpenDescriptor.compInfo.compID,
2489
+ originalCompID: fileOpenDescriptor.compInfo.originalCompID,
2490
+ }
2491
+ };
2492
+ }
2493
+ if (type === 'liFE' && version > 3) {
2494
+ var year = (0, psdReader_1.readInt32)(reader);
2495
+ var month = (0, psdReader_1.readUint8)(reader);
2496
+ var day = (0, psdReader_1.readUint8)(reader);
2497
+ var hour = (0, psdReader_1.readUint8)(reader);
2498
+ var minute = (0, psdReader_1.readUint8)(reader);
2499
+ var seconds = (0, psdReader_1.readFloat64)(reader);
2500
+ var wholeSeconds = Math.floor(seconds);
2501
+ var ms = (seconds - wholeSeconds) * 1000;
2502
+ file.time = (new Date(Date.UTC(year, month, day, hour, minute, wholeSeconds, ms))).toISOString();
2503
+ }
2504
+ var fileSize = type === 'liFE' ? readLength64(reader) : 0;
2505
+ if (type === 'liFA')
2506
+ (0, psdReader_1.skipBytes)(reader, 8);
2507
+ if (type === 'liFD')
2508
+ file.data = (0, psdReader_1.readBytes)(reader, dataSize); // seems to be a typo in docs
2509
+ if (version >= 5)
2510
+ file.childDocumentID = (0, psdReader_1.readUnicodeString)(reader);
2511
+ if (version >= 6)
2512
+ file.assetModTime = (0, psdReader_1.readFloat64)(reader);
2513
+ if (version >= 7)
2514
+ file.assetLockedState = (0, psdReader_1.readUint8)(reader);
2515
+ if (type === 'liFE' && version === 2)
2516
+ file.data = (0, psdReader_1.readBytes)(reader, fileSize);
2517
+ if (reader.skipLinkedFilesData)
2518
+ file.data = undefined;
2519
+ if (tag === 'lnkE') {
2520
+ file.linkedFile = {
2521
+ fileSize: fileSize,
2522
+ name: (linkedFileDescriptor === null || linkedFileDescriptor === void 0 ? void 0 : linkedFileDescriptor['Nm ']) || '',
2523
+ fullPath: (linkedFileDescriptor === null || linkedFileDescriptor === void 0 ? void 0 : linkedFileDescriptor.fullPath) || '',
2524
+ originalPath: (linkedFileDescriptor === null || linkedFileDescriptor === void 0 ? void 0 : linkedFileDescriptor.originalPath) || '',
2525
+ relativePath: (linkedFileDescriptor === null || linkedFileDescriptor === void 0 ? void 0 : linkedFileDescriptor.relPath) || '',
2526
+ };
2527
+ }
2528
+ psd.linkedFiles.push(file);
2529
+ while (size % 4)
2530
+ size++;
2531
+ reader.offset = startOffset + size;
2537
2532
  }
2538
- if (file.data)
2539
- (0, psdWriter_1.writeBytes)(writer, file.data);
2540
- else
2533
+ (0, psdReader_1.skipBytes)(reader, left()); // ?
2534
+ }, function (writer, target) {
2535
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
2536
+ var psd = target;
2537
+ for (var _i = 0, _k = psd.linkedFiles; _i < _k.length; _i++) {
2538
+ var file = _k[_i];
2539
+ if ((tag === 'lnkE') !== !!file.linkedFile)
2540
+ continue;
2541
+ var version = 2;
2542
+ if (file.assetLockedState != null)
2543
+ version = 7;
2544
+ else if (file.assetModTime != null)
2545
+ version = 6;
2546
+ else if (file.childDocumentID != null)
2547
+ version = 5;
2548
+ else if (tag == 'lnkE')
2549
+ version = 3;
2541
2550
  writeLength64(writer, 0);
2542
- if (version >= 5)
2543
- (0, psdWriter_1.writeUnicodeStringWithPadding)(writer, file.childDocumentID || '');
2544
- if (version >= 6)
2545
- (0, psdWriter_1.writeFloat64)(writer, file.assetModTime || 0);
2546
- if (version >= 7)
2547
- (0, psdWriter_1.writeUint8)(writer, file.assetLockedState || 0);
2548
- var size = writer.offset - sizeOffset;
2549
- writer.view.setUint32(sizeOffset - 4, size, false); // write size
2550
- while (size % 4) {
2551
- size++;
2552
- (0, psdWriter_1.writeUint8)(writer, 0);
2551
+ var sizeOffset = writer.offset;
2552
+ (0, psdWriter_1.writeSignature)(writer, (tag === 'lnkE') ? 'liFE' : (file.data ? 'liFD' : 'liFA'));
2553
+ (0, psdWriter_1.writeInt32)(writer, version);
2554
+ if (!file.id || typeof file.id !== 'string' || !/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/.test(file.id)) {
2555
+ throw new Error('Linked file ID must be in a GUID format (example: 20953ddb-9391-11ec-b4f1-c15674f50bc4)');
2556
+ }
2557
+ (0, psdWriter_1.writePascalString)(writer, file.id, 1);
2558
+ (0, psdWriter_1.writeUnicodeStringWithPadding)(writer, file.name || '');
2559
+ (0, psdWriter_1.writeSignature)(writer, file.type ? "".concat(file.type, " ").substring(0, 4) : ' ');
2560
+ (0, psdWriter_1.writeSignature)(writer, file.creator ? "".concat(file.creator, " ").substring(0, 4) : '\0\0\0\0');
2561
+ writeLength64(writer, file.data ? file.data.byteLength : 0);
2562
+ if (file.descriptor && file.descriptor.compInfo) {
2563
+ var desc = {
2564
+ compInfo: {
2565
+ compID: file.descriptor.compInfo.compID,
2566
+ originalCompID: file.descriptor.compInfo.originalCompID,
2567
+ },
2568
+ };
2569
+ (0, psdWriter_1.writeUint8)(writer, 1);
2570
+ (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
2571
+ }
2572
+ else {
2573
+ (0, psdWriter_1.writeUint8)(writer, 0);
2574
+ }
2575
+ if (tag === 'lnkE') {
2576
+ var desc = {
2577
+ descVersion: 2,
2578
+ 'Nm ': (_b = (_a = file.linkedFile) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '',
2579
+ fullPath: (_d = (_c = file.linkedFile) === null || _c === void 0 ? void 0 : _c.fullPath) !== null && _d !== void 0 ? _d : '',
2580
+ originalPath: (_f = (_e = file.linkedFile) === null || _e === void 0 ? void 0 : _e.originalPath) !== null && _f !== void 0 ? _f : '',
2581
+ relPath: (_h = (_g = file.linkedFile) === null || _g === void 0 ? void 0 : _g.relativePath) !== null && _h !== void 0 ? _h : '',
2582
+ };
2583
+ (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'ExternalFileLink', desc);
2584
+ var time = file.time ? new Date(file.time) : new Date();
2585
+ (0, psdWriter_1.writeInt32)(writer, time.getUTCFullYear());
2586
+ (0, psdWriter_1.writeUint8)(writer, time.getUTCMonth());
2587
+ (0, psdWriter_1.writeUint8)(writer, time.getUTCDate());
2588
+ (0, psdWriter_1.writeUint8)(writer, time.getUTCHours());
2589
+ (0, psdWriter_1.writeUint8)(writer, time.getUTCMinutes());
2590
+ (0, psdWriter_1.writeFloat64)(writer, time.getUTCSeconds() + time.getUTCMilliseconds() / 1000);
2591
+ }
2592
+ if (file.data) {
2593
+ (0, psdWriter_1.writeBytes)(writer, file.data);
2594
+ }
2595
+ else {
2596
+ writeLength64(writer, ((_j = file.linkedFile) === null || _j === void 0 ? void 0 : _j.fileSize) || 0);
2597
+ }
2598
+ if (version >= 5)
2599
+ (0, psdWriter_1.writeUnicodeStringWithPadding)(writer, file.childDocumentID || '');
2600
+ if (version >= 6)
2601
+ (0, psdWriter_1.writeFloat64)(writer, file.assetModTime || 0);
2602
+ if (version >= 7)
2603
+ (0, psdWriter_1.writeUint8)(writer, file.assetLockedState || 0);
2604
+ var size = writer.offset - sizeOffset;
2605
+ writer.view.setUint32(sizeOffset - 4, size, false); // write size
2606
+ while (size % 4) {
2607
+ size++;
2608
+ (0, psdWriter_1.writeUint8)(writer, 0);
2609
+ }
2553
2610
  }
2554
- }
2555
- });
2611
+ });
2612
+ }
2613
+ createLnkHandler('lnk2');
2614
+ createLnkHandler('lnkE');
2556
2615
  addHandlerAlias('lnkD', 'lnk2');
2557
2616
  addHandlerAlias('lnk3', 'lnk2');
2558
- addHandlerAlias('lnkE', 'lnk2');
2559
2617
  addHandler('pths', hasKey('pathList'), function (reader, target) {
2560
2618
  var desc = (0, descriptor_1.readVersionAndDescriptor)(reader, true);
2561
2619
  // console.log(require('util').inspect(desc, false, 99, true));
@@ -3713,7 +3771,7 @@ var typeToField = {
3713
3771
  'Txt ', 'printerName', 'Nm ', 'Idnt', 'blackAndWhitePresetFileName', 'LUT3DFileName',
3714
3772
  'presetFileName', 'curvesPresetFileName', 'mixerPresetFileName', 'placed', 'description', 'reason',
3715
3773
  'artboardPresetName', 'json', 'clipID', 'relPath', 'fullPath', 'mediaDescriptor', 'Msge',
3716
- 'altTag', 'url', 'cellText', 'preset', 'KnNm', 'FPth', 'comment',
3774
+ 'altTag', 'url', 'cellText', 'preset', 'KnNm', 'FPth', 'comment', 'originalPath',
3717
3775
  ],
3718
3776
  'tdta': [
3719
3777
  'EngineData', 'LUT3DFileData', 'indexArray', 'originalVertexArray', 'deformedVertexArray',
@@ -7604,12 +7662,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
7604
7662
  exports.writePsdBuffer = exports.writePsdUint8Array = exports.writePsd = exports.readPsd = exports.byteArrayToBase64 = exports.initializeCanvas = void 0;
7605
7663
  var psdWriter_1 = require("./psdWriter");
7606
7664
  var psdReader_1 = require("./psdReader");
7665
+ var base64_js_1 = require("base64-js");
7607
7666
  __exportStar(require("./abr"), exports);
7608
7667
  __exportStar(require("./csh"), exports);
7609
7668
  var helpers_1 = require("./helpers");
7610
7669
  Object.defineProperty(exports, "initializeCanvas", { enumerable: true, get: function () { return helpers_1.initializeCanvas; } });
7611
7670
  __exportStar(require("./psd"), exports);
7612
- var base64_js_1 = require("base64-js");
7613
7671
  exports.byteArrayToBase64 = base64_js_1.fromByteArray;
7614
7672
  function readPsd(buffer, options) {
7615
7673
  var reader = 'buffer' in buffer ?
@@ -9274,13 +9332,6 @@ function addChildren(layers, children) {
9274
9332
  sectionDivider: {
9275
9333
  type: 3 /* SectionDividerType.BoundingSectionDivider */,
9276
9334
  },
9277
- // TESTING
9278
- // nameSource: 'lset',
9279
- // id: [4, 0, 0, 8, 11, 0, 0, 0, 0, 14][layers.length] || 0,
9280
- // layerColor: 'none',
9281
- // timestamp: [1611346817.349021, 0, 0, 1611346817.349175, 1611346817.3491833, 0, 0, 0, 0, 1611346817.349832][layers.length] || 0,
9282
- // protected: {},
9283
- // referencePoint: { x: 0, y: 0 },
9284
9335
  });
9285
9336
  addChildren(layers, c.children);
9286
9337
  layers.push(__assign(__assign({}, c), { blendMode: c.blendMode === 'pass through' ? 'normal' : c.blendMode, sectionDivider: {
@@ -149,6 +149,12 @@ export interface WarpDescriptor {
149
149
  Left: DescriptorUnitsValue;
150
150
  Btom: DescriptorUnitsValue;
151
151
  Rght: DescriptorUnitsValue;
152
+ } | {
153
+ _classID: 'classFloatRect';
154
+ 'Top ': number;
155
+ Left: number;
156
+ Btom: number;
157
+ Rght: number;
152
158
  };
153
159
  uOrder: number;
154
160
  vOrder: number;
@@ -164,7 +164,7 @@ var typeToField = {
164
164
  'Txt ', 'printerName', 'Nm ', 'Idnt', 'blackAndWhitePresetFileName', 'LUT3DFileName',
165
165
  'presetFileName', 'curvesPresetFileName', 'mixerPresetFileName', 'placed', 'description', 'reason',
166
166
  'artboardPresetName', 'json', 'clipID', 'relPath', 'fullPath', 'mediaDescriptor', 'Msge',
167
- 'altTag', 'url', 'cellText', 'preset', 'KnNm', 'FPth', 'comment',
167
+ 'altTag', 'url', 'cellText', 'preset', 'KnNm', 'FPth', 'comment', 'originalPath',
168
168
  ],
169
169
  'tdta': [
170
170
  'EngineData', 'LUT3DFileData', 'indexArray', 'originalVertexArray', 'deformedVertexArray',