Compare commits

..

5 commits

Author SHA1 Message Date
22f8e0e767
bump version 2023-12-02 15:57:20 +09:00
16eb73bfdb
fixed error: ENAMETOOLONG: name too long 2023-12-02 15:56:24 +09:00
bbcd9edb49
remove unused import 2023-12-02 15:47:41 +09:00
f6d411e996
fixed mem leak 2023-12-02 15:42:53 +09:00
e1da7c92d7
update deps 2023-12-02 15:40:14 +09:00
5 changed files with 50 additions and 59 deletions

View file

@ -3,7 +3,7 @@
## Usage
```
$ npx playwright install --with-deps chromium
$ npx playwright@1.40.1 install --with-deps chromium
$ npx https://git.fogtype.com/nebel/gadl/archive/main.tar.gz --help
```

View file

@ -72,19 +72,25 @@ on conflict(reader_url)
return books;
},
async archive(path: string, outDir: string, book: Book) {
async archive(
path: string,
book: Book,
opts: {
outDir: string;
outAuthorsLimit: number;
},
) {
const bookDir = await fs.stat(path);
if (!bookDir.isDirectory()) {
throw new Error(`Not found: ${path}`);
}
const title = `${book.authors.join("、")}${book.title}`.replace(
/[/]/g,
"%2F",
);
const title = `${book.authors
.slice(0, opts.outAuthorsLimit)
.join("、")}${book.title}`.replace(/[/]/g, "%2F");
const out = createWriteStream(`${outDir}/${title}.cbz`);
const out = createWriteStream(`${opts.outDir}/${title}.cbz`);
const zip = new Zip(function cb(err, data, final) {
if (err) {

17
main.ts
View file

@ -1,4 +1,3 @@
import fs from "node:fs/promises";
import util from "node:util";
import { chromium } from "./browser";
import { createDatabase } from "./database";
@ -14,6 +13,10 @@ const options = {
type: "string",
default: "dist",
},
"out-authors-limit": {
type: "string",
default: "3",
},
login: {
type: "boolean",
async run() {
@ -103,8 +106,6 @@ const options = {
async run() {
const db = await createDatabase(args.values.db!);
const library = createLibrary(db);
const browser = await chromium.launch();
const platform = createPlatform({ db, browser });
const books: Array<Book> = [];
if (args.values.download === "all") {
@ -124,12 +125,16 @@ const options = {
}
for (const book of books) {
const browser = await chromium.launch();
const platform = createPlatform({ db, browser });
const dir = `${args.values["out-dir"]!}/${book.id}`;
await platform.download(dir, book);
await library.archive(dir, args.values["out-dir"]!, book);
await library.archive(dir, book, {
outDir: args.values["out-dir"]!,
outAuthorsLimit: Number(args.values["out-authors-limit"]!),
});
await browser.close();
}
await browser.close();
},
},
json: {

64
package-lock.json generated
View file

@ -1,25 +1,25 @@
{
"name": "@fogtype/gadl",
"version": "0.0.0",
"version": "0.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@fogtype/gadl",
"version": "0.0.0",
"version": "0.1.0",
"license": "AGPL-3.0",
"dependencies": {
"fflate": "^0.8.1",
"playwright": "^1.39.0",
"playwright": "^1.40.1",
"sqlite": "^5.1.1",
"sqlite3": "^5.1.6",
"tsx": "^3.14.0"
"tsx": "^4.6.1"
},
"bin": {
"gadl": "bin/run.js"
},
"devDependencies": {
"@types/node": "^20.8.10"
"@types/node": "^20.10.2"
}
},
"node_modules/@esbuild/android-arm": {
@ -411,9 +411,9 @@
}
},
"node_modules/@types/node": {
"version": "20.8.10",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz",
"integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==",
"version": "20.10.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.2.tgz",
"integrity": "sha512-37MXfxkb0vuIlRKHNxwCkb60PNBpR94u4efQuN4JgIAm66zfCDXGSAFCef9XUWFovX2R1ok6Z7MHhtdVXXkkIw==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
@ -499,11 +499,6 @@
"concat-map": "0.0.1"
}
},
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
"node_modules/cacache": {
"version": "15.3.0",
"resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
@ -1217,11 +1212,11 @@
}
},
"node_modules/playwright": {
"version": "1.39.0",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.39.0.tgz",
"integrity": "sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==",
"version": "1.40.1",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.1.tgz",
"integrity": "sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==",
"dependencies": {
"playwright-core": "1.39.0"
"playwright-core": "1.40.1"
},
"bin": {
"playwright": "cli.js"
@ -1234,9 +1229,9 @@
}
},
"node_modules/playwright-core": {
"version": "1.39.0",
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz",
"integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==",
"version": "1.40.1",
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.1.tgz",
"integrity": "sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==",
"bin": {
"playwright-core": "cli.js"
},
@ -1394,23 +1389,6 @@
"node": ">= 10"
}
},
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
"node_modules/sqlite": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/sqlite/-/sqlite-5.1.1.tgz",
@ -1512,17 +1490,19 @@
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
},
"node_modules/tsx": {
"version": "3.14.0",
"resolved": "https://registry.npmjs.org/tsx/-/tsx-3.14.0.tgz",
"integrity": "sha512-xHtFaKtHxM9LOklMmJdI3BEnQq/D5F73Of2E1GDrITi9sgoVkvIsrQUTY1G8FlmGtA+awCI4EBlTRRYxkL2sRg==",
"version": "4.6.1",
"resolved": "https://registry.npmjs.org/tsx/-/tsx-4.6.1.tgz",
"integrity": "sha512-OQ4TAPHXAPUo/NZAmmIybl0o8LFOTlycQxFepLBAp6EV87U88fOKYGCQI2viGAEOVU9UW/cgQcxcOMnfEKVY3Q==",
"dependencies": {
"esbuild": "~0.18.20",
"get-tsconfig": "^4.7.2",
"source-map-support": "^0.5.21"
"get-tsconfig": "^4.7.2"
},
"bin": {
"tsx": "dist/cli.mjs"
},
"engines": {
"node": ">=18.0.0"
},
"optionalDependencies": {
"fsevents": "~2.3.3"
}

View file

@ -1,17 +1,17 @@
{
"name": "@fogtype/gadl",
"version": "0.0.1",
"version": "0.1.0",
"license": "AGPL-3.0",
"type": "module",
"bin": "bin/run.js",
"dependencies": {
"fflate": "^0.8.1",
"playwright": "^1.39.0",
"playwright": "^1.40.1",
"sqlite": "^5.1.1",
"sqlite3": "^5.1.6",
"tsx": "^3.14.0"
"tsx": "^4.6.1"
},
"devDependencies": {
"@types/node": "^20.8.10"
"@types/node": "^20.10.2"
}
}