ag-psd 20.2.1 → 20.2.3

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
@@ -1272,7 +1272,7 @@ function pointToHrznVrtc(point) {
1272
1272
  Vrtc: (0, descriptor_1.unitsValue)(point.y, 'y'),
1273
1273
  };
1274
1274
  }
1275
- function parseFilterFXItem(f) {
1275
+ function parseFilterFXItem(f, options) {
1276
1276
  var base = {
1277
1277
  name: f['Nm '],
1278
1278
  opacity: (0, descriptor_1.parsePercent)(f.blendOptions.Opct),
@@ -1282,339 +1282,353 @@ function parseFilterFXItem(f) {
1282
1282
  foregroundColor: (0, descriptor_1.parseColor)(f.FrgC),
1283
1283
  backgroundColor: (0, descriptor_1.parseColor)(f.BckC),
1284
1284
  };
1285
- switch (f.filterID) {
1286
- case 1098281575: return __assign(__assign({}, base), { type: 'average' });
1287
- case 1114403360: return __assign(__assign({}, base), { type: 'blur' });
1288
- case 1114403405: return __assign(__assign({}, base), { type: 'blur more' });
1289
- case 697: return __assign(__assign({}, base), { type: 'box blur', filter: {
1290
- radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1291
- } });
1292
- case 1198747202: return __assign(__assign({}, base), { type: 'gaussian blur', filter: {
1293
- radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1294
- } });
1295
- case 1299476034: return __assign(__assign({}, base), { type: 'motion blur', filter: {
1296
- angle: f.Fltr.Angl,
1297
- distance: (0, descriptor_1.parseUnits)(f.Fltr.Dstn),
1298
- } });
1299
- case 1382313026: return __assign(__assign({}, base), { type: 'radial blur', filter: {
1300
- amount: f.Fltr.Amnt,
1301
- method: descriptor_1.BlrM.decode(f.Fltr.BlrM),
1302
- quality: descriptor_1.BlrQ.decode(f.Fltr.BlrQ),
1303
- } });
1304
- case 702: return __assign(__assign({}, base), { type: 'shape blur', filter: {
1305
- radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1306
- customShape: { name: f.Fltr.customShape['Nm '], id: f.Fltr.customShape.Idnt },
1307
- } });
1308
- case 1399681602: return __assign(__assign({}, base), { type: 'smart blur', filter: {
1309
- radius: f.Fltr['Rds '],
1310
- threshold: f.Fltr.Thsh,
1311
- quality: descriptor_1.SmBQ.decode(f.Fltr.SmBQ),
1312
- mode: descriptor_1.SmBM.decode(f.Fltr.SmBM),
1313
- } });
1314
- case 701: return __assign(__assign({}, base), { type: 'surface blur', filter: {
1315
- radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1316
- threshold: f.Fltr.Thsh,
1317
- } });
1318
- case 1148416108: return __assign(__assign({}, base), { type: 'displace', filter: {
1319
- horizontalScale: f.Fltr.HrzS,
1320
- verticalScale: f.Fltr.VrtS,
1321
- displacementMap: descriptor_1.DspM.decode(f.Fltr.DspM),
1322
- undefinedAreas: descriptor_1.UndA.decode(f.Fltr.UndA),
1323
- displacementFile: {
1324
- signature: f.Fltr.DspF.sig,
1325
- path: f.Fltr.DspF.path, // TODO: this is decoded incorrectly ???
1326
- },
1327
- } });
1328
- case 1349411688: return __assign(__assign({}, base), { type: 'pinch', filter: {
1329
- amount: f.Fltr.Amnt,
1330
- } });
1331
- case 1349284384: return __assign(__assign({}, base), { type: 'polar coordinates', filter: {
1332
- conversion: descriptor_1.Cnvr.decode(f.Fltr.Cnvr),
1333
- } });
1334
- case 1383099493: return __assign(__assign({}, base), { type: 'ripple', filter: {
1335
- amount: f.Fltr.Amnt,
1336
- size: descriptor_1.RplS.decode(f.Fltr.RplS),
1337
- } });
1338
- case 1399353888: return __assign(__assign({}, base), { type: 'shear', filter: {
1339
- shearPoints: f.Fltr.ShrP.map(function (p) { return ({ x: p.Hrzn, y: p.Vrtc }); }),
1340
- shearStart: f.Fltr.ShrS,
1341
- shearEnd: f.Fltr.ShrE,
1342
- undefinedAreas: descriptor_1.UndA.decode(f.Fltr.UndA),
1343
- } });
1344
- case 1399875698: return __assign(__assign({}, base), { type: 'spherize', filter: {
1345
- amount: f.Fltr.Amnt,
1346
- mode: descriptor_1.SphM.decode(f.Fltr.SphM),
1347
- } });
1348
- case 1417114220: return __assign(__assign({}, base), { type: 'twirl', filter: {
1349
- angle: f.Fltr.Angl,
1350
- } });
1351
- case 1466005093: return __assign(__assign({}, base), { type: 'wave', filter: {
1352
- numberOfGenerators: f.Fltr.NmbG,
1353
- type: descriptor_1.Wvtp.decode(f.Fltr.Wvtp),
1354
- wavelength: { min: f.Fltr.WLMn, max: f.Fltr.WLMx },
1355
- amplitude: { min: f.Fltr.AmMn, max: f.Fltr.AmMx },
1356
- scale: { x: f.Fltr.SclH, y: f.Fltr.SclV },
1357
- randomSeed: f.Fltr.RndS,
1358
- undefinedAreas: descriptor_1.UndA.decode(f.Fltr.UndA),
1359
- } });
1360
- case 1516722791: return __assign(__assign({}, base), { type: 'zigzag', filter: {
1361
- amount: f.Fltr.Amnt,
1362
- ridges: f.Fltr.NmbR,
1363
- style: descriptor_1.ZZTy.decode(f.Fltr.ZZTy),
1364
- } });
1365
- case 1097092723: return __assign(__assign({}, base), { type: 'add noise', filter: {
1366
- amount: (0, descriptor_1.parsePercent)(f.Fltr.Nose),
1367
- distribution: descriptor_1.Dstr.decode(f.Fltr.Dstr),
1368
- monochromatic: f.Fltr.Mnch,
1369
- randomSeed: f.Fltr.FlRs,
1370
- } });
1371
- case 1148416099: return __assign(__assign({}, base), { type: 'despeckle' });
1372
- case 1148417107: return __assign(__assign({}, base), { type: 'dust and scratches', filter: {
1373
- radius: f.Fltr['Rds '],
1374
- threshold: f.Fltr.Thsh,
1375
- } });
1376
- case 1298427424: return __assign(__assign({}, base), { type: 'median', filter: {
1377
- radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1378
- } });
1379
- case 633: return __assign(__assign({}, base), { type: 'reduce noise', filter: {
1380
- preset: f.Fltr.preset,
1381
- removeJpegArtifact: f.Fltr.removeJPEGArtifact,
1382
- reduceColorNoise: (0, descriptor_1.parsePercent)(f.Fltr.ClNs),
1383
- sharpenDetails: (0, descriptor_1.parsePercent)(f.Fltr.Shrp),
1384
- channelDenoise: f.Fltr.channelDenoise.map(function (c) { return (__assign({ channels: c.Chnl.map(function (i) { return descriptor_1.Chnl.decode(i); }), amount: c.Amnt }, (c.EdgF ? { preserveDetails: c.EdgF } : {}))); }),
1385
- } });
1386
- case 1131180616: return __assign(__assign({}, base), { type: 'color halftone', filter: {
1387
- radius: f.Fltr['Rds '],
1388
- angle1: f.Fltr.Ang1,
1389
- angle2: f.Fltr.Ang2,
1390
- angle3: f.Fltr.Ang3,
1391
- angle4: f.Fltr.Ang4,
1392
- } });
1393
- case 1131574132: return __assign(__assign({}, base), { type: 'crystallize', filter: {
1394
- cellSize: f.Fltr.ClSz,
1395
- randomSeed: f.Fltr.FlRs,
1396
- } });
1397
- case 1180922912: return __assign(__assign({}, base), { type: 'facet' });
1398
- case 1181902701: return __assign(__assign({}, base), { type: 'fragment' });
1399
- case 1299870830: return __assign(__assign({}, base), { type: 'mezzotint', filter: {
1400
- type: descriptor_1.MztT.decode(f.Fltr.MztT),
1401
- randomSeed: f.Fltr.FlRs,
1402
- } });
1403
- case 1299407648: return __assign(__assign({}, base), { type: 'mosaic', filter: {
1404
- cellSize: (0, descriptor_1.parseUnits)(f.Fltr.ClSz),
1405
- } });
1406
- case 1349416044: return __assign(__assign({}, base), { type: 'pointillize', filter: {
1407
- cellSize: f.Fltr.ClSz,
1408
- randomSeed: f.Fltr.FlRs,
1409
- } });
1410
- case 1131177075: return __assign(__assign({}, base), { type: 'clouds', filter: {
1411
- randomSeed: f.Fltr.FlRs,
1412
- } });
1413
- case 1147564611: return __assign(__assign({}, base), { type: 'difference clouds', filter: {
1414
- randomSeed: f.Fltr.FlRs,
1415
- } });
1416
- case 1180856947: return __assign(__assign({}, base), { type: 'fibers', filter: {
1417
- variance: f.Fltr.Vrnc,
1418
- strength: f.Fltr.Strg,
1419
- randomSeed: f.Fltr.RndS,
1420
- } });
1421
- case 1282306886: return __assign(__assign({}, base), { type: 'lens flare', filter: {
1422
- brightness: f.Fltr.Brgh,
1423
- position: { x: f.Fltr.FlrC.Hrzn, y: f.Fltr.FlrC.Vrtc },
1424
- lensType: descriptor_1.Lns.decode(f.Fltr['Lns ']),
1425
- } });
1426
- case 1399353968: return __assign(__assign({}, base), { type: 'sharpen' });
1427
- case 1399353925: return __assign(__assign({}, base), { type: 'sharpen edges' });
1428
- case 1399353933: return __assign(__assign({}, base), { type: 'sharpen more' });
1429
- case 698: return __assign(__assign({}, base), { type: 'smart sharpen', filter: {
1430
- amount: (0, descriptor_1.parsePercent)(f.Fltr.Amnt),
1431
- radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1432
- threshold: f.Fltr.Thsh,
1433
- angle: f.Fltr.Angl,
1434
- moreAccurate: f.Fltr.moreAccurate,
1435
- blur: descriptor_1.blurType.decode(f.Fltr.blur),
1436
- preset: f.Fltr.preset,
1437
- shadow: {
1438
- fadeAmount: (0, descriptor_1.parsePercent)(f.Fltr.sdwM.Amnt),
1439
- tonalWidth: (0, descriptor_1.parsePercent)(f.Fltr.sdwM.Wdth),
1440
- radius: f.Fltr.sdwM['Rds '],
1441
- },
1442
- highlight: {
1443
- fadeAmount: (0, descriptor_1.parsePercent)(f.Fltr.hglM.Amnt),
1444
- tonalWidth: (0, descriptor_1.parsePercent)(f.Fltr.hglM.Wdth),
1445
- radius: f.Fltr.hglM['Rds '],
1446
- },
1447
- } });
1448
- case 1433301837: return __assign(__assign({}, base), { type: 'unsharp mask', filter: {
1449
- amount: (0, descriptor_1.parsePercent)(f.Fltr.Amnt),
1450
- radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1451
- threshold: f.Fltr.Thsh,
1452
- } });
1453
- case 1147564832: return __assign(__assign({}, base), { type: 'diffuse', filter: {
1454
- mode: descriptor_1.DfsM.decode(f.Fltr['Md ']),
1455
- randomSeed: f.Fltr.FlRs,
1456
- } });
1457
- case 1164796531: return __assign(__assign({}, base), { type: 'emboss', filter: {
1458
- angle: f.Fltr.Angl,
1459
- height: f.Fltr.Hght,
1460
- amount: f.Fltr.Amnt,
1461
- } });
1462
- case 1165522034: return __assign(__assign({}, base), { type: 'extrude', filter: {
1463
- type: descriptor_1.ExtT.decode(f.Fltr.ExtT),
1464
- size: f.Fltr.ExtS,
1465
- depth: f.Fltr.ExtD,
1466
- depthMode: descriptor_1.ExtR.decode(f.Fltr.ExtR),
1467
- randomSeed: f.Fltr.FlRs,
1468
- solidFrontFaces: f.Fltr.ExtF,
1469
- maskIncompleteBlocks: f.Fltr.ExtM,
1470
- } });
1471
- case 1181639749: return __assign(__assign({}, base), { type: 'find edges' });
1472
- case 1399616122: return __assign(__assign({}, base), { type: 'solarize' });
1473
- case 1416393504: return __assign(__assign({}, base), { type: 'tiles', filter: {
1474
- numberOfTiles: f.Fltr.TlNm,
1475
- maximumOffset: f.Fltr.TlOf,
1476
- fillEmptyAreaWith: descriptor_1.FlCl.decode(f.Fltr.FlCl),
1477
- randomSeed: f.Fltr.FlRs,
1478
- } });
1479
- case 1416782659: return __assign(__assign({}, base), { type: 'trace contour', filter: {
1480
- level: f.Fltr['Lvl '],
1481
- edge: descriptor_1.CntE.decode(f.Fltr['Edg ']),
1482
- } });
1483
- case 1466852384: return __assign(__assign({}, base), { type: 'wind', filter: {
1484
- method: descriptor_1.WndM.decode(f.Fltr.WndM),
1485
- direction: descriptor_1.Drct.decode(f.Fltr.Drct),
1486
- } });
1487
- case 1148089458: return __assign(__assign({}, base), { type: 'de-interlace', filter: {
1488
- eliminate: descriptor_1.IntE.decode(f.Fltr.IntE),
1489
- newFieldsBy: descriptor_1.IntC.decode(f.Fltr.IntC),
1490
- } });
1491
- case 1314149187: return __assign(__assign({}, base), { type: 'ntsc colors' });
1492
- case 1131639917: return __assign(__assign({}, base), { type: 'custom', filter: {
1493
- scale: f.Fltr['Scl '],
1494
- offset: f.Fltr.Ofst,
1495
- matrix: f.Fltr.Mtrx,
1496
- } });
1497
- case 1214736464: return __assign(__assign({}, base), { type: 'high pass', filter: {
1498
- radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1499
- } });
1500
- case 1299737888: return __assign(__assign({}, base), { type: 'maximum', filter: {
1501
- radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1502
- } });
1503
- case 1299082528: return __assign(__assign({}, base), { type: 'minimum', filter: {
1504
- radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1505
- } });
1506
- case 1332114292: return __assign(__assign({}, base), { type: 'offset', filter: {
1507
- horizontal: f.Fltr.Hrzn,
1508
- vertical: f.Fltr.Vrtc,
1509
- undefinedAreas: descriptor_1.FlMd.decode(f.Fltr['Fl ']),
1510
- } });
1511
- case 991: return __assign(__assign({}, base), { type: 'puppet', filter: {
1512
- rigidType: f.Fltr.rigidType,
1513
- bounds: [
1514
- { x: f.Fltr.PuX0, y: f.Fltr.PuY0, },
1515
- { x: f.Fltr.PuX1, y: f.Fltr.PuY1, },
1516
- { x: f.Fltr.PuX2, y: f.Fltr.PuY2, },
1517
- { x: f.Fltr.PuX3, y: f.Fltr.PuY3, },
1518
- ],
1519
- puppetShapeList: f.Fltr.puppetShapeList.map(function (p) { return ({
1520
- rigidType: p.rigidType,
1521
- // TODO: VrsM
1522
- // TODO: VrsN
1523
- originalVertexArray: uint8ToPoints(p.originalVertexArray),
1524
- deformedVertexArray: uint8ToPoints(p.deformedVertexArray),
1525
- indexArray: Array.from(uint8ToUint32(p.indexArray)),
1526
- pinOffsets: arrayToPoints(p.pinOffsets),
1527
- posFinalPins: arrayToPoints(p.posFinalPins),
1528
- pinVertexIndices: p.pinVertexIndices,
1529
- selectedPin: p.selectedPin,
1530
- pinPosition: arrayToPoints(p.PinP),
1531
- pinRotation: p.PnRt,
1532
- pinOverlay: p.PnOv,
1533
- pinDepth: p.PnDp,
1534
- meshQuality: p.meshQuality,
1535
- meshExpansion: p.meshExpansion,
1536
- meshRigidity: p.meshRigidity,
1537
- imageResolution: p.imageResolution,
1538
- meshBoundaryPath: {
1539
- pathComponents: p.meshBoundaryPath.pathComponents.map(function (c) { return ({
1540
- shapeOperation: c.shapeOperation.split('.')[1],
1541
- paths: c.SbpL.map(function (t) { return ({
1542
- closed: t.Clsp,
1543
- points: t['Pts '].map(function (pt) { return ({
1544
- anchor: hrznVrtcToPoint(pt.Anch),
1545
- forward: hrznVrtcToPoint(pt['Fwd ']),
1546
- backward: hrznVrtcToPoint(pt['Bwd ']),
1547
- smooth: pt.Smoo,
1285
+ if ('Fltr' in f) {
1286
+ switch (f.Fltr._classID) {
1287
+ case 'boxblur': return __assign(__assign({}, base), { type: 'box blur', filter: {
1288
+ radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1289
+ } });
1290
+ case 'GsnB': return __assign(__assign({}, base), { type: 'gaussian blur', filter: {
1291
+ radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1292
+ } });
1293
+ case 'MtnB': return __assign(__assign({}, base), { type: 'motion blur', filter: {
1294
+ angle: f.Fltr.Angl,
1295
+ distance: (0, descriptor_1.parseUnits)(f.Fltr.Dstn),
1296
+ } });
1297
+ case 'RdlB': return __assign(__assign({}, base), { type: 'radial blur', filter: {
1298
+ amount: f.Fltr.Amnt,
1299
+ method: descriptor_1.BlrM.decode(f.Fltr.BlrM),
1300
+ quality: descriptor_1.BlrQ.decode(f.Fltr.BlrQ),
1301
+ } });
1302
+ case 'shapeBlur': return __assign(__assign({}, base), { type: 'shape blur', filter: {
1303
+ radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1304
+ customShape: { name: f.Fltr.customShape['Nm '], id: f.Fltr.customShape.Idnt },
1305
+ } });
1306
+ case 'SmrB': return __assign(__assign({}, base), { type: 'smart blur', filter: {
1307
+ radius: f.Fltr['Rds '],
1308
+ threshold: f.Fltr.Thsh,
1309
+ quality: descriptor_1.SmBQ.decode(f.Fltr.SmBQ),
1310
+ mode: descriptor_1.SmBM.decode(f.Fltr.SmBM),
1311
+ } });
1312
+ case 'surfaceBlur': return __assign(__assign({}, base), { type: 'surface blur', filter: {
1313
+ radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1314
+ threshold: f.Fltr.Thsh,
1315
+ } });
1316
+ case 'Dspl': return __assign(__assign({}, base), { type: 'displace', filter: {
1317
+ horizontalScale: f.Fltr.HrzS,
1318
+ verticalScale: f.Fltr.VrtS,
1319
+ displacementMap: descriptor_1.DspM.decode(f.Fltr.DspM),
1320
+ undefinedAreas: descriptor_1.UndA.decode(f.Fltr.UndA),
1321
+ displacementFile: {
1322
+ signature: f.Fltr.DspF.sig,
1323
+ path: f.Fltr.DspF.path, // TODO: this is decoded incorrectly ???
1324
+ },
1325
+ } });
1326
+ case 'Pnch': return __assign(__assign({}, base), { type: 'pinch', filter: {
1327
+ amount: f.Fltr.Amnt,
1328
+ } });
1329
+ case 'Plr ': return __assign(__assign({}, base), { type: 'polar coordinates', filter: {
1330
+ conversion: descriptor_1.Cnvr.decode(f.Fltr.Cnvr),
1331
+ } });
1332
+ case 'Rple': return __assign(__assign({}, base), { type: 'ripple', filter: {
1333
+ amount: f.Fltr.Amnt,
1334
+ size: descriptor_1.RplS.decode(f.Fltr.RplS),
1335
+ } });
1336
+ case 'Shr ': return __assign(__assign({}, base), { type: 'shear', filter: {
1337
+ shearPoints: f.Fltr.ShrP.map(function (p) { return ({ x: p.Hrzn, y: p.Vrtc }); }),
1338
+ shearStart: f.Fltr.ShrS,
1339
+ shearEnd: f.Fltr.ShrE,
1340
+ undefinedAreas: descriptor_1.UndA.decode(f.Fltr.UndA),
1341
+ } });
1342
+ case 'Sphr': return __assign(__assign({}, base), { type: 'spherize', filter: {
1343
+ amount: f.Fltr.Amnt,
1344
+ mode: descriptor_1.SphM.decode(f.Fltr.SphM),
1345
+ } });
1346
+ case 'Twrl': return __assign(__assign({}, base), { type: 'twirl', filter: {
1347
+ angle: f.Fltr.Angl,
1348
+ } });
1349
+ case 'Wave': return __assign(__assign({}, base), { type: 'wave', filter: {
1350
+ numberOfGenerators: f.Fltr.NmbG,
1351
+ type: descriptor_1.Wvtp.decode(f.Fltr.Wvtp),
1352
+ wavelength: { min: f.Fltr.WLMn, max: f.Fltr.WLMx },
1353
+ amplitude: { min: f.Fltr.AmMn, max: f.Fltr.AmMx },
1354
+ scale: { x: f.Fltr.SclH, y: f.Fltr.SclV },
1355
+ randomSeed: f.Fltr.RndS,
1356
+ undefinedAreas: descriptor_1.UndA.decode(f.Fltr.UndA),
1357
+ } });
1358
+ case 'ZgZg': return __assign(__assign({}, base), { type: 'zigzag', filter: {
1359
+ amount: f.Fltr.Amnt,
1360
+ ridges: f.Fltr.NmbR,
1361
+ style: descriptor_1.ZZTy.decode(f.Fltr.ZZTy),
1362
+ } });
1363
+ case 'AdNs': return __assign(__assign({}, base), { type: 'add noise', filter: {
1364
+ amount: (0, descriptor_1.parsePercent)(f.Fltr.Nose),
1365
+ distribution: descriptor_1.Dstr.decode(f.Fltr.Dstr),
1366
+ monochromatic: f.Fltr.Mnch,
1367
+ randomSeed: f.Fltr.FlRs,
1368
+ } });
1369
+ case 'DstS': return __assign(__assign({}, base), { type: 'dust and scratches', filter: {
1370
+ radius: f.Fltr['Rds '],
1371
+ threshold: f.Fltr.Thsh,
1372
+ } });
1373
+ case 'Mdn ': return __assign(__assign({}, base), { type: 'median', filter: {
1374
+ radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1375
+ } });
1376
+ case 'denoise': return __assign(__assign({}, base), { type: 'reduce noise', filter: {
1377
+ preset: f.Fltr.preset,
1378
+ removeJpegArtifact: f.Fltr.removeJPEGArtifact,
1379
+ reduceColorNoise: (0, descriptor_1.parsePercent)(f.Fltr.ClNs),
1380
+ sharpenDetails: (0, descriptor_1.parsePercent)(f.Fltr.Shrp),
1381
+ channelDenoise: f.Fltr.channelDenoise.map(function (c) { return (__assign({ channels: c.Chnl.map(function (i) { return descriptor_1.Chnl.decode(i); }), amount: c.Amnt }, (c.EdgF ? { preserveDetails: c.EdgF } : {}))); }),
1382
+ } });
1383
+ case 'ClrH': return __assign(__assign({}, base), { type: 'color halftone', filter: {
1384
+ radius: f.Fltr['Rds '],
1385
+ angle1: f.Fltr.Ang1,
1386
+ angle2: f.Fltr.Ang2,
1387
+ angle3: f.Fltr.Ang3,
1388
+ angle4: f.Fltr.Ang4,
1389
+ } });
1390
+ case 'Crst': return __assign(__assign({}, base), { type: 'crystallize', filter: {
1391
+ cellSize: f.Fltr.ClSz,
1392
+ randomSeed: f.Fltr.FlRs,
1393
+ } });
1394
+ case 'Mztn': return __assign(__assign({}, base), { type: 'mezzotint', filter: {
1395
+ type: descriptor_1.MztT.decode(f.Fltr.MztT),
1396
+ randomSeed: f.Fltr.FlRs,
1397
+ } });
1398
+ case 'Msc ': return __assign(__assign({}, base), { type: 'mosaic', filter: {
1399
+ cellSize: (0, descriptor_1.parseUnits)(f.Fltr.ClSz),
1400
+ } });
1401
+ case 'Pntl': return __assign(__assign({}, base), { type: 'pointillize', filter: {
1402
+ cellSize: f.Fltr.ClSz,
1403
+ randomSeed: f.Fltr.FlRs,
1404
+ } });
1405
+ case 'Clds': return __assign(__assign({}, base), { type: 'clouds', filter: {
1406
+ randomSeed: f.Fltr.FlRs,
1407
+ } });
1408
+ case 'DfrC': return __assign(__assign({}, base), { type: 'difference clouds', filter: {
1409
+ randomSeed: f.Fltr.FlRs,
1410
+ } });
1411
+ case 'Fbrs': return __assign(__assign({}, base), { type: 'fibers', filter: {
1412
+ variance: f.Fltr.Vrnc,
1413
+ strength: f.Fltr.Strg,
1414
+ randomSeed: f.Fltr.RndS,
1415
+ } });
1416
+ case 'LnsF': return __assign(__assign({}, base), { type: 'lens flare', filter: {
1417
+ brightness: f.Fltr.Brgh,
1418
+ position: { x: f.Fltr.FlrC.Hrzn, y: f.Fltr.FlrC.Vrtc },
1419
+ lensType: descriptor_1.Lns.decode(f.Fltr['Lns ']),
1420
+ } });
1421
+ case 'smartSharpen': return __assign(__assign({}, base), { type: 'smart sharpen', filter: {
1422
+ amount: (0, descriptor_1.parsePercent)(f.Fltr.Amnt),
1423
+ radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1424
+ threshold: f.Fltr.Thsh,
1425
+ angle: f.Fltr.Angl,
1426
+ moreAccurate: f.Fltr.moreAccurate,
1427
+ blur: descriptor_1.blurType.decode(f.Fltr.blur),
1428
+ preset: f.Fltr.preset,
1429
+ shadow: {
1430
+ fadeAmount: (0, descriptor_1.parsePercent)(f.Fltr.sdwM.Amnt),
1431
+ tonalWidth: (0, descriptor_1.parsePercent)(f.Fltr.sdwM.Wdth),
1432
+ radius: f.Fltr.sdwM['Rds '],
1433
+ },
1434
+ highlight: {
1435
+ fadeAmount: (0, descriptor_1.parsePercent)(f.Fltr.hglM.Amnt),
1436
+ tonalWidth: (0, descriptor_1.parsePercent)(f.Fltr.hglM.Wdth),
1437
+ radius: f.Fltr.hglM['Rds '],
1438
+ },
1439
+ } });
1440
+ case 'UnsM': return __assign(__assign({}, base), { type: 'unsharp mask', filter: {
1441
+ amount: (0, descriptor_1.parsePercent)(f.Fltr.Amnt),
1442
+ radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1443
+ threshold: f.Fltr.Thsh,
1444
+ } });
1445
+ case 'Dfs ': return __assign(__assign({}, base), { type: 'diffuse', filter: {
1446
+ mode: descriptor_1.DfsM.decode(f.Fltr['Md ']),
1447
+ randomSeed: f.Fltr.FlRs,
1448
+ } });
1449
+ case 'Embs': return __assign(__assign({}, base), { type: 'emboss', filter: {
1450
+ angle: f.Fltr.Angl,
1451
+ height: f.Fltr.Hght,
1452
+ amount: f.Fltr.Amnt,
1453
+ } });
1454
+ case 'Extr': return __assign(__assign({}, base), { type: 'extrude', filter: {
1455
+ type: descriptor_1.ExtT.decode(f.Fltr.ExtT),
1456
+ size: f.Fltr.ExtS,
1457
+ depth: f.Fltr.ExtD,
1458
+ depthMode: descriptor_1.ExtR.decode(f.Fltr.ExtR),
1459
+ randomSeed: f.Fltr.FlRs,
1460
+ solidFrontFaces: f.Fltr.ExtF,
1461
+ maskIncompleteBlocks: f.Fltr.ExtM,
1462
+ } });
1463
+ case 'Tls ': return __assign(__assign({}, base), { type: 'tiles', filter: {
1464
+ numberOfTiles: f.Fltr.TlNm,
1465
+ maximumOffset: f.Fltr.TlOf,
1466
+ fillEmptyAreaWith: descriptor_1.FlCl.decode(f.Fltr.FlCl),
1467
+ randomSeed: f.Fltr.FlRs,
1468
+ } });
1469
+ case 'TrcC': return __assign(__assign({}, base), { type: 'trace contour', filter: {
1470
+ level: f.Fltr['Lvl '],
1471
+ edge: descriptor_1.CntE.decode(f.Fltr['Edg ']),
1472
+ } });
1473
+ case 'Wnd ': return __assign(__assign({}, base), { type: 'wind', filter: {
1474
+ method: descriptor_1.WndM.decode(f.Fltr.WndM),
1475
+ direction: descriptor_1.Drct.decode(f.Fltr.Drct),
1476
+ } });
1477
+ case 'Dntr': return __assign(__assign({}, base), { type: 'de-interlace', filter: {
1478
+ eliminate: descriptor_1.IntE.decode(f.Fltr.IntE),
1479
+ newFieldsBy: descriptor_1.IntC.decode(f.Fltr.IntC),
1480
+ } });
1481
+ case 'Cstm': return __assign(__assign({}, base), { type: 'custom', filter: {
1482
+ scale: f.Fltr['Scl '],
1483
+ offset: f.Fltr.Ofst,
1484
+ matrix: f.Fltr.Mtrx,
1485
+ } });
1486
+ case 'HghP': return __assign(__assign({}, base), { type: 'high pass', filter: {
1487
+ radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1488
+ } });
1489
+ case 'Mxm ': return __assign(__assign({}, base), { type: 'maximum', filter: {
1490
+ radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1491
+ } });
1492
+ case 'Mnm ': return __assign(__assign({}, base), { type: 'minimum', filter: {
1493
+ radius: (0, descriptor_1.parseUnits)(f.Fltr['Rds ']),
1494
+ } });
1495
+ case 'Ofst': return __assign(__assign({}, base), { type: 'offset', filter: {
1496
+ horizontal: f.Fltr.Hrzn,
1497
+ vertical: f.Fltr.Vrtc,
1498
+ undefinedAreas: descriptor_1.FlMd.decode(f.Fltr['Fl ']),
1499
+ } });
1500
+ case 'rigidTransform': return __assign(__assign({}, base), { type: 'puppet', filter: {
1501
+ rigidType: f.Fltr.rigidType,
1502
+ bounds: [
1503
+ { x: f.Fltr.PuX0, y: f.Fltr.PuY0, },
1504
+ { x: f.Fltr.PuX1, y: f.Fltr.PuY1, },
1505
+ { x: f.Fltr.PuX2, y: f.Fltr.PuY2, },
1506
+ { x: f.Fltr.PuX3, y: f.Fltr.PuY3, },
1507
+ ],
1508
+ puppetShapeList: f.Fltr.puppetShapeList.map(function (p) { return ({
1509
+ rigidType: p.rigidType,
1510
+ // TODO: VrsM
1511
+ // TODO: VrsN
1512
+ originalVertexArray: uint8ToPoints(p.originalVertexArray),
1513
+ deformedVertexArray: uint8ToPoints(p.deformedVertexArray),
1514
+ indexArray: Array.from(uint8ToUint32(p.indexArray)),
1515
+ pinOffsets: arrayToPoints(p.pinOffsets),
1516
+ posFinalPins: arrayToPoints(p.posFinalPins),
1517
+ pinVertexIndices: p.pinVertexIndices,
1518
+ selectedPin: p.selectedPin,
1519
+ pinPosition: arrayToPoints(p.PinP),
1520
+ pinRotation: p.PnRt,
1521
+ pinOverlay: p.PnOv,
1522
+ pinDepth: p.PnDp,
1523
+ meshQuality: p.meshQuality,
1524
+ meshExpansion: p.meshExpansion,
1525
+ meshRigidity: p.meshRigidity,
1526
+ imageResolution: p.imageResolution,
1527
+ meshBoundaryPath: {
1528
+ pathComponents: p.meshBoundaryPath.pathComponents.map(function (c) { return ({
1529
+ shapeOperation: c.shapeOperation.split('.')[1],
1530
+ paths: c.SbpL.map(function (t) { return ({
1531
+ closed: t.Clsp,
1532
+ points: t['Pts '].map(function (pt) { return ({
1533
+ anchor: hrznVrtcToPoint(pt.Anch),
1534
+ forward: hrznVrtcToPoint(pt['Fwd ']),
1535
+ backward: hrznVrtcToPoint(pt['Bwd ']),
1536
+ smooth: pt.Smoo,
1537
+ }); }),
1548
1538
  }); }),
1549
1539
  }); }),
1550
- }); }),
1551
- },
1552
- }); }),
1553
- } });
1554
- case 1348620396: {
1555
- var parameters = [];
1556
- var Flrt = f.Fltr;
1557
- for (var i = 0; i < fromAtoZ.length; i++) {
1558
- if (!Flrt["PN".concat(fromAtoZ[i], "a")])
1559
- break;
1560
- for (var j = 0; j < fromAtoZ.length; j++) {
1561
- if (!Flrt["PN".concat(fromAtoZ[i]).concat(fromAtoZ[j])])
1540
+ },
1541
+ }); }),
1542
+ } });
1543
+ case 'PbPl': {
1544
+ var parameters = [];
1545
+ var Flrt = f.Fltr;
1546
+ for (var i = 0; i < fromAtoZ.length; i++) {
1547
+ if (!Flrt["PN".concat(fromAtoZ[i], "a")])
1562
1548
  break;
1563
- parameters.push({
1564
- name: Flrt["PN".concat(fromAtoZ[i]).concat(fromAtoZ[j])],
1565
- value: Flrt["PF".concat(fromAtoZ[i]).concat(fromAtoZ[j])]
1566
- });
1549
+ for (var j = 0; j < fromAtoZ.length; j++) {
1550
+ if (!Flrt["PN".concat(fromAtoZ[i]).concat(fromAtoZ[j])])
1551
+ break;
1552
+ parameters.push({
1553
+ name: Flrt["PN".concat(fromAtoZ[i]).concat(fromAtoZ[j])],
1554
+ value: Flrt["PF".concat(fromAtoZ[i]).concat(fromAtoZ[j])]
1555
+ });
1556
+ }
1567
1557
  }
1558
+ return __assign(__assign({}, base), { type: 'oil paint plugin', filter: {
1559
+ name: f.Fltr.KnNm,
1560
+ gpu: f.Fltr.GpuY,
1561
+ lighting: f.Fltr.LIWy,
1562
+ parameters: parameters,
1563
+ } });
1568
1564
  }
1569
- return __assign(__assign({}, base), { type: 'oil paint plugin', filter: {
1570
- name: f.Fltr.KnNm,
1571
- gpu: f.Fltr.GpuY,
1572
- lighting: f.Fltr.LIWy,
1573
- parameters: parameters,
1565
+ // case 2089: return {
1566
+ // ...base,
1567
+ // type: 'adaptive wide angle',
1568
+ // params: {
1569
+ // correction: prjM.decode(f.Fltr.prjM),
1570
+ // focalLength: f.Fltr.focL,
1571
+ // cropFactor: f.Fltr.CrpF,
1572
+ // imageScale: f.Fltr.imgS,
1573
+ // imageX: f.Fltr.imgX,
1574
+ // imageY: f.Fltr.imgY,
1575
+ // },
1576
+ // };
1577
+ case 'HsbP': return __assign(__assign({}, base), { type: 'hsb/hsl', filter: {
1578
+ inputMode: descriptor_1.ClrS.decode(f.Fltr.Inpt),
1579
+ rowOrder: descriptor_1.ClrS.decode(f.Fltr.Otpt),
1574
1580
  } });
1575
- }
1576
- // case 2089: return {
1577
- // ...base,
1578
- // type: 'adaptive wide angle',
1579
- // params: {
1580
- // correction: prjM.decode(f.Fltr.prjM),
1581
- // focalLength: f.Fltr.focL,
1582
- // cropFactor: f.Fltr.CrpF,
1583
- // imageScale: f.Fltr.imgS,
1584
- // imageX: f.Fltr.imgX,
1585
- // imageY: f.Fltr.imgY,
1586
- // },
1587
- // };
1588
- case 1215521360: return __assign(__assign({}, base), { type: 'hsb/hsl', filter: {
1589
- inputMode: descriptor_1.ClrS.decode(f.Fltr.Inpt),
1590
- rowOrder: descriptor_1.ClrS.decode(f.Fltr.Otpt),
1591
- } });
1592
- case 1122: return __assign(__assign({}, base), { type: 'oil paint', filter: {
1593
- lightingOn: f.Fltr.lightingOn,
1594
- stylization: f.Fltr.stylization,
1595
- cleanliness: f.Fltr.cleanliness,
1596
- brushScale: f.Fltr.brushScale,
1597
- microBrush: f.Fltr.microBrush,
1598
- lightDirection: f.Fltr.LghD,
1599
- specularity: f.Fltr.specularity,
1600
- } });
1601
- case 1282492025: {
1602
- return __assign(__assign({}, base), { type: 'liquify', filter: {
1603
- liquifyMesh: f.Fltr.LqMe,
1581
+ case 'oilPaint': return __assign(__assign({}, base), { type: 'oil paint', filter: {
1582
+ lightingOn: f.Fltr.lightingOn,
1583
+ stylization: f.Fltr.stylization,
1584
+ cleanliness: f.Fltr.cleanliness,
1585
+ brushScale: f.Fltr.brushScale,
1586
+ microBrush: f.Fltr.microBrush,
1587
+ lightDirection: f.Fltr.LghD,
1588
+ specularity: f.Fltr.specularity,
1604
1589
  } });
1590
+ case 'LqFy': {
1591
+ return __assign(__assign({}, base), { type: 'liquify', filter: {
1592
+ liquifyMesh: f.Fltr.LqMe,
1593
+ } });
1594
+ }
1595
+ default:
1596
+ if (options.throwForMissingFeatures) {
1597
+ throw new Error("Unknown filter classId: ".concat(f.Fltr._classID));
1598
+ }
1599
+ return undefined;
1600
+ }
1601
+ }
1602
+ else {
1603
+ switch (f.filterID) {
1604
+ case 1098281575: return __assign(__assign({}, base), { type: 'average' });
1605
+ case 1114403360: return __assign(__assign({}, base), { type: 'blur' });
1606
+ case 1114403405: return __assign(__assign({}, base), { type: 'blur more' });
1607
+ case 1148416099: return __assign(__assign({}, base), { type: 'despeckle' });
1608
+ case 1180922912: return __assign(__assign({}, base), { type: 'facet' });
1609
+ case 1181902701: return __assign(__assign({}, base), { type: 'fragment' });
1610
+ case 1399353968: return __assign(__assign({}, base), { type: 'sharpen' });
1611
+ case 1399353925: return __assign(__assign({}, base), { type: 'sharpen edges' });
1612
+ case 1399353933: return __assign(__assign({}, base), { type: 'sharpen more' });
1613
+ case 1181639749: return __assign(__assign({}, base), { type: 'find edges' });
1614
+ case 1399616122: return __assign(__assign({}, base), { type: 'solarize' });
1615
+ case 1314149187: return __assign(__assign({}, base), { type: 'ntsc colors' });
1616
+ default:
1617
+ if (options.throwForMissingFeatures) {
1618
+ // console.log('FILTER', require('util').inspect(f, false, 99, true));
1619
+ throw new Error("Unknown filterID: ".concat(f.filterID));
1620
+ }
1605
1621
  }
1606
- default:
1607
- throw new Error("Unknown filterID: ".concat(f.filterID));
1608
1622
  }
1609
1623
  }
1610
- function parseFilterFX(desc) {
1624
+ function parseFilterFX(desc, options) {
1611
1625
  return {
1612
1626
  enabled: desc.enab,
1613
1627
  validAtPosition: desc.validAtPosition,
1614
1628
  maskEnabled: desc.filterMaskEnable,
1615
1629
  maskLinked: desc.filterMaskLinked,
1616
1630
  maskExtendWithWhite: desc.filterMaskExtendWithWhite,
1617
- list: desc.filterFXList.map(parseFilterFXItem),
1631
+ list: desc.filterFXList.map(function (x) { return parseFilterFXItem(x, options); }).filter(function (x) { return !!x; }),
1618
1632
  };
1619
1633
  }
1620
1634
  function uvRadius(t) {
@@ -2087,13 +2101,13 @@ function getWarpFromPlacedLayer(placed) {
2087
2101
  },
2088
2102
  };
2089
2103
  }
2090
- addHandler('SoLd', hasKey('placedLayer'), function (reader, target, left) {
2104
+ addHandler('SoLd', hasKey('placedLayer'), function (reader, target, left, _, options) {
2091
2105
  if ((0, psdReader_1.readSignature)(reader) !== 'soLD')
2092
2106
  throw new Error("Invalid SoLd type");
2093
2107
  var version = (0, psdReader_1.readInt32)(reader);
2094
2108
  if (version !== 4 && version !== 5)
2095
2109
  throw new Error("Invalid SoLd version");
2096
- var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
2110
+ var desc = (0, descriptor_1.readVersionAndDescriptor)(reader, true);
2097
2111
  // console.log('SoLd', require('util').inspect(desc, false, 99, true));
2098
2112
  // console.log('SoLd.warp', require('util').inspect(desc.warp, false, 99, true));
2099
2113
  // console.log('SoLd.quiltWarp', require('util').inspect(desc.quiltWarp, false, 99, true));
@@ -2130,7 +2144,7 @@ addHandler('SoLd', hasKey('placedLayer'), function (reader, target, left) {
2130
2144
  };
2131
2145
  }
2132
2146
  if (desc.filterFX)
2133
- target.placedLayer.filter = parseFilterFX(desc.filterFX);
2147
+ target.placedLayer.filter = parseFilterFX(desc.filterFX, options);
2134
2148
  // console.log('filter', require('util').inspect(target.placedLayer.filter, false, 99, true));
2135
2149
  (0, psdReader_1.skipBytes)(reader, left()); // HACK
2136
2150
  }, function (writer, target) {