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.
64 lines
1.4 KiB
64 lines
1.4 KiB
/** |
|
* Copyright 2004-present Facebook. All Rights Reserved. |
|
*/ |
|
|
|
'use strict'; |
|
|
|
/*eslint consistent-return: 0*/ |
|
|
|
/** |
|
* Transforms function properties of the `Symbol` into |
|
* the presence check, and fallback string "@@<name>". |
|
* |
|
* Example: |
|
* |
|
* Symbol.iterator; |
|
* |
|
* Transformed to: |
|
* |
|
* typeof Symbol.iterator === 'function' ? Symbol.iterator : '@@iterator'; |
|
*/ |
|
module.exports = function symbolMember(babel) { |
|
const t = babel.types; |
|
|
|
return { |
|
visitor: { |
|
MemberExpression(path) { |
|
if (!isAppropriateMember(path)) { |
|
return; |
|
} |
|
|
|
let node = path.node; |
|
|
|
path.replaceWith( |
|
t.conditionalExpression( |
|
t.binaryExpression( |
|
'===', |
|
t.unaryExpression( |
|
'typeof', |
|
t.identifier('Symbol'), |
|
true |
|
), |
|
t.stringLiteral('function') |
|
), |
|
node, |
|
t.stringLiteral(`@@${node.property.name}`) |
|
) |
|
); |
|
|
|
// We should stop to avoid infinite recursion, since Babel |
|
// traverses replaced path, and again would hit our transform. |
|
path.stop(); |
|
}, |
|
}, |
|
}; |
|
}; |
|
|
|
function isAppropriateMember(path) { |
|
let node = path.node; |
|
|
|
return path.parentPath.type !== 'AssignmentExpression' && |
|
node.object.type === 'Identifier' && |
|
node.object.name === 'Symbol' && |
|
node.property.type === 'Identifier'; |
|
}
|
|
|