cjk-slug
Version:
8 lines (7 loc) • 2.14 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../src/index.ts"],
"sourcesContent": ["import { normalize as normalizeCjk } from 'normalize-cjk';\n\ninterface CjkSlugOptions {\n lowercase?: boolean;\n normalize?: (input: string) => string;\n}\n\nexport default function cjkSlug(\n title: string,\n { lowercase = true, normalize = normalizeCjk }: CjkSlugOptions = {},\n): string {\n let slug = normalize(title)\n // strip half-width quotation marks\n // - 0022: quotation mark (\")\n // - 0027: apostrophe (')\n // - 02bc: modifier letter apostrophe\n // - 0060: grave accent\n // - 00b4: acute accent\n // - 2018: left single quotation mark\n // - 2019: right single quotation mark\n // - 201c: left double quotation mark\n // - 201d: right double quotation mark\n .replace(/[\\u0022\\u0027\\u02bc\\u0060\\u00b4\\u2018\\u2019\\u201c\\u201d]/g, '')\n // replace all whitespaces with a dash\n .replace(/[\\s_]+/g, '-')\n // replace non-allowed sequences with a dash\n // allowed sequences:\n // - Alphanumeric\n // - Dash\n // - SEO-friendly CJK character sequences\n // 3040 - 309f: Hiragana\n // 30a0 - 30ff: Katakana\n // 3400 - 4dbf: CJK unified ideographs Extension A - Rare Kanji\n // 4e00 - 9faf: CJK unified ideographs - Common and uncommon Kanji\n // ac00 - d7a3: Korean completed words (\uAC00-\uD7A3)\n // ff00 - ff9f: Full-width Roman characters and half-width Katakana\n .replace(/[^a-z\\d\\-\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4dbf\\u4e00-\\u9faf\\uac00-\\ud7a3\\uff00-\\uff9f]/gi, '-')\n // replace multiple dashes with a single dash\n .replace(/-+/g, '-')\n // remove leading / trailing dashes\n .replace(/^-|-$/g, '');\n\n if (lowercase) {\n slug = slug.toLowerCase();\n }\n\n return slug;\n}\n"],
"mappings": ";;;;AAAA,SAAS,aAAa,oBAAoB;AAO3B,SAAR,QACL,OACA,EAAE,YAAY,MAAM,YAAY,aAAa,IAAoB,CAAC,GAC1D;AACR,MAAI,OAAO,UAAU,KAAK,EAWvB,QAAQ,6DAA6D,EAAE,EAEvE,QAAQ,WAAW,GAAG,EAYtB,QAAQ,8FAA8F,GAAG,EAEzG,QAAQ,OAAO,GAAG,EAElB,QAAQ,UAAU,EAAE;AAEvB,MAAI,WAAW;AACb,WAAO,KAAK,YAAY;AAAA,EAC1B;AAEA,SAAO;AACT;AAxCwB;",
"names": []
}