@clearmist-labs/comic-archive-handler 1.3.0 → 1.4.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
@@ -344,14 +344,14 @@ export declare function validateMetadataXml(xml: string | Buffer, schema: Metada
344
344
  /**
345
345
  * Authoritative field-mapping table between the canonical ComicMetadata
346
346
  * shape and each external XML schema (ComicInfo.xml v2.1, MetronInfo.xml
347
- * v1.1 — see `schemas/`). Conversion is intentionally lossy in both
347
+ * v1.1. See `schemas/`). Conversion is intentionally lossy in both
348
348
  * directions; a field with no equivalent in the target schema is dropped
349
349
  * unless the source and target schema happen to be the same one (in which
350
350
  * case `comicInfoExtra`/`metronInfoExtra` round-trips it).
351
351
  *
352
352
  * | Canonical field | ComicInfo.xml | MetronInfo.xml |
353
353
  * |-------------------------|-----------------------------------------------------|------------------------------------------------|
354
- * | title | Title | (no equivalent — dropped) |
354
+ * | title | Title | (no equivalent; dropped) |
355
355
  * | series | Series | Series > Name |
356
356
  * | seriesSort | (no equivalent) | Series > SortName |
357
357
  * | seriesId / seriesLang | (no equivalent) | Series `id`/`lang` attributes |
@@ -359,18 +359,18 @@ export declare function validateMetadataXml(xml: string | Buffer, schema: Metada
359
359
  * | seriesIssueCount | (no equivalent) | Series > IssueCount |
360
360
  * | seriesVolumeCount | (no equivalent) | Series > VolumeCount |
361
361
  * | seriesAlternativeNames | (no equivalent) | Series > AlternativeNames > AlternativeName[] |
362
- * | seriesGroup | SeriesGroup | (no equivalent — dropped) |
362
+ * | seriesGroup | SeriesGroup | (no equivalent; dropped) |
363
363
  * | volume | Volume | Series > Volume |
364
364
  * | number | Number | Number |
365
365
  * | alternateNumber | AlternateNumber | AlternativeNumber |
366
- * | alternateSeries | AlternateSeries | (no equivalent — dropped) |
367
- * | alternateCount | AlternateCount | (no equivalent — dropped) |
366
+ * | alternateSeries | AlternateSeries | (no equivalent; dropped) |
367
+ * | alternateCount | AlternateCount | (no equivalent; dropped) |
368
368
  * | count | Count | (no equivalent) |
369
369
  * | pageCount | PageCount | PageCount |
370
370
  * | summary | Summary | Summary |
371
371
  * | notes | Notes | Notes |
372
- * | review | Review | (no equivalent — dropped) |
373
- * | scanInformation | ScanInformation | (no equivalent — dropped) |
372
+ * | review | Review | (no equivalent; dropped) |
373
+ * | scanInformation | ScanInformation | (no equivalent; dropped) |
374
374
  * | publisher / publisherId | Publisher | Publisher > Name / `id` attribute |
375
375
  * | imprint / imprintId | Imprint | Publisher > Imprint / `id` attribute |
376
376
  * | collectionTitle | (no equivalent) | CollectionTitle |
@@ -388,7 +388,7 @@ export declare function validateMetadataXml(xml: string | Buffer, schema: Metada
388
388
  * | teams | Teams (comma-separated string) | Teams > Team[] (`id` attribute) |
389
389
  * | locations | Locations (comma-separated string) | Locations > Location[] (`id` attribute) |
390
390
  * | storyArcs | StoryArc / StoryArcNumber (parallel comma lists) | Arcs > Arc[] (Name + Number + `id`) |
391
- * | mainCharacterOrTeam | MainCharacterOrTeam | (no equivalent — dropped) |
391
+ * | mainCharacterOrTeam | MainCharacterOrTeam | (no equivalent; dropped) |
392
392
  * | stories | (no equivalent) | Stories > Story[] |
393
393
  * | reprints | (no equivalent) | Reprints > Reprint[] |
394
394
  * | universes | (no equivalent) | Universes > Universe[] |
@@ -398,9 +398,9 @@ export declare function validateMetadataXml(xml: string | Buffer, schema: Metada
398
398
  * | web | Web (single URL) | URLs > URL[] (`primary` attribute) |
399
399
  * | gtin | GTIN | GTIN > ISBN |
400
400
  * | 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) |
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) |
404
404
  */
405
405
  export declare const COMIC_INFO_CREDIT_ROLES: readonly ["Writer", "Penciller", "Inker", "Colorist", "Letterer", "CoverArtist", "Editor", "Translator"];
406
406
  type ComicInfoCreditRole = (typeof COMIC_INFO_CREDIT_ROLES)[number];
@@ -428,7 +428,7 @@ export declare function resourceName(item: string | MetronResource): string;
428
428
  export declare function resourceId(item: string | MetronResource): string | undefined;
429
429
  export declare function joinResourceNames(values?: (string | MetronResource)[]): string | undefined;
430
430
  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 };
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, removeComicMetadata, resourceId, resourceName, splitCommaList, validateMetadataXml, xmlToMetadata };
432
432
  }
