trouble-in-terror-town/node_modules/openupm-cli/lib/cmd-search.js
Mikolaj 2bbacbea09 did some more work on networking and removed EOS in favor of LRM
did some more work on networking and removed EOS in favor of Light Reflective Mirror
2022-05-31 15:04:31 +02:00

99 lines
2.8 KiB
JavaScript

const npmSearch = require("libnpmsearch");
const npmFetch = require("npm-registry-fetch");
const Table = require("cli-table");
const { log } = require("./logger");
const {
env,
getLatestVersion,
getNpmFetchOptions,
parseEnv
} = require("./core");
const { isConnectionError, is404Error } = require("./error-handler");
const searchEndpoint = async function(keyword, registry) {
if (!registry) registry = env.registry;
try {
const results = await npmSearch(keyword, getNpmFetchOptions());
log.verbose("npmsearch", results);
return results.map(x => {
return [
x.name,
x["dist-tags"] ? x["dist-tags"].latest : "",
x.time && x.time.modified ? x.time.modified.split("T")[0] : "",
""
];
});
} catch (err) {
if (!is404Error(err)) log.error("", err.message);
log.warn("", "fast search endpoint is not available, using old search.");
}
};
const searchOld = async function(keyword) {
// all endpoint
try {
const results = await npmFetch.json("/-/all", getNpmFetchOptions());
log.verbose("endpoint.all", results);
let objects = [];
if (results) {
if (Array.isArray(results)) {
// results is an array of objects
objects = results;
} else {
// results is an object
if ("_updated" in results) delete results["_updated"];
objects = Object.values(results);
}
}
// prepare rows
const rows = objects.map(pkg => {
let name = pkg.name;
let version = getLatestVersion(pkg);
let date =
pkg.time && pkg.time.modified ? pkg.time.modified.split("T")[0] : "";
let item = [name, version, date, ""];
return item;
});
// filter keyword
const klc = keyword.toLowerCase();
return rows.filter(
row => row.filter(x => x.toLowerCase().includes(klc)).length > 0
);
} catch (err) {
if (!is404Error(err)) log.error("", err.message);
log.warn("", "/-/all endpoint is not available");
}
};
const getTable = function() {
var table = new Table({
head: ["Name", "Version", "Date"],
colWidths: [42, 20, 12]
});
return table;
};
module.exports = async function(keyword, options) {
// parse env
const envOk = await parseEnv(options, { checkPath: false });
if (!envOk) return 1;
let table = getTable();
// search endpoint
let results = await searchEndpoint(keyword);
// search old search
if (results === undefined) {
results = (await searchOld(keyword)) || [];
}
// search upstream
// if (env.upstream) {
// const upstreamResults =
// (await searchEndpoint(keyword, env.upstreamRegistry)) || [];
// results.push(...upstreamResults);
// }
if (results && results.length) {
results.forEach(x => table.push(x.slice(0, -1)));
console.log(table.toString());
} else log.notice("", `No matches found for "${keyword}"`);
return 0;
};