@animepaste/bangumi
Version:
67 lines (64 loc) • 1.68 kB
JavaScript
import createDebug from 'debug';
import { l as load } from './shared/bangumi.4a0b2d6f.mjs';
import { t as transform } from './shared/bangumi.6c4c2795.mjs';
import { d as decompress } from './shared/bangumi.aa4a6cb9.mjs';
import 'node:module';
import './shared/bangumi.679709b8.mjs';
const debug = createDebug("animepaste:bangumi");
function createBangumiPlugin(...options) {
for (const option of options) {
if (!option.id.endsWith(".json")) {
option.id += ".json";
}
}
const map = new Map(
options.map((op) => [op.id, void 0])
);
const task = Promise.all(
options.map((option) => {
try {
return transform(option).then((data) => {
map.set(option.id, decompress(data));
});
} catch (error) {
debug(error);
}
})
);
return {
name: "animepaste:bangumi",
resolveId(id) {
if (id.startsWith("~bangumi/")) {
id = "\0" + id;
if (!id.endsWith(".json")) {
id += ".json";
}
return id;
}
},
async load(id) {
const PREFIX = "\0~bangumi/";
if (id.startsWith(PREFIX)) {
id = id.slice(PREFIX.length);
if (map.has(id)) {
if (!!map.get(id)) {
return JSON.stringify(map.get(id));
} else {
await task;
if (!!map.get(id)) {
return JSON.stringify(map.get(id));
}
}
}
try {
const data = load(id);
return JSON.stringify(data);
} catch (error) {
this.error(error?.message);
debug(error);
}
}
}
};
}
export { createBangumiPlugin as default };