433
433
  export declare function metadataToXml(metadata: ComicMetadata, schema: MetadataSchema): string;
434
434
  export declare function xmlToMetadata(xml: string | Buffer, schema: MetadataSchema): ComicMetadata;
@@ -436,12 +436,27 @@ export declare function hasComicMetadata(input: ArchiveInput): Promise<{
436
436
  present: boolean;
437
437
  schema?: MetadataSchema;
438
438
  path?: string;
439
+ bothPresent?: boolean;
439
440
  }>;
440
- export declare function readArchiveMetadata(input: ArchiveInput): Promise<{
441
+ /**
442
+ * Reads embedded comic metadata. With no `schema`, returns whichever schema
443
+ * `hasComicMetadata` finds first (asar prefers ComicInfo when both are
444
+ * present). Pass `schema` to read that specific one regardless of which is
445
+ * preferred. The only way to read a non-preferred schema back out of an
446
+ * asar archive that has both, since its metadata isn't addressable by path.
447
+ */
448
+ export declare function readArchiveMetadata(input: ArchiveInput, schema?: MetadataSchema): Promise<{
441
449
  schema: MetadataSchema;
442
450
  metadata: ComicMetadata;
443
451
  } | null>;
444
452
  export declare function addMetadataToArchive(input: ArchiveInput, metadata: ComicMetadata, schema: MetadataSchema, options?: AddMetadataOptions): Promise<Buffer | void>;
453
+ /**
454
+ * Removes the embedded `{schema}` metadata, if present; an asar header key
455
+ * removal; or the matching `{schema}.xml` entry for every other format.
456
+ * Throws `ArchiveFormatError` if the archive has no such metadata; a caller
457
+ * that wants a no-op instead should check `hasComicMetadata` first.
458
+ */
459
+ export declare function removeComicMetadata(input: ArchiveInput, schema: MetadataSchema, options?: ArchiveWriteOptions): Promise<Buffer | void>;
445
460
  //#endregion
446
461
  //#region src/images/convert.d.ts
447
462
  export declare function convertImageBuffer(image: Buffer, format: ImageOutputFormat, options?: ImageConvertOptions): Promise<Buffer>;
@@ -468,7 +483,7 @@ export declare function isImagePath(entryPath: string): boolean;
468
483
  //#region src/hashing/sha256.d.ts
469
484
  export declare function sha256ArchiveEntry(input: ArchiveInput, entryPath: string): Promise<string>;
470
485
  /**
471
- * SHA256 of the whole archive file — except for asar, where only the
486
+ * SHA256 of the whole archive file, except for asar, where only the
472
487
  * content region (bytes after the header) is hashed, so header/index
473
488
  * reordering never changes the content hash.
474
489
  */
@@ -511,7 +526,7 @@ export interface ReadArchiveEntriesResult {
511
526
  * Reads every entry's bytes and SHA256 in a single pass over the archive.
512
527
  * Calling `readArchiveEntry`/`sha256ArchiveEntry` once per entry instead
513
528
  * 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
529
+ * call: cheap for zip (backed by real central-directory random access) and
515
530
  * tar/asar, but for the sequential/CLI-driven formats (rar, 7z, ace) each
516
531
  * call re-reads the archive from the start, so reading every entry that way
517
532
  * costs O(n^2). This also does half the I/O of calling both
@@ -575,12 +590,14 @@ declare const comicArchiveHandler: {
575
590
  present: boolean;
576
591
  schema?: MetadataSchema;
577
592
  path?: string;
593
+ bothPresent?: boolean;
578
594
  }>;
579
- readArchiveMetadata(input: ArchiveInput): Promise<{
595
+ readArchiveMetadata(input: ArchiveInput, schema?: MetadataSchema): Promise<{
580
596
  schema: MetadataSchema;
581
597
  metadata: ComicMetadata;
582
598
  } | null>;
583
599
  addMetadataToArchive(input: ArchiveInput, metadata: ComicMetadata, schema: MetadataSchema, options?: AddMetadataOptions): Promise<Buffer | void>;
600
+ removeComicMetadata(input: ArchiveInput, schema: MetadataSchema, options?: ArchiveWriteOptions): Promise<Buffer | void>;
584
601
  metadataToComicInfoXml: typeof metadataToComicInfoXml;
585
602
  comicInfoXmlToMetadata: typeof comicInfoXmlToMetadata;
586
603
  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":";;YAEY;;YAGA,eAAe;YAEf;YAEA;iBAEK;;EAEf;;EAEA;;EAEA;;iBAGe;;EAEf;;iBAGe;;EAEf;;EAEA;;EAEA;;iBAGe;EACf,OAAO;EACP,OAAO;EACP,MAAM;;;iBAIS;;;;;;;EAOf;;;;;EAKA,kBAAkB;;iBAGH,8BAA8B;EAC7C;IAAU,QAAQ;IAAmB,UAAU;;;iBAGhC,2BAA2B;EAC1C;;iBAGe,sBAAsB;EACrC;EACA;;iBAGe,qBAAqB;EACpC;;YAGU,qBAAqB;iBAEhB;EACf;EACA;;EAEA;;EAEA;;iBAGe;EACf;EACA;;EAEA;;iBAGe;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;iBAGe;EACf;EACA;EACA;;;;;;;;;iBAUe;EACf;EACA;;iBAGe,6BAA6B;;EAE5C;;iBAGe;EACf;EACA;EACA;;iBAGe;EACf;;EAEA;;iBAGe;EACf;EACA;;;iBAIe;EACf;EACA;EACA;;;;;;;;iBASe;EACf;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YAAY;EACZ,YAAY;EACZ,mBAAmB;EACnB,iBAAiB;EACjB,uBAAuB;EACvB,kBAAkB;EAClB,sBAAsB;EACtB,YAAY;EACZ,UAAU;EACV,gBAAgB;;EAEhB;;EAEA;;EAEA;;EAEA;EACA,QAAQ;;EAGR;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAGA,cAAc;;EAEd;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA,yBAAyB;;EAEzB;;EAEA;;EAEA,oBAAoB;;EAEpB,SAAS;;EAET,qBAAqB;;EAErB,YAAY;;EAEZ;;EAEA;;EAGA,iBAAiB;;EAEjB,kBAAkB;;;;;KCjPR,sBAAsB,QAAQ;qBAE7B,iCAAiC;qBAEjC,kCAAkC;;qBAGlC,yBAAyB,OAAO;UAO5B;;EAEf;;EAEA;;EAEA;;EAEA;;EAEA,eAAe;;EAEf,QAAQ;;UAGO;EACf,aAAa;EACb,aAAa;EACb;EACA;EACA;EACA;;EAEA;;EAEA;;EAEA;;UAGe;EACf;;EAEA;EACA;EACA;;EAEA;EACA;EACA,UAAU;;;;qBCxDC,kCAAkC;EACjC,YAAA;;qBAMD,2BAA2B;EAC1B,YAAA;;qBAMD,8BAA8B;EAC7B,YAAA;;qBAMD,8BAA8B;EAC7B,YAAA;;qBAMD,iCAAiC;EAChC,YAAA;;qBAMD,2BAA2B;EAC1B,YAAA;;;;wBCHQ,kBAAkB,OAAO,eAAe,QAAQ;wBAchD,MAAM,OAAO,eAAe;wBAI5B,MAAM,OAAO,eAAe;wBAI5B,MAAM,OAAO,eAAe;wBAI5B,OAAO,OAAO,eAAe;wBAI7B,KAAK,OAAO,eAAe;wBAI3B,MAAM,OAAO,eAAe;;;wBClD5B,eACpB,OAAO,cACP,YAAY,QAAQ,yBACpB,UAAS,wBACR,QAAQ;;;iBCbM;;EAEf;;;;;;;;;wBAUoB,eAAe,OAAO,cAAc,iBAAiB,UAAS,wBAA6B;;;wBCsCjG,uBAAuB,UAAU;wBAuNjC,uBAAuB,cAAc,SAAS;;;wBC1C9C,wBAAwB,UAAU;wBA8KlC,wBAAwB,cAAc,SAAS;;;UChZ9C;EACf;EACA;;UAGe;EACf;EACA,QAAQ;;;;;;;;;wBA+BY,oBAAoB,cAAc,QAAQ,QAAQ,iBAAiB,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBCkCpF;KAWD,8BAA8B;;qBAG7B;;qBAGA;;qBAGA;;qBAmBA;;qBAeA;;qBAaA;;qBAcA;;qBA8CA;wBAEG,eAAe;wBAYf,cAAc;;wBAKd,aAAa,eAAe;;wBAK5B,WAAW,eAAe;wBAI1B,kBAAkB,mBAAmB;;;;wBChMrC,cAAc,UAAU,eAAe,QAAQ;wBAI/C,cAAc,cAAc,QAAQ,QAAQ,iBAAiB;wBAIvD,iBAAiB,OAAO,eAAe;EAAU;EAAkB,SAAS;EAAgB;;wBAkC5F,oBAAoB,OAAO,eAAe;EAAU,QAAQ;EAAgB,UAAU;;wBAqBtF,qBACpB,OAAO,cACP,UAAU,eACV,QAAQ,gBACR,UAAS,qBACR,QAAQ;;;wBCjGW,mBAAmB,OAAO,QAAQ,QAAQ,mBAAmB,UAAS,sBAA2B,QAAQ;wBAmCzG,qBACpB,OAAO,cACP,QAAQ,mBACR,UAAS,sBAAsB,sBAC9B,QAAQ;;;;;;;;;;wBCQW,kBAAkB,OAAO,SAAS;wBAmCxC,WAAW;wBAIX,gBAAgB,WAAW;wBAYrB,yBAAyB,OAAO,cAAc,oBAAoB;;;qBC7G3E;wBAEG,aAAa;wBAMb,YAAY;;;wBCWN,mBAAmB,OAAO,cAAc,oBAAoB;;;;;;wBAkB5D,cAAc,OAAO,eAAe;;;;;;;;;;;;;;;;;wBCfpC,gCAAgC,OAAO,cAAc,UAAS,gBAAqB,QAAQ;;;wBCf3F,uBAAuB,OAAO,cAAc,UAAS,eAAoB,QAAQ;;;wBCHjF,iBAAiB,OAAO,eAAe;;;wBCEvC,iBAAiB,OAAO,cAAc,oBAAoB,QAAQ;;;iBCDvE;EACf;EACA;EACA,QAAQ;EACR;;;;;;;;;;;;;wBAcqB,mBAAmB,OAAO,eAAe,eAAe;;;wBChBzD,mBAAmB,OAAO,cAAc,mBAAmB,UAAS,qBAA0B,QAAQ;;;;;;;;;;;;;;;;;;;;wBCqEtG,iBAAiB,kBAAkB,UAAS,0BAA+B,QAAQ;;;wBCVzF,8BAA8B,QAAQ;;;cC1BhD;;;;;;;;;;;;;;;;;;;;;;;;;;IAqBO;IACG"}
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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"}