bpms_site/.svn/pristine/a4/a44b5ec95d5970487e38c2dbbaf47e2c2da3976a.svn-base
2025-11-02 16:38:49 +03:30

53 lines
1.8 KiB
Plaintext

import { BloomFilter } from "../shared/lib/bloom-filter";
import { isDynamicRoute } from "../shared/lib/router/utils";
import { removeTrailingSlash } from "../shared/lib/router/utils/remove-trailing-slash";
import { tryToParsePath } from "./try-to-parse-path";
export function createClientRouterFilter(paths, redirects, allowedErrorRate) {
const staticPaths = new Set();
const dynamicPaths = new Set();
for (const path of paths){
if (isDynamicRoute(path)) {
let subPath = "";
const pathParts = path.split("/");
// start at 1 since we split on '/' and the path starts
// with this so the first entry is an empty string
for(let i = 1; i < pathParts.length + 1; i++){
const curPart = pathParts[i];
if (curPart.startsWith("[")) {
break;
}
subPath = `${subPath}/${curPart}`;
}
if (subPath) {
dynamicPaths.add(subPath);
}
} else {
staticPaths.add(path);
}
}
for (const redirect of redirects){
const { source } = redirect;
const path = removeTrailingSlash(source);
let tokens = [];
try {
tokens = tryToParsePath(source).tokens || [];
} catch {}
if (tokens.every((token)=>typeof token === "string")) {
// only include static redirects initially
staticPaths.add(path);
}
}
const staticFilter = BloomFilter.from([
...staticPaths
], allowedErrorRate);
const dynamicFilter = BloomFilter.from([
...dynamicPaths
], allowedErrorRate);
const data = {
staticFilter: staticFilter.export(),
dynamicFilter: dynamicFilter.export()
};
return data;
}
//# sourceMappingURL=create-client-router-filter.js.map