diff --git a/sites/svelte.dev/package-lock.json b/sites/svelte.dev/package-lock.json index b362543efd..05781d383c 100644 --- a/sites/svelte.dev/package-lock.json +++ b/sites/svelte.dev/package-lock.json @@ -15,7 +15,6 @@ "do-not-zip": "^1.0.0", "flexsearch": "^0.7.31", "flru": "^1.0.2", - "slugify": "^1.6.5", "sourcemap-codec": "^1.4.8", "svelte-local-storage-store": "^0.4.0" }, @@ -3454,14 +3453,6 @@ "node": ">= 10" } }, - "node_modules/slugify": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.5.tgz", - "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==", - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/sorcery": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", @@ -6529,11 +6520,6 @@ "totalist": "^3.0.0" } }, - "slugify": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.5.tgz", - "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==" - }, "sorcery": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", diff --git a/sites/svelte.dev/package.json b/sites/svelte.dev/package.json index 792ad728a5..e93bac371e 100644 --- a/sites/svelte.dev/package.json +++ b/sites/svelte.dev/package.json @@ -23,7 +23,6 @@ "do-not-zip": "^1.0.0", "flexsearch": "^0.7.31", "flru": "^1.0.2", - "slugify": "^1.6.5", "sourcemap-codec": "^1.4.8", "svelte-local-storage-store": "^0.4.0" }, diff --git a/sites/svelte.dev/src/lib/search/content.js b/sites/svelte.dev/src/lib/search/content.js index 2de86eac7f..8ebf6b5e23 100644 --- a/sites/svelte.dev/src/lib/search/content.js +++ b/sites/svelte.dev/src/lib/search/content.js @@ -62,6 +62,7 @@ export function content() { const intro = subsections.shift().trim(); + console.log(normalizeSlugify(h3)); blocks.push({ breadcrumbs: [...breadcrumbs, removeMarkdown(metadata.title), removeMarkdown(h3)], href: category.href([slug, normalizeSlugify(h3)]), diff --git a/sites/svelte.dev/src/lib/server/docs/index.js b/sites/svelte.dev/src/lib/server/docs/index.js index 2a10a5a8ce..5f95a4954b 100644 --- a/sites/svelte.dev/src/lib/server/docs/index.js +++ b/sites/svelte.dev/src/lib/server/docs/index.js @@ -13,7 +13,19 @@ import ts, { ScriptTarget } from 'typescript'; import MagicString from 'magic-string'; import { fileURLToPath } from 'url'; import { createHash } from 'crypto'; -import slugify from 'slugify'; + +/** @param {string} title */ +export function slugify(title) { + return title + .toLowerCase() + .replace(/'/g, '') + .replace(/</g, '') + .replace(/>/g, '') + .replace(/[^a-z0-9-$]/g, '-') + .replace(/-{2,}/g, '-') + .replace(/^-/, '') + .replace(/-$/, ''); +} /** @param {string} markdown */ export function removeMarkdown(markdown) { @@ -28,9 +40,14 @@ export function removeMarkdown(markdown) { .trim(); } +/** @param {string} html */ +export function removeHTMLEntities(html) { + return html.replace(/&.+?;/g, ''); +} + /** @param {string} str */ export const normalizeSlugify = (str) => { - return slugify(removeMarkdown(str)); + return slugify(removeHTMLEntities(removeMarkdown(str))).replace(/(<([^>]+)>)/gi, ''); }; const base = '../../site/content/docs/'; @@ -341,7 +358,7 @@ function parse({ file, body, code, codespan }) { current = title; - const normalized = normalizeSlugify(raw).replace(/(<([^>]+)>)/gi, ''); + const normalized = normalizeSlugify(raw); headings[level - 1] = normalized; headings.length = level;