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 +1 -0
- package/dist/epub.d.ts.map +1 -1
- package/dist/epub.js +26 -7
- package/package.json +1 -1
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;
|
package/dist/epub.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epub.d.ts","sourceRoot":"","sources":["../src/epub.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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) {
|