epublib 0.1.2 → 0.2.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/epub.d.ts CHANGED
@@ -259,6 +259,7 @@ export declare class EpubFile {
259
259
  };
260
260
  constructor(filePath: string, dev?: boolean);
261
261
  getCoverImage(): File | undefined;
262
+ hasCoverImage(): boolean;
262
263
  getTitle(): EpubFileGetTitle;
263
264
  getISBN13(): ISBN13 | undefined;
264
265
  getLanguage(): BCP47LanguageTag;
@@ -1 +1 @@
1
- {"version":3,"file":"epub.d.ts","sourceRoot":"","sources":["../src/epub.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAgB7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C,UAAU,gBAAgB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,UAAU,qBAAqB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,mBAAmB;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;CAC7B;AAED,qBAAa,QAAQ;;IASpB,IAAI,QAAQ,WAEX;IAED,IAAI,GAAG,WAEN;IAED,IAAI,YAAY;;;;;;;;;;;;;;MAEf;IAED,IAAI,OAAO,cAEV;IAED,IAAI,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAEb;gBAqGW,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAQ;IAgBzC,aAAa,IAAI,IAAI,GAAG,SAAS;IA+EjC,QAAQ,IAAI,gBAAgB;IAmE5B,SAAS,IAAI,MAAM,GAAG,SAAS;IAgE/B,WAAW,IAAI,gBAAgB;IAa/B,aAAa,IAAI,qBAAqB,GAAG,SAAS;IAmFlD,OAAO,CACN,MAAM,GAAE,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAuB,GAC3D,MAAM,GAAG,SAAS;IAmCrB,YAAY,IAAI,MAAM,GAAG,SAAS;IAMlC,cAAc,CAAC,YAAY,GAAE,OAAc,GAAG,MAAM,GAAG,SAAS;IAWhE,eAAe,CACd,aAAa,GAAE,UAAU,EAAY,GACnC,mBAAmB,EAAE,GAAG,SAAS;CAwEpC"}
1
+ {"version":3,"file":"epub.d.ts","sourceRoot":"","sources":["../src/epub.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAiB7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C,UAAU,gBAAgB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,UAAU,qBAAqB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,mBAAmB;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;CAC7B;AAED,qBAAa,QAAQ;;IASpB,IAAI,QAAQ,WAEX;IAED,IAAI,GAAG,WAEN;IAED,IAAI,YAAY;;;;;;;;;;;;;;MAEf;IAED,IAAI,OAAO,cAEV;IAED,IAAI,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAEb;gBAqGW,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAQ;IAgBzC,aAAa,IAAI,IAAI,GAAG,SAAS;IAqGjC,aAAa,IAAI,OAAO;IAIxB,QAAQ,IAAI,gBAAgB;IAmE5B,SAAS,IAAI,MAAM,GAAG,SAAS;IAgE/B,WAAW,IAAI,gBAAgB;IAa/B,aAAa,IAAI,qBAAqB,GAAG,SAAS;IAmFlD,OAAO,CACN,MAAM,GAAE,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAuB,GAC3D,MAAM,GAAG,SAAS;IAmCrB,YAAY,IAAI,MAAM,GAAG,SAAS;IAMlC,cAAc,CAAC,YAAY,GAAE,OAAc,GAAG,MAAM,GAAG,SAAS;IAWhE,eAAe,CACd,aAAa,GAAE,UAAU,EAAY,GACnC,mBAAmB,EAAE,GAAG,SAAS;CAwEpC"}
package/dist/epub.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import AdmZip from "adm-zip";
2
2
  import { accessSync, constants } from "node:fs";
3
- import { basename, dirname, join, normalize, resolve } from "node:path";
3
+ import { basename, dirname, normalize, resolve } from "node:path";
4
+ import { join as joinPosix } from "node:path/posix";
4
5
  import { satisfies, valid } from "semver";
5
6
  import { Temporal } from "temporal-polyfill";
6
7
  import z, {} from "zod";
@@ -107,6 +108,15 @@ export class EpubFile {
107
108
  this.#packageOpf = this.#getPackageOpf();
108
109
  }
109
110
  getCoverImage() {
111
+ const coverImage = this.#getCoverImageEntry();
112
+ if (typeof coverImage === "undefined") {
113
+ return undefined;
114
+ }
115
+ return new File([Buffer.from(coverImage.entry.getData())], coverImage.filename, {
116
+ type: coverImage.type,
117
+ });
118
+ }
119
+ #getCoverImageEntry() {
110
120
  function epub2get(t) {
111
121
  const p = t.#packageOpf;
112
122
  const metaCover = [
@@ -120,33 +130,42 @@ export class EpubFile {
120
130
  if (!manifestItem) {
121
131
  return undefined;
122
132
  }
123
- const coverImagePath = join(dirname(t.#packageOpfPath), manifestItem["@_href"]);
133
+ const dirnamePackageOpf = dirname(t.#packageOpfPath);
134
+ const coverImagePath = joinPosix(dirnamePackageOpf === "." ? "" : dirnamePackageOpf, manifestItem["@_href"]);
124
135
  const entry = t.#zip.getEntry(coverImagePath);
125
136
  if (entry === null) {
126
137
  throw new Error(`Could not find "${coverImagePath}" in epub "${t.#filePath}"`);
127
138
  }
128
- return new File([Buffer.from(entry.getData())], basename(coverImagePath), {
139
+ return {
140
+ entry,
129
141
  type: manifestItem["@_media-type"],
130
- });
142
+ filename: basename(coverImagePath),
143
+ };
131
144
  }
132
145
  if (this.#version === "3") {
133
146
  const coverImageItem = this.#packageOpf.package.manifest.item.find((e) => (e["@_properties"] ?? []).includes("cover-image"));
134
147
  if (typeof coverImageItem === "undefined") {
135
148
  return epub2get(this);
136
149
  }
137
- const coverImagePath = join(dirname(this.#packageOpfPath), coverImageItem["@_href"]);
150
+ const dirnamePackageOpf = dirname(this.#packageOpfPath);
151
+ const coverImagePath = joinPosix(dirnamePackageOpf === "." ? "" : dirnamePackageOpf, coverImageItem["@_href"]);
138
152
  const entry = this.#zip.getEntry(coverImagePath);
139
153
  if (entry === null) {
140
154
  throw new Error(`Could not find "${coverImagePath}" in epub "${this.#filePath}"`);
141
155
  }
142
- return new File([Buffer.from(entry.getData())], basename(coverImagePath), {
156
+ return {
157
+ entry,
143
158
  type: coverImageItem["@_media-type"],
144
- });
159
+ filename: basename(coverImagePath),
160
+ };
145
161
  }
146
162
  else {
147
163
  return epub2get(this);
148
164
  }
149
165
  }
166
+ hasCoverImage() {
167
+ return typeof this.#getCoverImageEntry() !== "undefined";
168
+ }
150
169
  getTitle() {
151
170
  const t = this.#packageOpf.package.metadata["dc:title"]?.[0];
152
171
  if (!t) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "epublib",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",