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.
39 lines
709 B
39 lines
709 B
'use strict'; |
|
const mimicFn = require('mimic-fn'); |
|
|
|
module.exports = (fn, opts) => { |
|
// TODO: Remove this in v3 |
|
if (opts === true) { |
|
throw new TypeError('The second argument is now an options object'); |
|
} |
|
|
|
if (typeof fn !== 'function') { |
|
throw new TypeError('Expected a function'); |
|
} |
|
|
|
opts = opts || {}; |
|
|
|
let ret; |
|
let called = false; |
|
const fnName = fn.displayName || fn.name || '<anonymous>'; |
|
|
|
const onetime = function () { |
|
if (called) { |
|
if (opts.throw === true) { |
|
throw new Error(`Function \`${fnName}\` can only be called once`); |
|
} |
|
|
|
return ret; |
|
} |
|
|
|
called = true; |
|
ret = fn.apply(this, arguments); |
|
fn = null; |
|
|
|
return ret; |
|
}; |
|
|
|
mimicFn(onetime, fn); |
|
|
|
return onetime; |
|
};
|
|
|