@clearmist-labs/comic-archive-handler 1.3.0 → 1.5.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/README.md CHANGED
@@ -133,6 +133,7 @@ GIF, BMP, and TIFF are intentionally not included as writable because of their p
133
133
  - **RAR is read-only.** The UnRAR source license permits decompression only, not building a compatible compressor, so `convertArchive(input, 'rar')` always throws `UnsupportedOperationError`.
134
134
  - **7z read/write** uses the standalone `7zzs` binary bundled by [`7zip-bin-full`](https://www.npmjs.com/package/7zip-bin-full), spawned directly (not through `node-7z`, which has no way to control the child process's working directory). Both directions round-trip through a temporary staging directory since the 7-Zip CLI operates on real files, not in-memory buffers.
135
135
  - **asar** reads are fully streaming (direct byte-range reads against the archive, no extraction), but writes require a staging directory since `@electron/asar`'s `createPackage` API only accepts a source directory on disk.
136
+ - **asar metadata lives in the archive's own header, not as a `ComicInfo.xml`/`MetronInfo.xml` entry.** `hasComicMetadata`/`readArchiveMetadata`/`addMetadataToArchive`/`removeComicMetadata` all handle this transparently for asar inputs (metadata is set/read as a `comicMetadata` key on the header JSON alongside the existing `files` key. See `src/internal/asarHeader.ts`'s `writeAsarHeaderPatch`/`serializeAsarHeader`), so calling code doesn't need to branch on archive type. Adding metadata to an asar archive patches its header directly rather than repackaging via `createPackage`, and is correspondingly cheaper than the equivalent zip/tar/7z write. A `ComicInfo.xml`/`MetronInfo.xml` entry inside an asar archive is never read as metadata.
136
137
  - Any operation that needs a staging directory (asar writes, any 7z operation) accepts a `tempDir` option; if omitted, a directory under `os.tmpdir()` is used, and a clear `FilesystemAccessError` is thrown if no writable directory is available.
137
138
  - Metadata conversion between the canonical schema and ComicInfo.xml/MetronInfo.xml is intentionally lossy in both directions. See the field-mapping table in `src/metadata/schema.ts`.
138
139
  - PNG conversion's `quality` option only has an effect when `palette: true` is also set (an upstream `sharp`/libvips behavior).
package/dist/index.d.mts CHANGED
@@ -50,6 +50,15 @@ export interface ConvertArchiveOptions extends ArchiveWriteOptions {
50
50
  format: ImageOutputFormat;
51
51
  options?: ImageConvertOptions;
52
52
  };
53
+ /**
54
+ * Replaces the source's embedded comic metadata in the output. The source's
55
+ * `ComicInfo.xml`/`MetronInfo.xml` entries (and, for an asar source, its
56
+ * header metadata) are dropped, then each schema given here is written the
57
+ * way the target format stores it: an asar header key, or a root-level
58
+ * `{schema}.xml` entry for every other format. When omitted, entries are
59
+ * copied as-is and an asar source's header metadata is not carried over.
60
+ */
61
+ metadata?: Partial<Record<MetadataSchema, ComicMetadata>>;
53
62
  }
