UNPKG

@dpkit/file

Version:

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

53 lines 8.26 kB
import { denormalizePath, denormalizeResource, getFilename, isRemotePath, } from "@dpkit/core"; import invariant from "tiny-invariant"; export async function saveResourceFiles(resource, options) { const { basepath, withRemote, withoutFolders } = options; const descriptor = denormalizeResource(resource, { basepath }); const dedupIndexes = new Map(); const saveFile = async (path, name, index) => { const isRemote = isRemotePath(path); // Denormalized path always uses "/" as the path separator let denormalizedPath = denormalizePath(path, { basepath }); const normalizedPath = path; if (isRemote) { if (!withRemote) return path; const filename = getFilename(path); if (!filename) return path; denormalizedPath = filename; } else if (withoutFolders) { denormalizedPath = denormalizedPath.replaceAll("/", "-"); } const dedupIndex = dedupIndexes.get(denormalizedPath) ?? 0; dedupIndexes.set(denormalizedPath, dedupIndex + 1); if (dedupIndex) { denormalizedPath = denormalizedPath.replace(/^(.*?)([^\/]+?)(\.[^\/]+(?:\.[^\/]+)*)$/, `$1$2-${dedupIndex}$3`); } denormalizedPath = await options.saveFile({ propertyName: name, propertyIndex: index, normalizedPath, denormalizedPath, }); return denormalizedPath; }; if (typeof resource.path === "string") { descriptor.path = await saveFile(resource.path, "path", 0); } if (Array.isArray(resource.path)) { invariant(Array.isArray(descriptor.path), "Multipart as resource.path"); for (const [index, path] of resource.path.entries()) { descriptor.path[index] = await saveFile(path, "path", index); } } for (const name of ["dialect", "schema"]) { const path = resource[name]; if (typeof path === "string") { descriptor[name] = await saveFile(path, name, 0); } } return descriptor; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc291cmNlL3NhdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLFlBQVksR0FDYixNQUFNLGFBQWEsQ0FBQTtBQUNwQixPQUFPLFNBQVMsTUFBTSxnQkFBZ0IsQ0FBQTtBQVN0QyxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxRQUFrQixFQUNsQixPQUtDO0lBRUQsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEdBQUcsT0FBTyxDQUFBO0lBRXhELE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDOUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUE7SUFFOUMsTUFBTSxRQUFRLEdBQUcsS0FBSyxFQUFFLElBQVksRUFBRSxJQUFZLEVBQUUsS0FBYSxFQUFFLEVBQUU7UUFDbkUsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRW5DLDBEQUEwRDtRQUMxRCxJQUFJLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQzFELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQTtRQUUzQixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFVBQVU7Z0JBQUUsT0FBTyxJQUFJLENBQUE7WUFDNUIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ2xDLElBQUksQ0FBQyxRQUFRO2dCQUFFLE9BQU8sSUFBSSxDQUFBO1lBQzFCLGdCQUFnQixHQUFHLFFBQVEsQ0FBQTtRQUM3QixDQUFDO2FBQU0sSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUMxQixnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQzFELENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzFELFlBQVksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBRWxELElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQ3pDLHlDQUF5QyxFQUN6QyxRQUFRLFVBQVUsSUFBSSxDQUN2QixDQUFBO1FBQ0gsQ0FBQztRQUVELGdCQUFnQixHQUFHLE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUN4QyxZQUFZLEVBQUUsSUFBSTtZQUNsQixhQUFhLEVBQUUsS0FBSztZQUNwQixjQUFjO1lBQ2QsZ0JBQWdCO1NBQ2pCLENBQUMsQ0FBQTtRQUVGLE9BQU8sZ0JBQWdCLENBQUE7SUFDekIsQ0FBQyxDQUFBO0lBRUQsSUFBSSxPQUFPLFFBQVEsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdEMsVUFBVSxDQUFDLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUM1RCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFBO1FBQ3ZFLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDcEQsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQzlELENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQVUsRUFBRSxDQUFDO1FBQ2xELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMzQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxVQUFVLENBQUE7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiQGRwa2l0L2NvcmVcIlxuaW1wb3J0IHtcbiAgZGVub3JtYWxpemVQYXRoLFxuICBkZW5vcm1hbGl6ZVJlc291cmNlLFxuICBnZXRGaWxlbmFtZSxcbiAgaXNSZW1vdGVQYXRoLFxufSBmcm9tIFwiQGRwa2l0L2NvcmVcIlxuaW1wb3J0IGludmFyaWFudCBmcm9tIFwidGlueS1pbnZhcmlhbnRcIlxuXG5leHBvcnQgdHlwZSBTYXZlRmlsZSA9IChvcHRpb25zOiB7XG4gIHByb3BlcnR5TmFtZTogc3RyaW5nXG4gIHByb3BlcnR5SW5kZXg6IG51bWJlclxuICBub3JtYWxpemVkUGF0aDogc3RyaW5nXG4gIGRlbm9ybWFsaXplZFBhdGg6IHN0cmluZ1xufSkgPT4gUHJvbWlzZTxzdHJpbmc+XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYXZlUmVzb3VyY2VGaWxlcyhcbiAgcmVzb3VyY2U6IFJlc291cmNlLFxuICBvcHRpb25zOiB7XG4gICAgc2F2ZUZpbGU6IFNhdmVGaWxlXG4gICAgYmFzZXBhdGg/OiBzdHJpbmdcbiAgICB3aXRoUmVtb3RlPzogYm9vbGVhblxuICAgIHdpdGhvdXRGb2xkZXJzPzogYm9vbGVhblxuICB9LFxuKSB7XG4gIGNvbnN0IHsgYmFzZXBhdGgsIHdpdGhSZW1vdGUsIHdpdGhvdXRGb2xkZXJzIH0gPSBvcHRpb25zXG5cbiAgY29uc3QgZGVzY3JpcHRvciA9IGRlbm9ybWFsaXplUmVzb3VyY2UocmVzb3VyY2UsIHsgYmFzZXBhdGggfSlcbiAgY29uc3QgZGVkdXBJbmRleGVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKVxuXG4gIGNvbnN0IHNhdmVGaWxlID0gYXN5bmMgKHBhdGg6IHN0cmluZywgbmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgaXNSZW1vdGUgPSBpc1JlbW90ZVBhdGgocGF0aClcblxuICAgIC8vIERlbm9ybWFsaXplZCBwYXRoIGFsd2F5cyB1c2VzIFwiL1wiIGFzIHRoZSBwYXRoIHNlcGFyYXRvclxuICAgIGxldCBkZW5vcm1hbGl6ZWRQYXRoID0gZGVub3JtYWxpemVQYXRoKHBhdGgsIHsgYmFzZXBhdGggfSlcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhdGhcblxuICAgIGlmIChpc1JlbW90ZSkge1xuICAgICAgaWYgKCF3aXRoUmVtb3RlKSByZXR1cm4gcGF0aFxuICAgICAgY29uc3QgZmlsZW5hbWUgPSBnZXRGaWxlbmFtZShwYXRoKVxuICAgICAgaWYgKCFmaWxlbmFtZSkgcmV0dXJuIHBhdGhcbiAgICAgIGRlbm9ybWFsaXplZFBhdGggPSBmaWxlbmFtZVxuICAgIH0gZWxzZSBpZiAod2l0aG91dEZvbGRlcnMpIHtcbiAgICAgIGRlbm9ybWFsaXplZFBhdGggPSBkZW5vcm1hbGl6ZWRQYXRoLnJlcGxhY2VBbGwoXCIvXCIsIFwiLVwiKVxuICAgIH1cblxuICAgIGNvbnN0IGRlZHVwSW5kZXggPSBkZWR1cEluZGV4ZXMuZ2V0KGRlbm9ybWFsaXplZFBhdGgpID8/IDBcbiAgICBkZWR1cEluZGV4ZXMuc2V0KGRlbm9ybWFsaXplZFBhdGgsIGRlZHVwSW5kZXggKyAxKVxuXG4gICAgaWYgKGRlZHVwSW5kZXgpIHtcbiAgICAgIGRlbm9ybWFsaXplZFBhdGggPSBkZW5vcm1hbGl6ZWRQYXRoLnJlcGxhY2UoXG4gICAgICAgIC9eKC4qPykoW15cXC9dKz8pKFxcLlteXFwvXSsoPzpcXC5bXlxcL10rKSopJC8sXG4gICAgICAgIGAkMSQyLSR7ZGVkdXBJbmRleH0kM2AsXG4gICAgICApXG4gICAgfVxuXG4gICAgZGVub3JtYWxpemVkUGF0aCA9IGF3YWl0IG9wdGlvbnMuc2F2ZUZpbGUoe1xuICAgICAgcHJvcGVydHlOYW1lOiBuYW1lLFxuICAgICAgcHJvcGVydHlJbmRleDogaW5kZXgsXG4gICAgICBub3JtYWxpemVkUGF0aCxcbiAgICAgIGRlbm9ybWFsaXplZFBhdGgsXG4gICAgfSlcblxuICAgIHJldHVybiBkZW5vcm1hbGl6ZWRQYXRoXG4gIH1cblxuICBpZiAodHlwZW9mIHJlc291cmNlLnBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICBkZXNjcmlwdG9yLnBhdGggPSBhd2FpdCBzYXZlRmlsZShyZXNvdXJjZS5wYXRoLCBcInBhdGhcIiwgMClcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHJlc291cmNlLnBhdGgpKSB7XG4gICAgaW52YXJpYW50KEFycmF5LmlzQXJyYXkoZGVzY3JpcHRvci5wYXRoKSwgXCJNdWx0aXBhcnQgYXMgcmVzb3VyY2UucGF0aFwiKVxuICAgIGZvciAoY29uc3QgW2luZGV4LCBwYXRoXSBvZiByZXNvdXJjZS5wYXRoLmVudHJpZXMoKSkge1xuICAgICAgZGVzY3JpcHRvci5wYXRoW2luZGV4XSA9IGF3YWl0IHNhdmVGaWxlKHBhdGgsIFwicGF0aFwiLCBpbmRleClcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IG5hbWUgb2YgW1wiZGlhbGVjdFwiLCBcInNjaGVtYVwiXSBhcyBjb25zdCkge1xuICAgIGNvbnN0IHBhdGggPSByZXNvdXJjZVtuYW1lXVxuICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZGVzY3JpcHRvcltuYW1lXSA9IGF3YWl0IHNhdmVGaWxlKHBhdGgsIG5hbWUsIDApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3Jcbn1cbiJdfQ==