diff --git a/packages/slug/package.json b/packages/slug/package.json index 62a6af4d3..7c931cb36 100644 --- a/packages/slug/package.json +++ b/packages/slug/package.json @@ -39,10 +39,10 @@ "@contentful/f36-icons": "^4.1.0", "@contentful/f36-tokens": "^4.0.0", "@contentful/field-editor-shared": "^1.5.3", - "@types/speakingurl": "^13.0.2", + "@types/speakingurl": "^13.0.6", "emotion": "^10.0.17", "lodash": "^4.17.15", - "speakingurl": "^13.0.0", + "speakingurl": "^14.0.1", "use-debounce": "^10.0.0" }, "devDependencies": { diff --git a/packages/slug/src/services/slugify.test.ts b/packages/slug/src/services/slugify.test.ts index f7c10fc77..073a02e9c 100644 --- a/packages/slug/src/services/slugify.test.ts +++ b/packages/slug/src/services/slugify.test.ts @@ -2,15 +2,21 @@ import { slugify } from './slugify'; describe('slugify', () => { const cases = [ - ['We ♥ $ & €', 'we-love-usd-and-eur'], - ['it`s a Slug', 'its-a-slug'], - ['it’S a slug', 'its-a-slug'], - ["it's a SLUG", 'its-a-slug'], + { input: 'We ♥ $ & €', output: 'we-love-usd-and-eur' }, + { input: 'it`s a Slug', output: 'its-a-slug' }, + { input: 'it’S a slug', output: 'its-a-slug' }, + { input: "it's a SLUG", output: 'its-a-slug' }, + // Swedish + { input: 'mr Åhlin goes to Malmö', output: 'mr-ahlin-goes-to-malmo', locale: 'sv' }, + // Danish + //{ input: 'Forårsjævndøgn', output: 'foraarsjaevndoegn', locale: 'dk' }, + // Finnish for ice cream cone + { input: 'jäätelötötterö', output: 'jaatelotottero', locale: 'fi' }, ]; - cases.forEach((input) => { - it(`converts "${input[0]}" to "${input[1]}"`, () => { - expect(slugify(input[0])).toBe(input[1]); + cases.forEach(({ input, output, locale }) => { + it(`converts "${input}" to "${output}"`, () => { + expect(slugify(input, locale)).toBe(output); }); }); }); diff --git a/packages/slug/src/services/slugify.ts b/packages/slug/src/services/slugify.ts index 1163dc435..e62bd251e 100644 --- a/packages/slug/src/services/slugify.ts +++ b/packages/slug/src/services/slugify.ts @@ -7,6 +7,7 @@ const languages = [ 'az', 'cs', 'de', + 'dk', 'dv', 'en', 'es', @@ -28,6 +29,7 @@ const languages = [ 'ru', 'sk', 'sr', + 'sv', 'tr', 'uk', 'vn', diff --git a/yarn.lock b/yarn.lock index b54987666..218e5c4f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6921,7 +6921,7 @@ dependencies: "@types/node" "*" -"@types/speakingurl@^13.0.2": +"@types/speakingurl@^13.0.6": version "13.0.6" resolved "https://registry.yarnpkg.com/@types/speakingurl/-/speakingurl-13.0.6.tgz#fb64d905bb802e89facca641ed4ff5ed13854c88" integrity sha512-ywkRHNHBwq0mFs/2HRgW6TEBAzH66G8f2Txzh1aGR0UC9ZoAUHfHxLZGDhwMpck4BpSnB61eNFIFmlV+TJ+KUA== @@ -22309,10 +22309,10 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" -speakingurl@^13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-13.0.0.tgz#266c52d2b47585375af058e4783c8d1097a2d3db" - integrity sha512-bjwu8erR5rsfHW9ZKHReHJt9CEPrJCZopJ3rMVcCh8buJom+BI/7bHWYiHSZd+yS9rx4DGN+r5oKoVqDkiqfWw== +speakingurl@^14.0.1: + version "14.0.1" + resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53" + integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== split2@^3.0.0, split2@^3.2.2: version "3.2.2" @@ -22498,7 +22498,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -22516,15 +22516,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" @@ -22634,7 +22625,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -22662,13 +22653,6 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.0, strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -25006,7 +24990,7 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -25041,15 +25025,6 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"