@dpkit/file
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
43 lines • 5.77 kB
JavaScript
import { join, relative, resolve, sep } from "node:path";
import { getBasepath, isRemotePath } from "@dpkit/core";
export function getPackageBasepath(dataPackage) {
const paths = [];
for (const resource of dataPackage.resources) {
if (!resource.path) {
continue;
}
const resourcePaths = Array.isArray(resource.path)
? resource.path
: [resource.path];
paths.push(...resourcePaths);
}
return getCommonLocalBasepath(paths);
}
export function getCommonLocalBasepath(paths) {
const absoluteBasepaths = paths
.filter(path => !isRemotePath(path))
.map(path => resolve(getBasepath(path)));
if (!absoluteBasepaths.length) {
return undefined;
}
// On Unix it split the root fs as an empty segment
const segmentTable = absoluteBasepaths.map(path => path.split(sep).map(segment => segment || "/"));
let column = 0;
const segments = [];
while (true) {
const segmentColumn = segmentTable.map(segments => segments[column]);
const uniqueSegments = new Set(segmentColumn);
if (uniqueSegments.size !== 1)
break;
if (!segmentColumn[0])
break;
column++;
segments.push(segmentColumn[0]);
}
if (!segments.length) {
throw new Error("Cannot find common basepath");
}
const basepath = relative(process.cwd(), join(...segments));
return basepath;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BhY2thZ2UvcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ3hELE9BQU8sRUFBZ0IsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUVyRSxNQUFNLFVBQVUsa0JBQWtCLENBQUMsV0FBb0I7SUFDckQsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFBO0lBRTFCLEtBQUssTUFBTSxRQUFRLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsU0FBUTtRQUNWLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDaEQsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQ2YsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRW5CLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQTtJQUM5QixDQUFDO0lBRUQsT0FBTyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUN0QyxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEtBQWU7SUFDcEQsTUFBTSxpQkFBaUIsR0FBRyxLQUFLO1NBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25DLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRTFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM5QixPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBRUQsbURBQW1EO0lBQ25ELE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FDL0MsQ0FBQTtJQUVELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQTtJQUNkLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQTtJQUU3QixPQUFPLElBQUksRUFBRSxDQUFDO1FBQ1osTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ3BFLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBRTdDLElBQUksY0FBYyxDQUFDLElBQUksS0FBSyxDQUFDO1lBQUUsTUFBSztRQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUFFLE1BQUs7UUFFNUIsTUFBTSxFQUFFLENBQUE7UUFDUixRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pDLENBQUM7SUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtJQUNoRCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBQzNELE9BQU8sUUFBUSxDQUFBO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luLCByZWxhdGl2ZSwgcmVzb2x2ZSwgc2VwIH0gZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyB0eXBlIFBhY2thZ2UsIGdldEJhc2VwYXRoLCBpc1JlbW90ZVBhdGggfSBmcm9tIFwiQGRwa2l0L2NvcmVcIlxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFja2FnZUJhc2VwYXRoKGRhdGFQYWNrYWdlOiBQYWNrYWdlKSB7XG4gIGNvbnN0IHBhdGhzOiBzdHJpbmdbXSA9IFtdXG5cbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBkYXRhUGFja2FnZS5yZXNvdXJjZXMpIHtcbiAgICBpZiAoIXJlc291cmNlLnBhdGgpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VQYXRocyA9IEFycmF5LmlzQXJyYXkocmVzb3VyY2UucGF0aClcbiAgICAgID8gcmVzb3VyY2UucGF0aFxuICAgICAgOiBbcmVzb3VyY2UucGF0aF1cblxuICAgIHBhdGhzLnB1c2goLi4ucmVzb3VyY2VQYXRocylcbiAgfVxuXG4gIHJldHVybiBnZXRDb21tb25Mb2NhbEJhc2VwYXRoKHBhdGhzKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tbW9uTG9jYWxCYXNlcGF0aChwYXRoczogc3RyaW5nW10pIHtcbiAgY29uc3QgYWJzb2x1dGVCYXNlcGF0aHMgPSBwYXRoc1xuICAgIC5maWx0ZXIocGF0aCA9PiAhaXNSZW1vdGVQYXRoKHBhdGgpKVxuICAgIC5tYXAocGF0aCA9PiByZXNvbHZlKGdldEJhc2VwYXRoKHBhdGgpKSlcblxuICBpZiAoIWFic29sdXRlQmFzZXBhdGhzLmxlbmd0aCkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIC8vIE9uIFVuaXggaXQgc3BsaXQgdGhlIHJvb3QgZnMgYXMgYW4gZW1wdHkgc2VnbWVudFxuICBjb25zdCBzZWdtZW50VGFibGUgPSBhYnNvbHV0ZUJhc2VwYXRocy5tYXAocGF0aCA9PlxuICAgIHBhdGguc3BsaXQoc2VwKS5tYXAoc2VnbWVudCA9PiBzZWdtZW50IHx8IFwiL1wiKSxcbiAgKVxuXG4gIGxldCBjb2x1bW4gPSAwXG4gIGNvbnN0IHNlZ21lbnRzOiBzdHJpbmdbXSA9IFtdXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCBzZWdtZW50Q29sdW1uID0gc2VnbWVudFRhYmxlLm1hcChzZWdtZW50cyA9PiBzZWdtZW50c1tjb2x1bW5dKVxuICAgIGNvbnN0IHVuaXF1ZVNlZ21lbnRzID0gbmV3IFNldChzZWdtZW50Q29sdW1uKVxuXG4gICAgaWYgKHVuaXF1ZVNlZ21lbnRzLnNpemUgIT09IDEpIGJyZWFrXG4gICAgaWYgKCFzZWdtZW50Q29sdW1uWzBdKSBicmVha1xuXG4gICAgY29sdW1uKytcbiAgICBzZWdtZW50cy5wdXNoKHNlZ21lbnRDb2x1bW5bMF0pXG4gIH1cblxuICBpZiAoIXNlZ21lbnRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIGNvbW1vbiBiYXNlcGF0aFwiKVxuICB9XG5cbiAgY29uc3QgYmFzZXBhdGggPSByZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBqb2luKC4uLnNlZ21lbnRzKSlcbiAgcmV0dXJuIGJhc2VwYXRoXG59XG4iXX0=