diff options
author | Kevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com> | 2019-11-18 22:54:20 -0800 |
---|---|---|
committer | Ry Dahl <ry@tinyclouds.org> | 2019-11-19 01:54:20 -0500 |
commit | e73a82dc42b3d80bea42482e227c31e5ef01e273 (patch) | |
tree | 5c3f26bc19d4ce6b3e42b2fe48f47e1cccbb29fd /std/node/tests/node_modules/left-pad/index.js | |
parent | e6fdb2628fdeeae0c7b06c25214b2edba96364dd (diff) |
feat(std/node) add CommonJS require (#3380)
Diffstat (limited to 'std/node/tests/node_modules/left-pad/index.js')
-rw-r--r-- | std/node/tests/node_modules/left-pad/index.js | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/std/node/tests/node_modules/left-pad/index.js b/std/node/tests/node_modules/left-pad/index.js new file mode 100644 index 000000000..e90aec35d --- /dev/null +++ b/std/node/tests/node_modules/left-pad/index.js @@ -0,0 +1,52 @@ +/* This program is free software. It comes without any warranty, to + * the extent permitted by applicable law. You can redistribute it + * and/or modify it under the terms of the Do What The Fuck You Want + * To Public License, Version 2, as published by Sam Hocevar. See + * http://www.wtfpl.net/ for more details. */ +'use strict'; +module.exports = leftPad; + +var cache = [ + '', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ' +]; + +function leftPad (str, len, ch) { + // convert `str` to a `string` + str = str + ''; + // `len` is the `pad`'s length now + len = len - str.length; + // doesn't need to pad + if (len <= 0) return str; + // `ch` defaults to `' '` + if (!ch && ch !== 0) ch = ' '; + // convert `ch` to a `string` cuz it could be a number + ch = ch + ''; + // cache common use cases + if (ch === ' ' && len < 10) return cache[len] + str; + // `pad` starts with an empty string + var pad = ''; + // loop + while (true) { + // add `ch` to `pad` if `len` is odd + if (len & 1) pad += ch; + // divide `len` by 2, ditch the remainder + len >>= 1; + // "double" the `ch` so this operation count grows logarithmically on `len` + // each time `ch` is "doubled", the `len` would need to be "doubled" too + // similar to finding a value in binary search tree, hence O(log(n)) + if (len) ch += ch; + // `len` is 0, exit the loop + else break; + } + // pad `str`! + return pad + str; +} |