Keep source plugins in single scraper process

This commit is contained in:
Codex committed 2026-10-13 22:42:20 +02:00
1 parent 0fc1a7b52a
commit 6d713e0a8c
19 files changed
+202 -467

No files matched your search

+9 -24
View File
@@ -2,8 +2,8 @@
const test = require('node:test');
const assert = require('node:assert/strict');
const { createServer } = require('../plugins/worker');
const { discoverMangaDexCatalog, discoverMangaDexChapter } = require('../adapters/mangadex');
const { parse } = require('../plugins/registry');
const mangaId = '123e4567-e89b-42d3-a456-426614174000';
const chapterIds = [
@@ -29,27 +29,12 @@ function fakeHttp() {
} };
}
test('MangaDex isolated parser matches the existing catalog and page behavior', async () => {
const server = createServer('mangadex');
await new Promise(resolve => server.listen(0, '127.0.0.1', resolve));
const previous = process.env.MANGADEX_PLUGIN_URL;
delete process.env.MANGADEX_PLUGIN_URL;
try {
const baseline = await discoverMangaDexCatalog(seriesUrl, fakeHttp());
const baselineChapter = await discoverMangaDexChapter(baseline.chapters[0], fakeHttp());
process.env.MANGADEX_PLUGIN_URL = `http://127.0.0.1:${server.address().port}`;
const isolated = await discoverMangaDexCatalog(seriesUrl, fakeHttp());
const isolatedChapter = await discoverMangaDexChapter(isolated.chapters[0], fakeHttp());
assert.deepEqual(isolated, baseline);
assert.deepEqual(isolatedChapter, baselineChapter);
const rejected = await fetch(`${process.env.MANGADEX_PLUGIN_URL}/v1/parse`, {
method: 'POST', headers: { 'content-type': 'application/json' },
body: JSON.stringify({ plugin: 'weebcentral', operation: 'series', input: { html: '<h1>X</h1>', url: 'https://weebcentral.com/series/X' } }),
});
assert.equal(rejected.status, 400);
} finally {
if (previous === undefined) delete process.env.MANGADEX_PLUGIN_URL;
else process.env.MANGADEX_PLUGIN_URL = previous;
await new Promise(resolve => server.close(resolve));
}
test('MangaDex parses a catalog and pages in the scraper process', async () => {
const catalog = await discoverMangaDexCatalog(seriesUrl, fakeHttp());
const chapter = await discoverMangaDexChapter(catalog.chapters[0], fakeHttp());
assert.equal(catalog.title, 'Fixture');
assert.deepEqual(catalog.chapters.map(ref => ref.number), ['1', '2']);
assert.equal(chapter.pages.length, 2);
assert.match(chapter.pages[0].url, /^https:\/\/uploads\.mangadex\.org\/data\//);
assert.throws(() => parse('mangadex', 'metadata', { data: manga.data, url: 'https://other.example/manga/x' }), /does not belong/);
});