Skip to content

Commit 094ade6

Browse files
committed
Use rollup to build the code and generate CommonJS and UMD versions
1 parent a6c5a30 commit 094ade6

File tree

6 files changed

+155
-40
lines changed

6 files changed

+155
-40
lines changed

bin/build.js

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,12 @@ var build = () => {
3333
'utf8'
3434
)
3535

36-
// update slugify
37-
var source =
38-
fs.readFileSync(path.resolve(__dirname, '../slugify.js'), 'utf8')
39-
.replace(
40-
/var charMap = JSON\.parse\(.*\)/,
41-
`var charMap = JSON.parse('${JSON.stringify(sort(charmap)).replace(/'/g, '\\\'')}')`
42-
)
43-
.replace(
44-
/var locales = JSON\.parse\(.*\)/,
45-
`var locales = JSON.parse('${JSON.stringify(clean(locales))}')`
46-
)
47-
fs.writeFileSync(path.resolve(__dirname, '../slugify.js'), source, 'utf8')
36+
// update locales.json in src folder
37+
fs.writeFileSync(
38+
path.resolve(__dirname, '../src/locales.json'),
39+
JSON.stringify(clean(locales), null, 2),
40+
'utf8'
41+
)
4842
}
4943

5044
build()

package.json

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,24 @@
1616
"url": "https://github.com/simov/slugify.git"
1717
},
1818
"devDependencies": {
19+
"@rollup/plugin-json": "^4.1.0",
1920
"coveralls": "^3.1.0",
2021
"mocha": "^7.2.0",
21-
"nyc": "^15.1.0"
22+
"nyc": "^15.1.0",
23+
"rollup": "^2.28.2"
2224
},
23-
"main": "./slugify.js",
25+
"unpkg": "./slugify.js",
26+
"main": "./slugify.cjs.js",
2427
"files": [
2528
"LICENSE",
2629
"README.md",
2730
"slugify.d.ts",
31+
"slugify.cjs.js",
2832
"slugify.js"
2933
],
3034
"types": "slugify.d.ts",
3135
"scripts": {
32-
"build": "node bin/build",
36+
"build": "node bin/build && npx rollup -c",
3337
"test:ci": "npx mocha --recursive",
3438
"test:cov": "npx nyc --reporter=lcov --reporter=text-summary mocha -- --recursive",
3539
"test": "npm run build && npm run test:ci"

rollup.config.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import pkg from './package.json';
2+
import json from '@rollup/plugin-json';
3+
4+
export default [
5+
{
6+
input: 'src/slugify.js',
7+
output: [
8+
{ file: pkg.main, format: 'cjs', exports: 'auto' },
9+
{ file: 'slugify.js', format: 'umd', exports: 'auto', name: 'slugify' }
10+
],
11+
plugins: [
12+
json({
13+
compact: true,
14+
namedExports: false
15+
})
16+
]
17+
}
18+
];

slugify.cjs.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
'use strict';
2+
3+
var charMap = {$:"dollar","%":"percent","&":"and","<":"less",">":"greater","|":"or","¢":"cent","£":"pound","¤":"currency","¥":"yen","©":"(c)","ª":"a","®":"(r)","º":"o","À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","Æ":"AE","Ç":"C","È":"E","É":"E","Ê":"E","Ë":"E","Ì":"I","Í":"I","Î":"I","Ï":"I","Ð":"D","Ñ":"N","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","Ù":"U","Ú":"U","Û":"U","Ü":"U","Ý":"Y","Þ":"TH","ß":"ss","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","æ":"ae","ç":"c","è":"e","é":"e","ê":"e","ë":"e","ì":"i","í":"i","î":"i","ï":"i","ð":"d","ñ":"n","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","ù":"u","ú":"u","û":"u","ü":"u","ý":"y","þ":"th","ÿ":"y","Ā":"A","ā":"a","Ă":"A","ă":"a","Ą":"A","ą":"a","Ć":"C","ć":"c","Č":"C","č":"c","Ď":"D","ď":"d","Đ":"DJ","đ":"dj","Ē":"E","ē":"e","Ė":"E","ė":"e","Ę":"e","ę":"e","Ě":"E","ě":"e","Ğ":"G","ğ":"g","Ģ":"G","ģ":"g","Ĩ":"I","ĩ":"i","Ī":"i","ī":"i","Į":"I","į":"i","İ":"I","ı":"i","Ķ":"k","ķ":"k","Ļ":"L","ļ":"l","Ľ":"L","ľ":"l","Ł":"L","ł":"l","Ń":"N","ń":"n","Ņ":"N","ņ":"n","Ň":"N","ň":"n","Ō":"O","ō":"o","Ő":"O","ő":"o","Œ":"OE","œ":"oe","Ŕ":"R","ŕ":"r","Ř":"R","ř":"r","Ś":"S","ś":"s","Ş":"S","ş":"s","Š":"S","š":"s","Ţ":"T","ţ":"t","Ť":"T","ť":"t","Ũ":"U","ũ":"u","Ū":"u","ū":"u","Ů":"U","ů":"u","Ű":"U","ű":"u","Ų":"U","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","ź":"z","Ż":"Z","ż":"z","Ž":"Z","ž":"z","ƒ":"f","Ơ":"O","ơ":"o","Ư":"U","ư":"u","Lj":"LJ","lj":"lj","Nj":"NJ","nj":"nj","Ș":"S","ș":"s","Ț":"T","ț":"t","˚":"o","Ά":"A","Έ":"E","Ή":"H","Ί":"I","Ό":"O","Ύ":"Y","Ώ":"W","ΐ":"i","Α":"A","Β":"B","Γ":"G","Δ":"D","Ε":"E","Ζ":"Z","Η":"H","Θ":"8","Ι":"I","Κ":"K","Λ":"L","Μ":"M","Ν":"N","Ξ":"3","Ο":"O","Π":"P","Ρ":"R","Σ":"S","Τ":"T","Υ":"Y","Φ":"F","Χ":"X","Ψ":"PS","Ω":"W","Ϊ":"I","Ϋ":"Y","ά":"a","έ":"e","ή":"h","ί":"i","ΰ":"y","α":"a","β":"b","γ":"g","δ":"d","ε":"e","ζ":"z","η":"h","θ":"8","ι":"i","κ":"k","λ":"l","μ":"m","ν":"n","ξ":"3","ο":"o","π":"p","ρ":"r","ς":"s","σ":"s","τ":"t","υ":"y","φ":"f","χ":"x","ψ":"ps","ω":"w","ϊ":"i","ϋ":"y","ό":"o","ύ":"y","ώ":"w","Ё":"Yo","Ђ":"DJ","Є":"Ye","І":"I","Ї":"Yi","Ј":"J","Љ":"LJ","Њ":"NJ","Ћ":"C","Џ":"DZ","А":"A","Б":"B","В":"V","Г":"G","Д":"D","Е":"E","Ж":"Zh","З":"Z","И":"I","Й":"J","К":"K","Л":"L","М":"M","Н":"N","О":"O","П":"P","Р":"R","С":"S","Т":"T","У":"U","Ф":"F","Х":"H","Ц":"C","Ч":"Ch","Ш":"Sh","Щ":"Sh","Ъ":"U","Ы":"Y","Ь":"","Э":"E","Ю":"Yu","Я":"Ya","а":"a","б":"b","в":"v","г":"g","д":"d","е":"e","ж":"zh","з":"z","и":"i","й":"j","к":"k","л":"l","м":"m","н":"n","о":"o","п":"p","р":"r","с":"s","т":"t","у":"u","ф":"f","х":"h","ц":"c","ч":"ch","ш":"sh","щ":"sh","ъ":"u","ы":"y","ь":"","э":"e","ю":"yu","я":"ya","ё":"yo","ђ":"dj","є":"ye","і":"i","ї":"yi","ј":"j","љ":"lj","њ":"nj","ћ":"c","ѝ":"u","џ":"dz","Ґ":"G","ґ":"g","Ғ":"GH","ғ":"gh","Қ":"KH","қ":"kh","Ң":"NG","ң":"ng","Ү":"UE","ү":"ue","Ұ":"U","ұ":"u","Һ":"H","һ":"h","Ә":"AE","ә":"ae","Ө":"OE","ө":"oe","฿":"baht","ა":"a","ბ":"b","გ":"g","დ":"d","ე":"e","ვ":"v","ზ":"z","თ":"t","ი":"i","კ":"k","ლ":"l","მ":"m","ნ":"n","ო":"o","პ":"p","ჟ":"zh","რ":"r","ს":"s","ტ":"t","უ":"u","ფ":"f","ქ":"k","ღ":"gh","ყ":"q","შ":"sh","ჩ":"ch","ც":"ts","ძ":"dz","წ":"ts","ჭ":"ch","ხ":"kh","ჯ":"j","ჰ":"h","Ẁ":"W","ẁ":"w","Ẃ":"W","ẃ":"w","Ẅ":"W","ẅ":"w","ẞ":"SS","Ạ":"A","ạ":"a","Ả":"A","ả":"a","Ấ":"A","ấ":"a","Ầ":"A","ầ":"a","Ẩ":"A","ẩ":"a","Ẫ":"A","ẫ":"a","Ậ":"A","ậ":"a","Ắ":"A","ắ":"a","Ằ":"A","ằ":"a","Ẳ":"A","ẳ":"a","Ẵ":"A","ẵ":"a","Ặ":"A","ặ":"a","Ẹ":"E","ẹ":"e","Ẻ":"E","ẻ":"e","Ẽ":"E","ẽ":"e","Ế":"E","ế":"e","Ề":"E","ề":"e","Ể":"E","ể":"e","Ễ":"E","ễ":"e","Ệ":"E","ệ":"e","Ỉ":"I","ỉ":"i","Ị":"I","ị":"i","Ọ":"O","ọ":"o","Ỏ":"O","ỏ":"o","Ố":"O","ố":"o","Ồ":"O","ồ":"o","Ổ":"O","ổ":"o","Ỗ":"O","ỗ":"o","Ộ":"O","ộ":"o","Ớ":"O","ớ":"o","Ờ":"O","ờ":"o","Ở":"O","ở":"o","Ỡ":"O","ỡ":"o","Ợ":"O","ợ":"o","Ụ":"U","ụ":"u","Ủ":"U","ủ":"u","Ứ":"U","ứ":"u","Ừ":"U","ừ":"u","Ử":"U","ử":"u","Ữ":"U","ữ":"u","Ự":"U","ự":"u","Ỳ":"Y","ỳ":"y","Ỵ":"Y","ỵ":"y","Ỷ":"Y","ỷ":"y","Ỹ":"Y","ỹ":"y","‘":"'","’":"'","“":"\\\"","”":"\\\"","†":"+","•":"*","…":"...","₠":"ecu","₢":"cruzeiro","₣":"french franc","₤":"lira","₥":"mill","₦":"naira","₧":"peseta","₨":"rupee","₩":"won","₪":"new shequel","₫":"dong","€":"euro","₭":"kip","₮":"tugrik","₯":"drachma","₰":"penny","₱":"peso","₲":"guarani","₳":"austral","₴":"hryvnia","₵":"cedi","₸":"kazakhstani tenge","₹":"indian rupee","₺":"turkish lira","₽":"russian ruble","₿":"bitcoin","℠":"sm","™":"tm","∂":"d","∆":"delta","∑":"sum","∞":"infinity","♥":"love","元":"yuan","円":"yen","﷼":"rial"};
4+
5+
var locales = {de:{"Ä":"AE","ä":"ae","Ö":"OE","ö":"oe","Ü":"UE","ü":"ue"},vi:{"Đ":"D","đ":"d"}};
6+
7+
function replace (string, options) {
8+
if (typeof string !== 'string') {
9+
throw new Error('slugify: string argument expected')
10+
}
11+
12+
options = (typeof options === 'string')
13+
? {replacement: options}
14+
: options || {};
15+
16+
var locale = locales[options.locale] || {};
17+
18+
var replacement = options.replacement === undefined ? '-' : options.replacement;
19+
20+
var slug = string.split('')
21+
// replace characters based on charMap
22+
.reduce(function (result, ch) {
23+
return result + (locale[ch] || charMap[ch] || ch)
24+
// remove not allowed characters
25+
.replace(options.remove || /[^\w\s$*_+~.()'"!\-:@]+/g, '')
26+
}, '')
27+
// trim leading/trailing spaces
28+
.trim()
29+
// convert spaces to replacement character
30+
// also remove duplicates of the replacement character
31+
.replace(new RegExp('[\\s' + replacement + ']+', 'g'), replacement);
32+
33+
if (options.lower) {
34+
slug = slug.toLowerCase();
35+
}
36+
37+
if (options.strict) {
38+
// remove anything besides letters, numbers, and the replacement char
39+
slug = slug
40+
.replace(new RegExp('[^a-zA-Z0-9' + replacement + ']', 'g'), '')
41+
// remove duplicates of the replacement character
42+
.replace(new RegExp('[\\s' + replacement + ']+', 'g'), replacement);
43+
}
44+
45+
return slug
46+
}
47+
48+
replace.extend = function (customMap) {
49+
for (var key in customMap) {
50+
charMap[key] = customMap[key];
51+
}
52+
};
53+
54+
module.exports = replace;

0 commit comments

Comments
 (0)