This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.6 KiB
67 lines
1.6 KiB
'use strict'; |
|
|
|
/** |
|
* Cache results of the first function call to ensure only calling once. |
|
* |
|
* ```js |
|
* var utils = require('lazy-cache')(require); |
|
* // cache the call to `require('ansi-yellow')` |
|
* utils('ansi-yellow', 'yellow'); |
|
* // use `ansi-yellow` |
|
* console.log(utils.yellow('this is yellow')); |
|
* ``` |
|
* |
|
* @param {Function} `fn` Function that will be called only once. |
|
* @return {Function} Function that can be called to get the cached function |
|
* @api public |
|
*/ |
|
|
|
function lazyCache(fn) { |
|
var cache = {}; |
|
var proxy = function(mod, name) { |
|
name = name || camelcase(mod); |
|
|
|
// check both boolean and string in case `process.env` cases to string |
|
if (process.env.UNLAZY === 'true' || process.env.UNLAZY === true || process.env.TRAVIS) { |
|
cache[name] = fn(mod); |
|
} |
|
|
|
Object.defineProperty(proxy, name, { |
|
enumerable: true, |
|
configurable: true, |
|
get: getter |
|
}); |
|
|
|
function getter() { |
|
if (cache.hasOwnProperty(name)) { |
|
return cache[name]; |
|
} |
|
return (cache[name] = fn(mod)); |
|
} |
|
return getter; |
|
}; |
|
return proxy; |
|
} |
|
|
|
/** |
|
* Used to camelcase the name to be stored on the `lazy` object. |
|
* |
|
* @param {String} `str` String containing `_`, `.`, `-` or whitespace that will be camelcased. |
|
* @return {String} camelcased string. |
|
*/ |
|
|
|
function camelcase(str) { |
|
if (str.length === 1) { |
|
return str.toLowerCase(); |
|
} |
|
str = str.replace(/^[\W_]+|[\W_]+$/g, '').toLowerCase(); |
|
return str.replace(/[\W_]+(\w|$)/g, function(_, ch) { |
|
return ch.toUpperCase(); |
|
}); |
|
} |
|
|
|
/** |
|
* Expose `lazyCache` |
|
*/ |
|
|
|
module.exports = lazyCache;
|
|
|