You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.2 KiB
JavaScript

"use strict";
const assert = require("assert");
const assureResponse = require("../../shared/assure-response");
module.exports = function lcscFindCategories(state) {
let { session } = state;
return async function ({ createItem }) {
let response = await session.get("https://wwwapi.lcsc.com/v1/home/category");
assureResponse(response);
assert(response.body.length > 0);
assert(response.statusCode === 200);
function processCategoryEntries(categories) {
for (let category of categories) {
let productCount = category.productNum;
let pageCount = Math.ceil(productCount / 500);
// NOTE: We do *not* use the page count indicated by the API, but instead calculate it ourself from the product count. This is because the API-specified page count will cap out at the equivalent of 10k items, even when more pages than that are actually available.
for (let i = 1; i <= pageCount; i++) {
createItem({
id: `lcsc:category:${category.catalogId}:page-${i}`,
tags: [ "lcsc:category" ],
data: {
... category,
pageNumber: i
}
});
}
if (category.childCatelogs != null) {
processCategoryEntries(category.childCatelogs);
}
}
}
processCategoryEntries(response.body);
};
};