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.
125 lines
3.3 KiB
125 lines
3.3 KiB
"use strict"; |
|
|
|
// Returns "Type(value) is Object" in ES terminology. |
|
function isObject(value) { |
|
return typeof value === "object" && value !== null || typeof value === "function"; |
|
} |
|
|
|
function getReferenceToBytes(bufferSource) { |
|
// Node.js' Buffer does not allow subclassing for now, so we can get away with a prototype object check for perf. |
|
if (Object.getPrototypeOf(bufferSource) === Buffer.prototype) { |
|
return bufferSource; |
|
} |
|
if (bufferSource instanceof ArrayBuffer) { |
|
return Buffer.from(bufferSource); |
|
} |
|
return Buffer.from(bufferSource.buffer, bufferSource.byteOffset, bufferSource.byteLength); |
|
} |
|
|
|
function getCopyToBytes(bufferSource) { |
|
return Buffer.from(getReferenceToBytes(bufferSource)); |
|
} |
|
|
|
function mixin(target, source) { |
|
const keys = Object.getOwnPropertyNames(source); |
|
for (let i = 0; i < keys.length; ++i) { |
|
if (keys[i] in target) { |
|
continue; |
|
} |
|
|
|
Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i])); |
|
} |
|
} |
|
|
|
const wrapperSymbol = Symbol("wrapper"); |
|
const implSymbol = Symbol("impl"); |
|
const sameObjectCaches = Symbol("SameObject caches"); |
|
|
|
function getSameObject(wrapper, prop, creator) { |
|
if (!wrapper[sameObjectCaches]) { |
|
wrapper[sameObjectCaches] = Object.create(null); |
|
} |
|
|
|
if (prop in wrapper[sameObjectCaches]) { |
|
return wrapper[sameObjectCaches][prop]; |
|
} |
|
|
|
wrapper[sameObjectCaches][prop] = creator(); |
|
return wrapper[sameObjectCaches][prop]; |
|
} |
|
|
|
function wrapperForImpl(impl) { |
|
return impl ? impl[wrapperSymbol] : null; |
|
} |
|
|
|
function implForWrapper(wrapper) { |
|
return wrapper ? wrapper[implSymbol] : null; |
|
} |
|
|
|
function tryWrapperForImpl(impl) { |
|
const wrapper = wrapperForImpl(impl); |
|
return wrapper ? wrapper : impl; |
|
} |
|
|
|
function tryImplForWrapper(wrapper) { |
|
const impl = implForWrapper(wrapper); |
|
return impl ? impl : wrapper; |
|
} |
|
|
|
const iterInternalSymbol = Symbol("internal"); |
|
const IteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())); |
|
|
|
function isArrayIndexPropName(P) { |
|
if (typeof P !== "string") { |
|
return false; |
|
} |
|
const i = P >>> 0; |
|
if (i === Math.pow(2, 32) - 1) { |
|
return false; |
|
} |
|
const s = `${i}`; |
|
if (P !== s) { |
|
return false; |
|
} |
|
return true; |
|
} |
|
|
|
const supportsPropertyIndex = Symbol("supports property index"); |
|
const supportedPropertyIndices = Symbol("supported property indices"); |
|
const supportsPropertyName = Symbol("supports property name"); |
|
const supportedPropertyNames = Symbol("supported property names"); |
|
const indexedGet = Symbol("indexed property get"); |
|
const indexedSetNew = Symbol("indexed property set new"); |
|
const indexedSetExisting = Symbol("indexed property set existing"); |
|
const namedGet = Symbol("named property get"); |
|
const namedSetNew = Symbol("named property set new"); |
|
const namedSetExisting = Symbol("named property set existing"); |
|
const namedDelete = Symbol("named property delete"); |
|
|
|
module.exports = exports = { |
|
isObject, |
|
getReferenceToBytes, |
|
getCopyToBytes, |
|
mixin, |
|
wrapperSymbol, |
|
implSymbol, |
|
getSameObject, |
|
wrapperForImpl, |
|
implForWrapper, |
|
tryWrapperForImpl, |
|
tryImplForWrapper, |
|
iterInternalSymbol, |
|
IteratorPrototype, |
|
isArrayIndexPropName, |
|
supportsPropertyIndex, |
|
supportedPropertyIndices, |
|
supportsPropertyName, |
|
supportedPropertyNames, |
|
indexedGet, |
|
indexedSetNew, |
|
indexedSetExisting, |
|
namedGet, |
|
namedSetNew, |
|
namedSetExisting, |
|
namedDelete |
|
};
|
|
|