54
63
  export interface AddMetadataOptions extends ArchiveWriteOptions {
55
64
  overwrite?: boolean;
@@ -344,14 +353,14 @@ export declare function validateMetadataXml(xml: string | Buffer, schema: Metada
344
353
  /**
345
354
  * Authoritative field-mapping table between the canonical ComicMetadata
346
355
  * shape and each external XML schema (ComicInfo.xml v2.1, MetronInfo.xml
347
- * v1.1 — see `schemas/`). Conversion is intentionally lossy in both
356
+ * v1.1. See `schemas/`). Conversion is intentionally lossy in both
348
357
  * directions; a field with no equivalent in the target schema is dropped
349
358
  * unless the source and target schema happen to be the same one (in which
350
359
  * case `comicInfoExtra`/`metronInfoExtra` round-trips it).
351
360
  *
352
361
  * | Canonical field | ComicInfo.xml | MetronInfo.xml |
353
362
  * |-------------------------|-----------------------------------------------------|------------------------------------------------|
354
- * | title | Title | (no equivalent — dropped) |
363
+ * | title | Title | (no equivalent; dropped) |
355
364
  * | series | Series | Series > Name |
356
365
  * | seriesSort | (no equivalent) | Series > SortName |
357
366
  * | seriesId / seriesLang | (no equivalent) | Series `id`/`lang` attributes |
@@ -359,18 +368,18 @@ export declare function validateMetadataXml(xml: string | Buffer, schema: Metada
359
368
  * | seriesIssueCount | (no equivalent) | Series > IssueCount |
360
369
  * | seriesVolumeCount | (no equivalent) | Series > VolumeCount |
361
370
  * | seriesAlternativeNames | (no equivalent) | Series > AlternativeNames > AlternativeName[] |
362
- * | seriesGroup | SeriesGroup | (no equivalent — dropped) |
371
+ * | seriesGroup | SeriesGroup | (no equivalent; dropped) |
363
372
  * | volume | Volume | Series > Volume |
364
373
  * | number | Number | Number |
365
374
  * | alternateNumber | AlternateNumber | AlternativeNumber |
366
- * | alternateSeries | AlternateSeries | (no equivalent — dropped) |
367
- * | alternateCount | AlternateCount | (no equivalent — dropped) |
375
+ * | alternateSeries | AlternateSeries | (no equivalent; dropped) |
376
+ * | alternateCount | AlternateCount | (no equivalent; dropped) |
368
377
  * | count | Count | (no equivalent) |
369
378
  * | pageCount | PageCount | PageCount |
370
379
  * | summary | Summary | Summary |
371
380
  * | notes | Notes | Notes |
372
- * | review | Review | (no equivalent — dropped) |
373
- * | scanInformation | ScanInformation | (no equivalent — dropped) |
381
+ * | review | Review | (no equivalent; dropped) |
382
+ * | scanInformation | ScanInformation | (no equivalent; dropped) |
374
383
  * | publisher / publisherId | Publisher | Publisher > Name / `id` attribute |
375
384
  * | imprint / imprintId | Imprint | Publisher > Imprint / `id` attribute |
376
385
  * | collectionTitle | (no equivalent) | CollectionTitle |
@@ -388,7 +397,7 @@ export declare function validateMetadataXml(xml: string | Buffer, schema: Metada
388
397
  * | teams | Teams (comma-separated string) | Teams > Team[] (`id` attribute) |
389
398
  * | locations | Locations (comma-separated string) | Locations > Location[] (`id` attribute) |
390
399
  * | storyArcs | StoryArc / StoryArcNumber (parallel comma lists) | Arcs > Arc[] (Name + Number + `id`) |
391
- * | mainCharacterOrTeam | MainCharacterOrTeam | (no equivalent — dropped) |
400
+ * | mainCharacterOrTeam | MainCharacterOrTeam | (no equivalent; dropped) |
392
401
  * | stories | (no equivalent) | Stories > Story[] |
393
402
  * | reprints | (no equivalent) | Reprints > Reprint[] |
394
403
  * | universes | (no equivalent) | Universes > Universe[] |
@@ -398,9 +407,9 @@ export declare function validateMetadataXml(xml: string | Buffer, schema: Metada
398
407
  * | web | Web (single URL) | URLs > URL[] (`primary` attribute) |
399
408
  * | gtin | GTIN | GTIN > ISBN |
400
409
  * | gtinUpc | (no equivalent) | GTIN > UPC |
401
- * | blackAndWhite | BlackAndWhite (Yes/No) | (no equivalent — ComicInfo-only) |
402
- * | manga | Manga | (no equivalent — ComicInfo-only) |
403
- * | pages | Pages > Page[] (Image/Type/DoublePage/... attrs) | (no equivalent — ComicInfo-only) |
410
+ * | blackAndWhite | BlackAndWhite (Yes/No) | (no equivalent; ComicInfo-only) |
411
+ * | manga | Manga | (no equivalent; ComicInfo-only) |
412
+ * | pages | Pages > Page[] (Image/Type/DoublePage/... attrs) | (no equivalent; ComicInfo-only) |
404
413
  */
405
414
  export declare const COMIC_INFO_CREDIT_ROLES: readonly ["Writer", "Penciller", "Inker", "Colorist", "Letterer", "CoverArtist", "Editor", "Translator"];
406
415
  type ComicInfoCreditRole = (typeof COMIC_INFO_CREDIT_ROLES)[number];
@@ -428,7 +437,7 @@ export declare function resourceName(item: string | MetronResource): string;
428
437
  export declare function resourceId(item: string | MetronResource): string | undefined;
429
438
  export declare function joinResourceNames(values?: (string | MetronResource)[]): string | undefined;
430
439
  declare namespace index_d_exports {
431
- export { COMIC_INFO_AGE_RATING_VALUES, COMIC_INFO_CREDIT_ROLES, COMIC_INFO_MANGA_VALUES, COMIC_INFO_PAGE_TYPE_VALUES, COMIC_INFO_YES_NO_VALUES, ComicInfoCreditRole, METRON_AGE_RATING_VALUES, METRON_FORMAT_VALUES, METRON_INFORMATION_SOURCE_VALUES, METRON_ROLE_VALUES, MetadataValidationIssue, MetadataValidationResult, addMetadataToArchive, comicInfoXmlToMetadata, hasComicMetadata, joinCommaList, joinResourceNames, metadataToComicInfoXml, metadataToMetronInfoXml, metadataToXml, metronInfoXmlToMetadata, readArchiveMetadata, resourceId, resourceName, splitCommaList, validateMetadataXml, xmlToMetadata };
440
+ export { COMIC_INFO_AGE_RATING_VALUES, COMIC_INFO_CREDIT_ROLES, COMIC_INFO_MANGA_VALUES, COMIC_INFO_PAGE_TYPE_VALUES, COMIC_INFO_YES_NO_VALUES, ComicInfoCreditRole, METRON_AGE_RATING_VALUES, METRON_FORMAT_VALUES, METRON_INFORMATION_SOURCE_VALUES, METRON_ROLE_VALUES, MetadataValidationIssue, MetadataValidationResult, addMetadataToArchive, comicInfoXmlToMetadata, hasComicMetadata, joinCommaList, joinResourceNames, metadataToComicInfoXml, metadataToMetronInfoXml, metadataToXml, metronInfoXmlToMetadata, readArchiveMetadata, removeComicMetadata, resourceId, resourceName, splitCommaList, validateMetadataXml, xmlToMetadata };
432
441
  }
433
442
  export declare function metadataToXml(metadata: ComicMetadata, schema: MetadataSchema): string;
434
443
  export declare function xmlToMetadata(xml: string | Buffer, schema: MetadataSchema): ComicMetadata;
@@ -436,12 +445,27 @@ export declare function hasComicMetadata(input: ArchiveInput): Promise<{
436
445
  present: boolean;
437
446
  schema?: MetadataSchema;
438
447
  path?: string;
448
+ bothPresent?: boolean;
439
449
  }>;
440
- export declare function readArchiveMetadata(input: ArchiveInput): Promise<{
450
+ /**
451
+ * Reads embedded comic metadata. With no `schema`, returns whichever schema
452
+ * `hasComicMetadata` finds first (asar prefers ComicInfo when both are
453
+ * present). Pass `schema` to read that specific one regardless of which is
454
+ * preferred. The only way to read a non-preferred schema back out of an
455
+ * asar archive that has both, since its metadata isn't addressable by path.
456
+ */
457
+ export declare function readArchiveMetadata(input: ArchiveInput, schema?: MetadataSchema): Promise<{
441
458
  schema: MetadataSchema;
442
459
  metadata: ComicMetadata;
443
460
  } | null>;
444
461
  export declare function addMetadataToArchive(input: ArchiveInput, metadata: ComicMetadata, schema: MetadataSchema, options?: AddMetadataOptions): Promise<Buffer | void>;
462
+ /**
463
+ * Removes the embedded `{schema}` metadata, if present; an asar header key
464
+ * removal; or the matching `{schema}.xml` entry for every other format.
465
+ * Throws `ArchiveFormatError` if the archive has no such metadata; a caller
466
+ * that wants a no-op instead should check `hasComicMetadata` first.
467
+ */
468
+ export declare function removeComicMetadata(input: ArchiveInput, schema: MetadataSchema, options?: ArchiveWriteOptions): Promise<Buffer | void>;
445
469
  //#endregion
446
470
  //#region src/images/convert.d.ts
447
471
  export declare function convertImageBuffer(image: Buffer, format: ImageOutputFormat, options?: ImageConvertOptions): Promise<Buffer>;
@@ -460,6 +484,14 @@ export declare function phashToHex(hash: bigint): string;
460
484
  export declare function hammingDistance(a: bigint, b: bigint): number;
461
485
  export declare function computeArchiveImagePHash(input: ArchiveInput, entryPath: string): Promise<bigint>;
462
486
  //#endregion
487
+ //#region src/images/dimensions.d.ts
488
+ export interface ImageDimensions {
489
+ width: number;
490
+ height: number;
491
+ }
492
+ /** Reads an image's pixel dimensions from its header without decoding it; `null` when the buffer isn't an image `sharp` can read. */
493
+ export declare function readImageDimensions(buffer: Buffer): Promise<ImageDimensions | null>;
494
+ //#endregion
463
495
  //#region src/images/isImage.d.ts
464
496
  export declare const IMAGE_EXTENSIONS: readonly ["jpg", "jpeg", "png", "gif", "webp", "bmp", "tiff", "tif"];
465
497
  export declare function getExtension(entryPath: string): string;
@@ -468,7 +500,7 @@ export declare function isImagePath(entryPath: string): boolean;
468
500
  //#region src/hashing/sha256.d.ts
469
501
  export declare function sha256ArchiveEntry(input: ArchiveInput, entryPath: string): Promise<string>;
470
502
  /**
471
- * SHA256 of the whole archive file — except for asar, where only the
503
+ * SHA256 of the whole archive file, except for asar, where only the
472
504
  * content region (bytes after the header) is hashed, so header/index
473
505
  * reordering never changes the content hash.
474
506
  */
@@ -511,7 +543,7 @@ export interface ReadArchiveEntriesResult {
511
543
  * Reads every entry's bytes and SHA256 in a single pass over the archive.
512
544
  * Calling `readArchiveEntry`/`sha256ArchiveEntry` once per entry instead
513
545
  * means re-running `listEntries` and re-locating the target entry on every
514
- * call — cheap for zip (backed by real central-directory random access) and
546
+ * call: cheap for zip (backed by real central-directory random access) and
515
547
  * tar/asar, but for the sequential/CLI-driven formats (rar, 7z, ace) each
516
548
  * call re-reads the archive from the start, so reading every entry that way
517
549
  * costs O(n^2). This also does half the I/O of calling both
@@ -575,12 +607,14 @@ declare const comicArchiveHandler: {
575
607
  present: boolean;
576
608
  schema?: MetadataSchema;
577
609
  path?: string;
610
+ bothPresent?: boolean;
578
611
  }>;
579
- readArchiveMetadata(input: ArchiveInput): Promise<{
612
+ readArchiveMetadata(input: ArchiveInput, schema?: MetadataSchema): Promise<{
580
613
  schema: MetadataSchema;
581
614
  metadata: ComicMetadata;
582
615
  } | null>;
583
616
  addMetadataToArchive(input: ArchiveInput, metadata: ComicMetadata, schema: MetadataSchema, options?: AddMetadataOptions): Promise<Buffer | void>;
617
+ removeComicMetadata(input: ArchiveInput, schema: MetadataSchema, options?: ArchiveWriteOptions): Promise<Buffer | void>;
584
618
  metadataToComicInfoXml: typeof metadataToComicInfoXml;
585
619
  comicInfoXmlToMetadata: typeof comicInfoXmlToMetadata;
586
620
  metadataToMetronInfoXml: typeof metadataToMetronInfoXml;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/benchmark/types.ts","../src/errors.ts","../src/detect.ts","../src/convertArchive.ts","../src/extractArchive.ts","../src/metadata/comicInfo.ts","../src/metadata/metronInfo.ts","../src/metadata/validate.ts","../src/metadata/schema.ts","../src/metadata/index.ts","../src/images/convert.ts","../src/images/phash.ts","../src/images/isImage.ts","../src/hashing/sha256.ts","../src/rename.ts","../src/strip.ts","../src/listFiles.ts","../src/readArchiveEntry.ts","../src/readArchiveEntries.ts","../src/removeArchiveEntry.ts","../src/benchmark/benchmarkArchive.ts","../src/benchmark/report.ts","../src/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/benchmark/types.ts","../src/errors.ts","../src/detect.ts","../src/convertArchive.ts","../src/extractArchive.ts","../src/metadata/comicInfo.ts","../src/metadata/metronInfo.ts","../src/metadata/validate.ts","../src/metadata/schema.ts","../src/metadata/index.ts","../src/images/convert.ts","../src/images/phash.ts","../src/images/dimensions.ts","../src/images/isImage.ts","../src/hashing/sha256.ts","../src/rename.ts","../src/strip.ts","../src/listFiles.ts","../src/readArchiveEntry.ts","../src/readArchiveEntries.ts","../src/removeArchiveEntry.ts","../src/benchmark/benchmarkArchive.ts","../src/benchmark/report.ts","../src/index.ts"],"mappings":"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"}