pre-suf
Advanced tools
Comparing version 1.0.4 to 1.1.0
'use strict'; | ||
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } | ||
var escapeString = require('escape-string-regexp'); | ||
function makeRegExp(str, leading) { | ||
var repeat = arguments.length <= 2 || arguments[2] === undefined ? true : arguments[2]; | ||
var check = function check(str) { | ||
var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'str'; | ||
var escaped = escapeString(str); | ||
if (typeof str !== 'string') { | ||
throw new TypeError(name + ' must be a string, but got ' + str); | ||
} | ||
}; | ||
if (repeat) { | ||
var make = function make(str, fix, remove, leading) { | ||
check(str); | ||
var name = leading ? 'prefix' : 'suffix'; | ||
check(fix, name); | ||
var escaped = escapeString(fix); | ||
if (remove) { | ||
escaped = '(?:' + escaped + ')*'; | ||
@@ -20,31 +34,27 @@ } | ||
return new RegExp(escaped); | ||
} | ||
return [str, new RegExp(escaped)]; | ||
}; | ||
exports.ensureLeading = function (str, prefix) { | ||
var regex = makeRegExp(prefix, true, false); | ||
var remove = function remove(str, regex) { | ||
return str.replace(regex, ''); | ||
}; | ||
if (regex.test(str)) { | ||
return str; | ||
} | ||
var ensure = function ensure(str, regex, fix, leading) { | ||
return regex.test(str) ? str : leading ? fix + str : str + fix; | ||
}; | ||
return prefix + str; | ||
exports.ensureLeading = function (str, prefix) { | ||
return ensure.apply(undefined, _toConsumableArray(make(str, prefix, false, true)).concat([prefix, true])); | ||
}; | ||
exports.removeLeading = function (str, prefix) { | ||
return str.replace(makeRegExp(prefix, true), ''); | ||
return remove.apply(undefined, _toConsumableArray(make(str, prefix, true, true))); | ||
}; | ||
exports.ensureEnding = function (str, suffix) { | ||
var regex = makeRegExp(suffix, false, false); | ||
if (regex.test(str)) { | ||
return str; | ||
} | ||
return str + suffix; | ||
return ensure.apply(undefined, _toConsumableArray(make(str, suffix)).concat([suffix])); | ||
}; | ||
exports.removeEnding = function (str, suffix) { | ||
return str.replace(makeRegExp(suffix, false), ''); | ||
return remove.apply(undefined, _toConsumableArray(make(str, suffix, true))); | ||
}; |
{ | ||
"name": "pre-suf", | ||
"version": "1.0.4", | ||
"version": "1.1.0", | ||
"description": "Manipulate strings with prefixes and suffixes.", | ||
@@ -37,4 +37,6 @@ "main": "./lib", | ||
"dependencies": { | ||
"babel-cli": "^6.26.0", | ||
"babel-preset-es2015": "^6.24.1", | ||
"escape-string-regexp": "^1.0.5" | ||
} | ||
} |
@@ -1,10 +0,21 @@ | ||
'use strict' | ||
const escapeString = require('escape-string-regexp') | ||
const check = (str, name = 'str') => { | ||
if (typeof str !== 'string') { | ||
throw new TypeError(`${name} must be a string, but got ${str}`) | ||
} | ||
} | ||
function makeRegExp (str, leading, repeat = true) { | ||
let escaped = escapeString(str) | ||
const make = (str, fix, remove, leading) => { | ||
check(str) | ||
if (repeat) { | ||
const name = leading | ||
? 'prefix' | ||
: 'suffix' | ||
check(fix, name) | ||
let escaped = escapeString(fix) | ||
if (remove) { | ||
escaped = `(?:${escaped})*` | ||
@@ -19,35 +30,23 @@ } | ||
return new RegExp(escaped) | ||
return [str, new RegExp(escaped)] | ||
} | ||
const remove = (str, regex) => str.replace(regex, '') | ||
exports.ensureLeading = (str, prefix) => { | ||
let regex = makeRegExp(prefix, true, false) | ||
const ensure = (str, regex, fix, leading) => regex.test(str) | ||
? str | ||
: leading | ||
? fix + str | ||
: str + fix | ||
if (regex.test(str)) { | ||
return str | ||
} | ||
exports.ensureLeading = (str, prefix) => | ||
ensure(...make(str, prefix, false, true), prefix, true) | ||
return prefix + str | ||
} | ||
exports.removeLeading = (str, prefix) => | ||
remove(...make(str, prefix, true, true)) | ||
exports.ensureEnding = (str, suffix) => | ||
ensure(...make(str, suffix), suffix) | ||
exports.removeLeading = (str, prefix) => { | ||
return str.replace(makeRegExp(prefix, true), '') | ||
} | ||
exports.ensureEnding = (str, suffix) => { | ||
let regex = makeRegExp(suffix, false, false) | ||
if (regex.test(str)) { | ||
return str | ||
} | ||
return str + suffix | ||
} | ||
exports.removeEnding = (str, suffix) => { | ||
return str.replace(makeRegExp(suffix, false), '') | ||
} | ||
exports.removeEnding = (str, suffix) => | ||
remove(...make(str, suffix, true)) |
@@ -38,2 +38,47 @@ 'use strict'; | ||
}) | ||
it('error', function () { | ||
throws(function () { | ||
presuf.ensureLeading() | ||
}, 'str must be a string, but got undefined', 'ensureLeading str') | ||
throws(function () { | ||
presuf.ensureLeading('a') | ||
}, 'prefix must be a string, but got undefined', 'ensureLeading str') | ||
throws(function () { | ||
presuf.removeLeading() | ||
}, 'str must be a string, but got undefined', 'ensureLeading str') | ||
throws(function () { | ||
presuf.removeLeading('a') | ||
}, 'prefix must be a string, but got undefined', 'ensureLeading str') | ||
throws(function () { | ||
presuf.ensureEnding() | ||
}, 'str must be a string, but got undefined', 'ensureLeading str') | ||
throws(function () { | ||
presuf.ensureEnding('a') | ||
}, 'suffix must be a string, but got undefined', 'ensureLeading str') | ||
throws(function () { | ||
presuf.removeEnding() | ||
}, 'str must be a string, but got undefined', 'ensureLeading str') | ||
throws(function () { | ||
presuf.removeEnding('a') | ||
}, 'suffix must be a string, but got undefined', 'ensureLeading str') | ||
}) | ||
}) | ||
function throws (fn, message, d) { | ||
try { | ||
fn() | ||
} catch (e) { | ||
expect(e.message).to.equal(message) | ||
return | ||
} | ||
throw new Error('should fail: ' + d) | ||
} |
9927
146
3
10
+ Addedbabel-cli@^6.26.0
+ Addedbabel-preset-es2015@^6.24.1
+ Addedansi-regex@2.1.1(transitive)
+ Addedansi-styles@2.2.1(transitive)
+ Addedanymatch@1.3.2(transitive)
+ Addedarr-diff@2.0.04.0.0(transitive)
+ Addedarr-flatten@1.1.0(transitive)
+ Addedarr-union@3.1.0(transitive)
+ Addedarray-unique@0.2.10.3.2(transitive)
+ Addedassign-symbols@1.0.0(transitive)
+ Addedasync-each@1.0.6(transitive)
+ Addedatob@2.1.2(transitive)
+ Addedbabel-cli@6.26.0(transitive)
+ Addedbabel-code-frame@6.26.0(transitive)
+ Addedbabel-core@6.26.3(transitive)
+ Addedbabel-generator@6.26.1(transitive)
+ Addedbabel-helper-call-delegate@6.24.1(transitive)
+ Addedbabel-helper-define-map@6.26.0(transitive)
+ Addedbabel-helper-function-name@6.24.1(transitive)
+ Addedbabel-helper-get-function-arity@6.24.1(transitive)
+ Addedbabel-helper-hoist-variables@6.24.1(transitive)
+ Addedbabel-helper-optimise-call-expression@6.24.1(transitive)
+ Addedbabel-helper-regex@6.26.0(transitive)
+ Addedbabel-helper-replace-supers@6.24.1(transitive)
+ Addedbabel-helpers@6.24.1(transitive)
+ Addedbabel-messages@6.23.0(transitive)
+ Addedbabel-plugin-check-es2015-constants@6.22.0(transitive)
+ Addedbabel-plugin-transform-es2015-arrow-functions@6.22.0(transitive)
+ Addedbabel-plugin-transform-es2015-block-scoped-functions@6.22.0(transitive)
+ Addedbabel-plugin-transform-es2015-block-scoping@6.26.0(transitive)
+ Addedbabel-plugin-transform-es2015-classes@6.24.1(transitive)
+ Addedbabel-plugin-transform-es2015-computed-properties@6.24.1(transitive)
+ Addedbabel-plugin-transform-es2015-destructuring@6.23.0(transitive)
+ Addedbabel-plugin-transform-es2015-duplicate-keys@6.24.1(transitive)
+ Addedbabel-plugin-transform-es2015-for-of@6.23.0(transitive)
+ Addedbabel-plugin-transform-es2015-function-name@6.24.1(transitive)
+ Addedbabel-plugin-transform-es2015-literals@6.22.0(transitive)
+ Addedbabel-plugin-transform-es2015-modules-amd@6.24.1(transitive)
+ Addedbabel-plugin-transform-es2015-modules-commonjs@6.26.2(transitive)
+ Addedbabel-plugin-transform-es2015-modules-systemjs@6.24.1(transitive)
+ Addedbabel-plugin-transform-es2015-modules-umd@6.24.1(transitive)
+ Addedbabel-plugin-transform-es2015-object-super@6.24.1(transitive)
+ Addedbabel-plugin-transform-es2015-parameters@6.24.1(transitive)
+ Addedbabel-plugin-transform-es2015-shorthand-properties@6.24.1(transitive)
+ Addedbabel-plugin-transform-es2015-spread@6.22.0(transitive)
+ Addedbabel-plugin-transform-es2015-sticky-regex@6.24.1(transitive)
+ Addedbabel-plugin-transform-es2015-template-literals@6.22.0(transitive)
+ Addedbabel-plugin-transform-es2015-typeof-symbol@6.23.0(transitive)
+ Addedbabel-plugin-transform-es2015-unicode-regex@6.24.1(transitive)
+ Addedbabel-plugin-transform-regenerator@6.26.0(transitive)
+ Addedbabel-plugin-transform-strict-mode@6.24.1(transitive)
+ Addedbabel-polyfill@6.26.0(transitive)
+ Addedbabel-preset-es2015@6.24.1(transitive)
+ Addedbabel-register@6.26.0(transitive)
+ Addedbabel-runtime@6.26.0(transitive)
+ Addedbabel-template@6.26.0(transitive)
+ Addedbabel-traverse@6.26.0(transitive)
+ Addedbabel-types@6.26.0(transitive)
+ Addedbabylon@6.18.0(transitive)
+ Addedbalanced-match@1.0.2(transitive)
+ Addedbase@0.11.2(transitive)
+ Addedbinary-extensions@1.13.1(transitive)
+ Addedbindings@1.5.0(transitive)
+ Addedbrace-expansion@1.1.11(transitive)
+ Addedbraces@1.8.52.3.2(transitive)
+ Addedcache-base@1.0.1(transitive)
+ Addedchalk@1.1.3(transitive)
+ Addedchokidar@1.7.0(transitive)
+ Addedclass-utils@0.3.6(transitive)
+ Addedcollection-visit@1.0.0(transitive)
+ Addedcommander@2.20.3(transitive)
+ Addedcomponent-emitter@1.3.1(transitive)
+ Addedconcat-map@0.0.1(transitive)
+ Addedconvert-source-map@1.9.0(transitive)
+ Addedcopy-descriptor@0.1.1(transitive)
+ Addedcore-js@2.6.12(transitive)
+ Addedcore-util-is@1.0.3(transitive)
+ Addeddebug@2.6.9(transitive)
+ Addeddecode-uri-component@0.2.2(transitive)
+ Addeddefine-property@0.2.51.0.02.0.2(transitive)
+ Addeddetect-indent@4.0.0(transitive)
+ Addedesutils@2.0.3(transitive)
+ Addedexpand-brackets@0.1.52.1.4(transitive)
+ Addedexpand-range@1.8.2(transitive)
+ Addedextend-shallow@2.0.13.0.2(transitive)
+ Addedextglob@0.3.22.0.4(transitive)
+ Addedfile-uri-to-path@1.0.0(transitive)
+ Addedfilename-regex@2.0.1(transitive)
+ Addedfill-range@2.2.44.0.0(transitive)
+ Addedfor-in@1.0.2(transitive)
+ Addedfor-own@0.1.5(transitive)
+ Addedfragment-cache@0.2.1(transitive)
+ Addedfs-readdir-recursive@1.1.0(transitive)
+ Addedfs.realpath@1.0.0(transitive)
+ Addedfsevents@1.2.13(transitive)
+ Addedfunction-bind@1.1.2(transitive)
+ Addedget-value@2.0.6(transitive)
+ Addedglob@7.2.3(transitive)
+ Addedglob-base@0.3.0(transitive)
+ Addedglob-parent@2.0.0(transitive)
+ Addedglobals@9.18.0(transitive)
+ Addedgraceful-fs@4.2.11(transitive)
+ Addedhas-ansi@2.0.0(transitive)
+ Addedhas-value@0.3.11.0.0(transitive)
+ Addedhas-values@0.1.41.0.0(transitive)
+ Addedhasown@2.0.2(transitive)
+ Addedhome-or-tmp@2.0.0(transitive)
+ Addedinflight@1.0.6(transitive)
+ Addedinherits@2.0.4(transitive)
+ Addedinvariant@2.2.4(transitive)
+ Addedis-accessor-descriptor@1.0.1(transitive)
+ Addedis-binary-path@1.0.1(transitive)
+ Addedis-buffer@1.1.6(transitive)
+ Addedis-data-descriptor@1.0.1(transitive)
+ Addedis-descriptor@0.1.71.0.3(transitive)
+ Addedis-dotfile@1.0.3(transitive)
+ Addedis-equal-shallow@0.1.3(transitive)
+ Addedis-extendable@0.1.11.0.1(transitive)
+ Addedis-extglob@1.0.0(transitive)
+ Addedis-finite@1.1.0(transitive)
+ Addedis-glob@2.0.1(transitive)
+ Addedis-number@2.1.03.0.04.0.0(transitive)
+ Addedis-plain-object@2.0.4(transitive)
+ Addedis-posix-bracket@0.1.1(transitive)
+ Addedis-primitive@2.0.0(transitive)
+ Addedis-windows@1.0.2(transitive)
+ Addedisarray@1.0.0(transitive)
+ Addedisobject@2.1.03.0.1(transitive)
+ Addedjs-tokens@3.0.2(transitive)
+ Addedjsesc@0.5.01.3.0(transitive)
+ Addedjson5@0.5.1(transitive)
+ Addedkind-of@3.2.24.0.06.0.3(transitive)
+ Addedlodash@4.17.21(transitive)
+ Addedloose-envify@1.4.0(transitive)
+ Addedmap-cache@0.2.2(transitive)
+ Addedmap-visit@1.0.0(transitive)
+ Addedmath-random@1.0.4(transitive)
+ Addedmicromatch@2.3.113.1.10(transitive)
+ Addedminimatch@3.1.2(transitive)
+ Addedminimist@1.2.8(transitive)
+ Addedmixin-deep@1.3.2(transitive)
+ Addedmkdirp@0.5.6(transitive)
+ Addedms@2.0.0(transitive)
+ Addednan@2.19.0(transitive)
+ Addednanomatch@1.2.13(transitive)
+ Addednormalize-path@2.1.1(transitive)
+ Addedobject-assign@4.1.1(transitive)
+ Addedobject-copy@0.1.0(transitive)
+ Addedobject-visit@1.0.1(transitive)
+ Addedobject.omit@2.0.1(transitive)
+ Addedobject.pick@1.3.0(transitive)
+ Addedonce@1.4.0(transitive)
+ Addedos-homedir@1.0.2(transitive)
+ Addedos-tmpdir@1.0.2(transitive)
+ Addedoutput-file-sync@1.1.2(transitive)
+ Addedparse-glob@3.0.4(transitive)
+ Addedpascalcase@0.1.1(transitive)
+ Addedpath-is-absolute@1.0.1(transitive)
+ Addedposix-character-classes@0.1.1(transitive)
+ Addedpreserve@0.2.0(transitive)
+ Addedprivate@0.1.8(transitive)
+ Addedprocess-nextick-args@2.0.1(transitive)
+ Addedrandomatic@3.1.1(transitive)
+ Addedreadable-stream@2.3.8(transitive)
+ Addedreaddirp@2.2.1(transitive)
+ Addedregenerate@1.4.2(transitive)
+ Addedregenerator-runtime@0.10.50.11.1(transitive)
+ Addedregenerator-transform@0.10.1(transitive)
+ Addedregex-cache@0.4.4(transitive)
+ Addedregex-not@1.0.2(transitive)
+ Addedregexpu-core@2.0.0(transitive)
+ Addedregjsgen@0.2.0(transitive)
+ Addedregjsparser@0.1.5(transitive)
+ Addedremove-trailing-separator@1.1.0(transitive)
+ Addedrepeat-element@1.1.4(transitive)
+ Addedrepeat-string@1.6.1(transitive)
+ Addedrepeating@2.0.1(transitive)
+ Addedresolve-url@0.2.1(transitive)
+ Addedret@0.1.15(transitive)
+ Addedsafe-buffer@5.1.2(transitive)
+ Addedsafe-regex@1.1.0(transitive)
+ Addedset-value@2.0.1(transitive)
+ Addedslash@1.0.0(transitive)
+ Addedsnapdragon@0.8.2(transitive)
+ Addedsnapdragon-node@2.1.1(transitive)
+ Addedsnapdragon-util@3.0.1(transitive)
+ Addedsource-map@0.5.7(transitive)
+ Addedsource-map-resolve@0.5.3(transitive)
+ Addedsource-map-support@0.4.18(transitive)
+ Addedsource-map-url@0.4.1(transitive)
+ Addedsplit-string@3.1.0(transitive)
+ Addedstatic-extend@0.1.2(transitive)
+ Addedstring_decoder@1.1.1(transitive)
+ Addedstrip-ansi@3.0.1(transitive)
+ Addedsupports-color@2.0.0(transitive)
+ Addedto-fast-properties@1.0.3(transitive)
+ Addedto-object-path@0.3.0(transitive)
+ Addedto-regex@3.0.2(transitive)
+ Addedto-regex-range@2.1.1(transitive)
+ Addedtrim-right@1.0.1(transitive)
+ Addedunion-value@1.0.1(transitive)
+ Addedunset-value@1.0.0(transitive)
+ Addedurix@0.1.0(transitive)
+ Addeduse@3.1.1(transitive)
+ Addeduser-home@1.1.1(transitive)
+ Addedutil-deprecate@1.0.2(transitive)
+ Addedv8flags@2.1.1(transitive)
+ Addedwrappy@1.0.2(transitive)