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.
132 lines
3.5 KiB
132 lines
3.5 KiB
"use strict"; |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.default = wrapFunction; |
|
|
|
function _helperFunctionName() { |
|
const data = _interopRequireDefault(require("@babel/helper-function-name")); |
|
|
|
_helperFunctionName = function () { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
function _template() { |
|
const data = _interopRequireDefault(require("@babel/template")); |
|
|
|
_template = function () { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
function t() { |
|
const data = _interopRequireWildcard(require("@babel/types")); |
|
|
|
t = function () { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } |
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
|
|
|
const buildExpressionWrapper = _template().default.expression(` |
|
(function () { |
|
var REF = FUNCTION; |
|
return function NAME(PARAMS) { |
|
return REF.apply(this, arguments); |
|
}; |
|
})() |
|
`); |
|
|
|
const buildDeclarationWrapper = (0, _template().default)(` |
|
function NAME(PARAMS) { return REF.apply(this, arguments); } |
|
function REF() { |
|
REF = FUNCTION; |
|
return REF.apply(this, arguments); |
|
} |
|
`); |
|
|
|
function classOrObjectMethod(path, callId) { |
|
const node = path.node; |
|
const body = node.body; |
|
const container = t().functionExpression(null, [], t().blockStatement(body.body), true); |
|
body.body = [t().returnStatement(t().callExpression(t().callExpression(callId, [container]), []))]; |
|
node.async = false; |
|
node.generator = false; |
|
path.get("body.body.0.argument.callee.arguments.0").unwrapFunctionEnvironment(); |
|
} |
|
|
|
function plainFunction(path, callId) { |
|
const node = path.node; |
|
const isDeclaration = path.isFunctionDeclaration(); |
|
const functionId = node.id; |
|
const wrapper = isDeclaration ? buildDeclarationWrapper : buildExpressionWrapper; |
|
|
|
if (path.isArrowFunctionExpression()) { |
|
path.arrowFunctionToExpression(); |
|
} |
|
|
|
node.id = null; |
|
|
|
if (isDeclaration) { |
|
node.type = "FunctionExpression"; |
|
} |
|
|
|
const built = t().callExpression(callId, [node]); |
|
const container = wrapper({ |
|
NAME: functionId || null, |
|
REF: path.scope.generateUidIdentifier(functionId ? functionId.name : "ref"), |
|
FUNCTION: built, |
|
PARAMS: node.params.reduce((acc, param) => { |
|
acc.done = acc.done || t().isAssignmentPattern(param) || t().isRestElement(param); |
|
|
|
if (!acc.done) { |
|
acc.params.push(path.scope.generateUidIdentifier("x")); |
|
} |
|
|
|
return acc; |
|
}, { |
|
params: [], |
|
done: false |
|
}).params |
|
}); |
|
|
|
if (isDeclaration) { |
|
path.replaceWith(container[0]); |
|
path.insertAfter(container[1]); |
|
} else { |
|
const retFunction = container.callee.body.body[1].argument; |
|
|
|
if (!functionId) { |
|
(0, _helperFunctionName().default)({ |
|
node: retFunction, |
|
parent: path.parent, |
|
scope: path.scope |
|
}); |
|
} |
|
|
|
if (!retFunction || retFunction.id || node.params.length) { |
|
path.replaceWith(container); |
|
} else { |
|
path.replaceWith(built); |
|
} |
|
} |
|
} |
|
|
|
function wrapFunction(path, callId) { |
|
if (path.isClassMethod() || path.isObjectMethod()) { |
|
classOrObjectMethod(path, callId); |
|
} else { |
|
plainFunction(path, callId); |
|
} |
|
} |