UNPKG

@dpkit/file

Version:

Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames

43 lines 5.77 kB
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=