add robust slugs

This commit is contained in:
tresabhi committed 2026-07-31 13:43:53 -05:00
1 parent 0a7a220af3
commit caf238dd32
4 files changed
+61 -43

No files matched your search

+1
View File
@@ -192,6 +192,7 @@
"searchtanks", "searchtanks",
"SHAREDEXP", "SHAREDEXP",
"SKLLD", "SKLLD",
"sluggify",
"smoothstep", "smoothstep",
"Smri", "Smri",
"Specularity", "Specularity",
+42 -41
View File
@@ -1,49 +1,50 @@
export * from './assertSecret'; export * from "./assertSecret";
export * from './asset'; export * from "./asset";
export * from './availableProvisions'; export * from "./availableProvisions";
export * from './averageDefinitions'; export * from "./averageDefinitions";
// export * from './camouflageDefinitions'; // export * from './camouflageDefinitions';
// export * from './checkConsumableProvisionInclusivity'; // export * from './checkConsumableProvisionInclusivity';
export * from './coefficient'; export * from "./coefficient";
export * from './consumableDefinitions'; export * from "./consumableDefinitions";
// export * from './context'; // export * from './context';
export * from './createDefaultSkills'; export * from "./createDefaultSkills";
export * from './degressiveStat'; export * from "./degressiveStat";
export * from './discoveredIdDefinitions'; export * from "./discoveredIdDefinitions";
export * from './emblemURL'; export * from "./emblemURL";
export * from './equipmentDefinitions'; export * from "./equipmentDefinitions";
export * from './eventManager'; export * from "./eventManager";
export * from './gameDefinitions'; export * from "./gameDefinitions";
export * from './getArchivedLatestSeasonNumber'; export * from "./getArchivedLatestSeasonNumber";
export * from "./sluggify";
// export * from './getArchivedRatingInfo'; // export * from './getArchivedRatingInfo';
export * from './getArchivedRatingLeaderboard'; export * from "./getArchivedRatingLeaderboard";
// export * from './getArchivedRatingMidnightLeaderboard'; // export * from './getArchivedRatingMidnightLeaderboard';
export * from './getTimeDaysAgo'; export * from "./getTimeDaysAgo";
export * from './isExplosive'; export * from "./isExplosive";
export * from './mapDefinitions'; export * from "./mapDefinitions";
export * from './modelDefinitions'; export * from "./modelDefinitions";
export * from './normalizeBoundingBox'; export * from "./normalizeBoundingBox";
// export * from './parseBkni'; // export * from './parseBkni';
// export * from './patientFetch'; // export * from './patientFetch';
export * from './patientFetchJSON'; export * from "./patientFetchJSON";
export * from './progressiveStat'; export * from "./progressiveStat";
export * from './provisionDefinitions'; export * from "./provisionDefinitions";
export * from './resolveDpm'; export * from "./resolveDpm";
export * from './resolvePenetrationCoefficient'; export * from "./resolvePenetrationCoefficient";
export * from './reviews'; export * from "./reviews";
export * from './skillDefinitions'; export * from "./skillDefinitions";
export * from './sum'; export * from "./sum";
export * from './tankDefinitions'; export * from "./tankDefinitions";
export * from './tankIcon'; export * from "./tankIcon";
export * from './tankNames'; export * from "./tankNames";
export * from './unionBoundingBox'; export * from "./unionBoundingBox";
export * from './uniqueGuns'; export * from "./uniqueGuns";
export * from './unwrapBlitzkitResponse'; export * from "./unwrapBlitzkitResponse";
export * from './votes'; export * from "./votes";
// export * from './withCORSProxy'; // export * from './withCORSProxy';
export * from './createDefaultProvisions'; export * from "./createDefaultProvisions";
export * from './gallery'; export * from "./gallery";
export * from './metaSortTank'; export * from "./metaSortTank";
export * from './popularTanks'; export * from "./popularTanks";
export * from './romanize'; export * from "./romanize";
export * from './youtubers'; export * from "./youtubers";
+16
View File
@@ -0,0 +1,16 @@
import { slugify } from "transliteration";
const nonAlphanumericRegex = /[^a-z0-9]/g;
const multipleDashesRegex = /--+/g;
const trailingDashRegex = /-$/g;
const leadingDashRegex = /^-/g;
export function sluggify(value: string) {
let slug = slugify(value);
slug = slug.replaceAll(nonAlphanumericRegex, "-");
slug = slug.replaceAll(multipleDashesRegex, "-");
slug = slug.replaceAll(trailingDashRegex, "");
slug = slug.replaceAll(leadingDashRegex, "");
return slug;
}
@@ -22,6 +22,7 @@ import {
ResearchCost, ResearchCost,
ShellType, ShellType,
SkillDefinitions, SkillDefinitions,
sluggify,
TankClass, TankClass,
TankDefinitions, TankDefinitions,
TankPrice, TankPrice,
@@ -36,7 +37,6 @@ import locales from "@blitzkit/i18n/locales.json";
import { readFile } from "fs/promises"; import { readFile } from "fs/promises";
import { parse as parsePath } from "path"; import { parse as parsePath } from "path";
import type { Vector3Tuple } from "three"; import type { Vector3Tuple } from "three";
import { slugify } from "transliteration";
import { parse as parseYaml } from "yaml"; import { parse as parseYaml } from "yaml";
import { AssetUploader } from "../core/github/assetUploader"; import { AssetUploader } from "../core/github/assetUploader";
import { vfs } from "./constants"; import { vfs } from "./constants";
@@ -765,7 +765,7 @@ export async function definitions() {
getString(tank.userString) getString(tank.userString)
).locales.en; ).locales.en;
let slug = slugify(name); let slug = sluggify(name);
idToNation[tankId] = nation; idToNation[tankId] = nation;