ag-psd 22.0.2 → 23.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Changelog
2
2
 
3
+ ## v23.0.0
4
+ - Fixed handling externally linked files in smart object layers
5
+
3
6
  ## v22.0.0
4
7
  - Fixed parsing path `smooth` gradient interpolation method
5
8
  - Changed `PsdReader` type
@@ -2131,130 +2131,170 @@ addHandler('Anno', function (target) { return target.annotations !== undefined;
2131
2131
  writer.view.setUint32(dataOffset - 4, writer.offset - dataOffset, false);
2132
2132
  }
2133
2133
  });
2134
- addHandler('lnk2', function (target) { return !!target.linkedFiles && target.linkedFiles.length > 0; }, function (reader, target, left) {
2135
- var psd = target;
2136
- psd.linkedFiles = psd.linkedFiles || [];
2137
- while (left() > 8) {
2138
- var size = readLength64(reader); // size
2139
- var startOffset = reader.offset;
2140
- var type = (0, psdReader_1.readSignature)(reader);
2141
- // liFD - linked file data
2142
- // liFE - linked file external
2143
- // liFA - linked file alias
2144
- var version = (0, psdReader_1.readInt32)(reader);
2145
- var id = (0, psdReader_1.readPascalString)(reader, 1);
2146
- var name_3 = (0, psdReader_1.readUnicodeString)(reader);
2147
- var fileType = (0, psdReader_1.readSignature)(reader).trim(); // ' ' if empty
2148
- var fileCreator = (0, psdReader_1.readSignature)(reader).trim(); // ' ' or '\0\0\0\0' if empty
2149
- var dataSize = readLength64(reader);
2150
- var hasFileOpenDescriptor = (0, psdReader_1.readUint8)(reader);
2151
- var fileOpenDescriptor = hasFileOpenDescriptor ? (0, descriptor_1.readVersionAndDescriptor)(reader) : undefined;
2152
- var linkedFileDescriptor = type === 'liFE' ? (0, descriptor_1.readVersionAndDescriptor)(reader) : undefined;
2153
- var file = { id: id, name: name_3 };
2154
- if (fileType)
2155
- file.type = fileType;
2156
- if (fileCreator)
2157
- file.creator = fileCreator;
2158
- if (fileOpenDescriptor) {
2159
- file.descriptor = {
2160
- compInfo: {
2161
- compID: fileOpenDescriptor.compInfo.compID,
2162
- originalCompID: fileOpenDescriptor.compInfo.originalCompID,
2163
- }
2164
- };
2165
- }
2166
- if (type === 'liFE' && version > 3) {
2167
- var year = (0, psdReader_1.readInt32)(reader);
2168
- var month = (0, psdReader_1.readUint8)(reader);
2169
- var day = (0, psdReader_1.readUint8)(reader);
2170
- var hour = (0, psdReader_1.readUint8)(reader);
2171
- var minute = (0, psdReader_1.readUint8)(reader);
2172
- var seconds = (0, psdReader_1.readFloat64)(reader);
2173
- var wholeSeconds = Math.floor(seconds);
2174
- var ms = (seconds - wholeSeconds) * 1000;
2175
- file.time = (new Date(year, month, day, hour, minute, wholeSeconds, ms)).toISOString();
2176
- }
2177
- var fileSize = type === 'liFE' ? readLength64(reader) : 0;
2178
- if (type === 'liFA')
2179
- (0, psdReader_1.skipBytes)(reader, 8);
2180
- if (type === 'liFD')
2181
- file.data = (0, psdReader_1.readBytes)(reader, dataSize); // seems to be a typo in docs
2182
- if (version >= 5)
2183
- file.childDocumentID = (0, psdReader_1.readUnicodeString)(reader);
2184
- if (version >= 6)
2185
- file.assetModTime = (0, psdReader_1.readFloat64)(reader);
2186
- if (version >= 7)
2187
- file.assetLockedState = (0, psdReader_1.readUint8)(reader);
2188
- if (type === 'liFE' && version === 2)
2189
- file.data = (0, psdReader_1.readBytes)(reader, fileSize);
2190
- if (reader.skipLinkedFilesData)
2191
- file.data = undefined;
2192
- psd.linkedFiles.push(file);
2193
- linkedFileDescriptor;
2194
- while (size % 4)
2195
- size++;
2196
- reader.offset = startOffset + size;
2197
- }
2198
- (0, psdReader_1.skipBytes)(reader, left()); // ?
2199
- }, function (writer, target) {
2200
- var psd = target;
2201
- for (var _i = 0, _a = psd.linkedFiles; _i < _a.length; _i++) {
2202
- var file = _a[_i];
2203
- var version = 2;
2204
- if (file.assetLockedState != null)
2205
- version = 7;
2206
- else if (file.assetModTime != null)
2207
- version = 6;
2208
- else if (file.childDocumentID != null)
2209
- version = 5;
2210
- // TODO: else if (file.time != null) version = 3; (only for liFE)
2211
- (0, psdWriter_1.writeUint32)(writer, 0);
2212
- (0, psdWriter_1.writeUint32)(writer, 0); // size
2213
- var sizeOffset = writer.offset;
2214
- (0, psdWriter_1.writeSignature)(writer, file.data ? 'liFD' : 'liFA');
2215
- (0, psdWriter_1.writeInt32)(writer, version);
2216
- if (!file.id || typeof file.id !== 'string' || !/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/.test(file.id)) {
2217
- throw new Error('Linked file ID must be in a GUID format (example: 20953ddb-9391-11ec-b4f1-c15674f50bc4)');
2218
- }
2219
- (0, psdWriter_1.writePascalString)(writer, file.id, 1);
2220
- (0, psdWriter_1.writeUnicodeStringWithPadding)(writer, file.name || '');
2221
- (0, psdWriter_1.writeSignature)(writer, file.type ? "".concat(file.type, " ").substring(0, 4) : ' ');
2222
- (0, psdWriter_1.writeSignature)(writer, file.creator ? "".concat(file.creator, " ").substring(0, 4) : '\0\0\0\0');
2223
- writeLength64(writer, file.data ? file.data.byteLength : 0);
2224
- if (file.descriptor && file.descriptor.compInfo) {
2225
- var desc = {
2226
- compInfo: {
2227
- compID: file.descriptor.compInfo.compID,
2228
- originalCompID: file.descriptor.compInfo.originalCompID,
2229
- }
2230
- };
2231
- (0, psdWriter_1.writeUint8)(writer, 1);
2232
- (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
2233
- }
2234
- else {
2235
- (0, psdWriter_1.writeUint8)(writer, 0);
2134
+ function createLnkHandler(tag) {
2135
+ addHandler(tag, function (target) {
2136
+ var psd = target;
2137
+ if (!psd.linkedFiles || !psd.linkedFiles.length)
2138
+ return false;
2139
+ if (tag === 'lnkE' && !psd.linkedFiles.some(function (f) { return f.linkedFile; }))
2140
+ return false;
2141
+ return true;
2142
+ }, function (reader, target, left, _psd) {
2143
+ var psd = target;
2144
+ psd.linkedFiles = psd.linkedFiles || [];
2145
+ while (left() > 8) {
2146
+ var size = readLength64(reader);
2147
+ var startOffset = reader.offset;
2148
+ var type = (0, psdReader_1.readSignature)(reader);
2149
+ // liFD - linked file data
2150
+ // liFE - linked file external
2151
+ // liFA - linked file alias
2152
+ var version = (0, psdReader_1.readInt32)(reader);
2153
+ var id = (0, psdReader_1.readPascalString)(reader, 1);
2154
+ var name_3 = (0, psdReader_1.readUnicodeString)(reader);
2155
+ var fileType = (0, psdReader_1.readSignature)(reader).trim(); // ' ' if empty
2156
+ var fileCreator = (0, psdReader_1.readSignature)(reader).trim(); // ' ' or '\0\0\0\0' if empty
2157
+ var dataSize = readLength64(reader);
2158
+ var hasFileOpenDescriptor = (0, psdReader_1.readUint8)(reader);
2159
+ var fileOpenDescriptor = hasFileOpenDescriptor ? (0, descriptor_1.readVersionAndDescriptor)(reader) : undefined;
2160
+ var linkedFileDescriptor = type === 'liFE' ? (0, descriptor_1.readVersionAndDescriptor)(reader) : undefined;
2161
+ var file = { id: id, name: name_3 };
2162
+ if (fileType)
2163
+ file.type = fileType;
2164
+ if (fileCreator)
2165
+ file.creator = fileCreator;
2166
+ if (fileOpenDescriptor) {
2167
+ file.descriptor = {
2168
+ compInfo: {
2169
+ compID: fileOpenDescriptor.compInfo.compID,
2170
+ originalCompID: fileOpenDescriptor.compInfo.originalCompID,
2171
+ }
2172
+ };
2173
+ }
2174
+ if (type === 'liFE' && version > 3) {
2175
+ var year = (0, psdReader_1.readInt32)(reader);
2176
+ var month = (0, psdReader_1.readUint8)(reader);
2177
+ var day = (0, psdReader_1.readUint8)(reader);
2178
+ var hour = (0, psdReader_1.readUint8)(reader);
2179
+ var minute = (0, psdReader_1.readUint8)(reader);
2180
+ var seconds = (0, psdReader_1.readFloat64)(reader);
2181
+ var wholeSeconds = Math.floor(seconds);
2182
+ var ms = (seconds - wholeSeconds) * 1000;
2183
+ file.time = (new Date(Date.UTC(year, month, day, hour, minute, wholeSeconds, ms))).toISOString();
2184
+ }
2185
+ var fileSize = type === 'liFE' ? readLength64(reader) : 0;
2186
+ if (type === 'liFA')
2187
+ (0, psdReader_1.skipBytes)(reader, 8);
2188
+ if (type === 'liFD')
2189
+ file.data = (0, psdReader_1.readBytes)(reader, dataSize); // seems to be a typo in docs
2190
+ if (version >= 5)
2191
+ file.childDocumentID = (0, psdReader_1.readUnicodeString)(reader);
2192
+ if (version >= 6)
2193
+ file.assetModTime = (0, psdReader_1.readFloat64)(reader);
2194
+ if (version >= 7)
2195
+ file.assetLockedState = (0, psdReader_1.readUint8)(reader);
2196
+ if (type === 'liFE' && version === 2)
2197
+ file.data = (0, psdReader_1.readBytes)(reader, fileSize);
2198
+ if (reader.skipLinkedFilesData)
2199
+ file.data = undefined;
2200
+ if (tag === 'lnkE') {
2201
+ file.linkedFile = {
2202
+ fileSize: fileSize,
2203
+ name: (linkedFileDescriptor === null || linkedFileDescriptor === void 0 ? void 0 : linkedFileDescriptor['Nm ']) || '',
2204
+ fullPath: (linkedFileDescriptor === null || linkedFileDescriptor === void 0 ? void 0 : linkedFileDescriptor.fullPath) || '',
2205
+ originalPath: (linkedFileDescriptor === null || linkedFileDescriptor === void 0 ? void 0 : linkedFileDescriptor.originalPath) || '',
2206
+ relativePath: (linkedFileDescriptor === null || linkedFileDescriptor === void 0 ? void 0 : linkedFileDescriptor.relPath) || '',
2207
+ };
2208
+ }
2209
+ psd.linkedFiles.push(file);
2210
+ while (size % 4)
2211
+ size++;
2212
+ reader.offset = startOffset + size;
2236
2213
  }
2237
- if (file.data)
2238
- (0, psdWriter_1.writeBytes)(writer, file.data);
2239
- else
2214
+ (0, psdReader_1.skipBytes)(reader, left()); // ?
2215
+ }, function (writer, target) {
2216
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
2217
+ var psd = target;
2218
+ for (var _i = 0, _k = psd.linkedFiles; _i < _k.length; _i++) {
2219
+ var file = _k[_i];
2220
+ if ((tag === 'lnkE') !== !!file.linkedFile)
2221
+ continue;
2222
+ var version = 2;
2223
+ if (file.assetLockedState != null)
2224
+ version = 7;
2225
+ else if (file.assetModTime != null)
2226
+ version = 6;
2227
+ else if (file.childDocumentID != null)
2228
+ version = 5;
2229
+ else if (tag == 'lnkE')
2230
+ version = 3;
2240
2231
  writeLength64(writer, 0);
2241
- if (version >= 5)
2242
- (0, psdWriter_1.writeUnicodeStringWithPadding)(writer, file.childDocumentID || '');
2243
- if (version >= 6)
2244
- (0, psdWriter_1.writeFloat64)(writer, file.assetModTime || 0);
2245
- if (version >= 7)
2246
- (0, psdWriter_1.writeUint8)(writer, file.assetLockedState || 0);
2247
- var size = writer.offset - sizeOffset;
2248
- writer.view.setUint32(sizeOffset - 4, size, false); // write size
2249
- while (size % 4) {
2250
- size++;
2251
- (0, psdWriter_1.writeUint8)(writer, 0);
2232
+ var sizeOffset = writer.offset;
2233
+ (0, psdWriter_1.writeSignature)(writer, (tag === 'lnkE') ? 'liFE' : (file.data ? 'liFD' : 'liFA'));
2234
+ (0, psdWriter_1.writeInt32)(writer, version);
2235
+ if (!file.id || typeof file.id !== 'string' || !/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/.test(file.id)) {
2236
+ throw new Error('Linked file ID must be in a GUID format (example: 20953ddb-9391-11ec-b4f1-c15674f50bc4)');
2237
+ }
2238
+ (0, psdWriter_1.writePascalString)(writer, file.id, 1);
2239
+ (0, psdWriter_1.writeUnicodeStringWithPadding)(writer, file.name || '');
2240
+ (0, psdWriter_1.writeSignature)(writer, file.type ? "".concat(file.type, " ").substring(0, 4) : ' ');
2241
+ (0, psdWriter_1.writeSignature)(writer, file.creator ? "".concat(file.creator, " ").substring(0, 4) : '\0\0\0\0');
2242
+ writeLength64(writer, file.data ? file.data.byteLength : 0);
2243
+ if (file.descriptor && file.descriptor.compInfo) {
2244
+ var desc = {
2245
+ compInfo: {
2246
+ compID: file.descriptor.compInfo.compID,
2247
+ originalCompID: file.descriptor.compInfo.originalCompID,
2248
+ },
2249
+ };
2250
+ (0, psdWriter_1.writeUint8)(writer, 1);
2251
+ (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
2252
+ }
2253
+ else {
2254
+ (0, psdWriter_1.writeUint8)(writer, 0);
2255
+ }
2256
+ if (tag === 'lnkE') {
2257
+ var desc = {
2258
+ descVersion: 2,
2259
+ 'Nm ': (_b = (_a = file.linkedFile) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '',
2260
+ fullPath: (_d = (_c = file.linkedFile) === null || _c === void 0 ? void 0 : _c.fullPath) !== null && _d !== void 0 ? _d : '',
2261
+ originalPath: (_f = (_e = file.linkedFile) === null || _e === void 0 ? void 0 : _e.originalPath) !== null && _f !== void 0 ? _f : '',
2262
+ relPath: (_h = (_g = file.linkedFile) === null || _g === void 0 ? void 0 : _g.relativePath) !== null && _h !== void 0 ? _h : '',
2263
+ };
2264
+ (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'ExternalFileLink', desc);
2265
+ var time = file.time ? new Date(file.time) : new Date();
2266
+ (0, psdWriter_1.writeInt32)(writer, time.getUTCFullYear());
2267
+ (0, psdWriter_1.writeUint8)(writer, time.getUTCMonth());
2268
+ (0, psdWriter_1.writeUint8)(writer, time.getUTCDate());
2269
+ (0, psdWriter_1.writeUint8)(writer, time.getUTCHours());
2270
+ (0, psdWriter_1.writeUint8)(writer, time.getUTCMinutes());
2271
+ (0, psdWriter_1.writeFloat64)(writer, time.getUTCSeconds() + time.getUTCMilliseconds() / 1000);
2272
+ }
2273
+ if (file.data) {
2274
+ (0, psdWriter_1.writeBytes)(writer, file.data);
2275
+ }
2276
+ else {
2277
+ writeLength64(writer, ((_j = file.linkedFile) === null || _j === void 0 ? void 0 : _j.fileSize) || 0);
2278
+ }
2279
+ if (version >= 5)
2280
+ (0, psdWriter_1.writeUnicodeStringWithPadding)(writer, file.childDocumentID || '');
2281
+ if (version >= 6)
2282
+ (0, psdWriter_1.writeFloat64)(writer, file.assetModTime || 0);
2283
+ if (version >= 7)
2284
+ (0, psdWriter_1.writeUint8)(writer, file.assetLockedState || 0);
2285
+ var size = writer.offset - sizeOffset;
2286
+ writer.view.setUint32(sizeOffset - 4, size, false); // write size
2287
+ while (size % 4) {
2288
+ size++;
2289
+ (0, psdWriter_1.writeUint8)(writer, 0);
2290
+ }
2252
2291
  }
2253
- }
2254
- });
2292
+ });
2293
+ }
2294
+ createLnkHandler('lnk2');
2295
+ createLnkHandler('lnkE');
2255
2296
  addHandlerAlias('lnkD', 'lnk2');
2256
2297
  addHandlerAlias('lnk3', 'lnk2');
2257
- addHandlerAlias('lnkE', 'lnk2');
2258
2298
  addHandler('pths', hasKey('pathList'), function (reader, target) {
2259
2299
  var desc = (0, descriptor_1.readVersionAndDescriptor)(reader, true);
2260
2300
  // console.log(require('util').inspect(desc, false, 99, true));