@dpkit/file
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
53 lines • 8.26 kB
JavaScript
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==