diff --git a/backend/package.json b/backend/package.json index 2e2957583..df55876ca 100644 --- a/backend/package.json +++ b/backend/package.json @@ -84,7 +84,7 @@ "preview-email": "^3.1.0", "pug": "^3.0.3", "sanitize-html": "~2.17.0", - "slug": "~9.1.0", + "slugify": "^1.6.6", "trunc-html": "~1.1.2", "tslog": "^4.9.3", "uuid": "~9.0.1", diff --git a/backend/src/db/factories.ts b/backend/src/db/factories.ts index d1b93b7e5..d74b9d0ea 100644 --- a/backend/src/db/factories.ts +++ b/backend/src/db/factories.ts @@ -7,7 +7,7 @@ import { faker } from '@faker-js/faker' import { hashSync } from 'bcryptjs' import { Factory } from 'rosie' -import slugify from 'slug' +import slugify from 'slugify' import { v4 as uuid } from 'uuid' import { generateInviteCode } from '@graphql/resolvers/inviteCodes' diff --git a/backend/src/graphql/resolvers/attachments/attachments.ts b/backend/src/graphql/resolvers/attachments/attachments.ts index 6a961dfe7..348f7a1a0 100644 --- a/backend/src/graphql/resolvers/attachments/attachments.ts +++ b/backend/src/graphql/resolvers/attachments/attachments.ts @@ -1,7 +1,7 @@ import path from 'node:path' import { UserInputError } from 'apollo-server-express' -import slug from 'slug' +import slug from 'slugify' import { v4 as uuid } from 'uuid' import type { S3Config } from '@config/index' diff --git a/backend/src/graphql/resolvers/images/imagesS3.ts b/backend/src/graphql/resolvers/images/imagesS3.ts index 6c154f89a..00dbc0d41 100644 --- a/backend/src/graphql/resolvers/images/imagesS3.ts +++ b/backend/src/graphql/resolvers/images/imagesS3.ts @@ -2,7 +2,7 @@ import path from 'node:path' import { UserInputError } from 'apollo-server' import { FileUpload } from 'graphql-upload' -import slug from 'slug' +import slug from 'slugify' import { v4 as uuid } from 'uuid' import type { S3Config } from '@config/index' diff --git a/backend/src/middleware/slugify/uniqueSlug.ts b/backend/src/middleware/slugify/uniqueSlug.ts index 8f540a6ab..7880ece5c 100644 --- a/backend/src/middleware/slugify/uniqueSlug.ts +++ b/backend/src/middleware/slugify/uniqueSlug.ts @@ -1,10 +1,12 @@ -import slugify from 'slug' +import slugify from 'slugify' + +slugify.extend({ Ä: 'AE', ä: 'ae', Ö: 'OE', ö: 'oe', Ü: 'UE', ü: 'ue', ß: 'ss' }) type IsUnique = (slug: string) => Promise export default async function uniqueSlug(str: string, isUnique: IsUnique) { const slug = slugify(str || 'anonymous', { lower: true, - multicharmap: { Ä: 'AE', ä: 'ae', Ö: 'OE', ö: 'oe', Ü: 'UE', ü: 'ue', ß: 'ss' }, + remove: /[*+~.()'"!:@]/g, }) if (await isUnique(slug)) return slug diff --git a/backend/yarn.lock b/backend/yarn.lock index 1ca564bf6..d28f1b742 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -10398,10 +10398,10 @@ slug@^8.2.2: resolved "https://registry.yarnpkg.com/slug/-/slug-8.2.2.tgz#33b019a857a11fc4773c1e9a9f60e3da651a9e5d" integrity sha512-5ByW6qXqPeG0Tmlkh24JhdXhvQsbaJSjVr3GgGxUV0BSskZKKBZZfFWxezap8+fh1vxBN9GVbqI1V6nqAFxlBg== -slug@~9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/slug/-/slug-9.1.0.tgz#246baf1e9d8e821f7f5863a7c8bdd86a7ec3f12c" - integrity sha512-ioOsCfzQSu+D6NZ8XMCR8IW9FgvF8W7Xzz56hBkB/ALvNaWeBs2MUvvPugq3GCrxfHPFeK6hAxGkY/WLnfX2Lg== +slugify@^1.6.6: + version "1.6.6" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.6.tgz#2d4ac0eacb47add6af9e04d3be79319cbcc7924b" + integrity sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw== smart-buffer@^4.2.0: version "4.2.0" diff --git a/package.json b/package.json index 795b25ec9..031fae5d9 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "neo4j-driver": "^4.3.4", "neode": "^0.4.8", "rosie": "^2.1.0", - "slug": "^10.0.0" + "slugify": "^1.6.6" }, "optionalDependencies": { "@vuepress/bundler-vite": "^2.0.0-rc.18", diff --git a/yarn.lock b/yarn.lock index 5e296d0ee..546dff28d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7743,10 +7743,10 @@ slimsearch@^2.1.1: resolved "https://registry.npmjs.org/slimsearch/-/slimsearch-2.1.1.tgz" integrity sha512-l1utJWal8F/RIheYk88DE2+enI12nIrn5SHt4ih/CNAH81PzkTv2GVBODlLynDJb7xan5hjd8XTL5f0L4cxLQA== -slug@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/slug/-/slug-10.0.0.tgz" - integrity sha512-M8s2PWOUeSCdD4S1NH5lCzXg2zFV1fozrtfr0FSKl65x+EF1rUowj+/vyFlnHgxPxWzT+DL0VXKfYc1DHJoymg== +slugify@^1.6.6: + version "1.6.6" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.6.tgz#2d4ac0eacb47add6af9e04d3be79319cbcc7924b" + integrity sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw== source-map-js@^1.2.0, source-map-js@^1.2.1: version "1.2.1"