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.
146 lines
3.9 KiB
146 lines
3.9 KiB
6 years ago
|
"use strict";
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.revert = revert;
|
||
|
exports.default = register;
|
||
|
|
||
|
var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
||
|
|
||
|
var _sourceMapSupport = _interopRequireDefault(require("source-map-support"));
|
||
|
|
||
|
var registerCache = _interopRequireWildcard(require("./cache"));
|
||
|
|
||
|
var _escapeRegExp = _interopRequireDefault(require("lodash/escapeRegExp"));
|
||
|
|
||
|
var babel = _interopRequireWildcard(require("@babel/core"));
|
||
|
|
||
|
var _pirates = require("pirates");
|
||
|
|
||
|
var _fs = _interopRequireDefault(require("fs"));
|
||
|
|
||
|
var _path = _interopRequireDefault(require("path"));
|
||
|
|
||
|
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 maps = {};
|
||
|
let transformOpts = {};
|
||
|
let piratesRevert = null;
|
||
|
|
||
|
function installSourceMapSupport() {
|
||
|
_sourceMapSupport.default.install({
|
||
|
handleUncaughtExceptions: false,
|
||
|
environment: "node",
|
||
|
|
||
|
retrieveSourceMap(source) {
|
||
|
const map = maps && maps[source];
|
||
|
|
||
|
if (map) {
|
||
|
return {
|
||
|
url: null,
|
||
|
map: map
|
||
|
};
|
||
|
} else {
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
});
|
||
|
}
|
||
|
|
||
|
let cache;
|
||
|
|
||
|
function mtime(filename) {
|
||
|
return +_fs.default.statSync(filename).mtime;
|
||
|
}
|
||
|
|
||
|
function compile(code, filename) {
|
||
|
const opts = new babel.OptionManager().init(Object.assign({
|
||
|
sourceRoot: _path.default.dirname(filename)
|
||
|
}, (0, _cloneDeep.default)(transformOpts), {
|
||
|
filename
|
||
|
}));
|
||
|
if (opts === null) return code;
|
||
|
let cacheKey = `${JSON.stringify(opts)}:${babel.version}`;
|
||
|
const env = babel.getEnv(false);
|
||
|
if (env) cacheKey += `:${env}`;
|
||
|
let cached = cache && cache[cacheKey];
|
||
|
|
||
|
if (!cached || cached.mtime !== mtime(filename)) {
|
||
|
cached = babel.transform(code, Object.assign({}, opts, {
|
||
|
sourceMaps: opts.sourceMaps === undefined ? "both" : opts.sourceMaps,
|
||
|
ast: false
|
||
|
}));
|
||
|
|
||
|
if (cache) {
|
||
|
cache[cacheKey] = cached;
|
||
|
cached.mtime = mtime(filename);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (cached.map) {
|
||
|
if (Object.keys(maps).length === 0) {
|
||
|
installSourceMapSupport();
|
||
|
}
|
||
|
|
||
|
maps[filename] = cached.map;
|
||
|
}
|
||
|
|
||
|
return cached.code;
|
||
|
}
|
||
|
|
||
|
let compiling = false;
|
||
|
|
||
|
function compileHook(code, filename) {
|
||
|
if (compiling) return code;
|
||
|
|
||
|
try {
|
||
|
compiling = true;
|
||
|
return compile(code, filename);
|
||
|
} finally {
|
||
|
compiling = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function hookExtensions(exts) {
|
||
|
if (piratesRevert) piratesRevert();
|
||
|
piratesRevert = (0, _pirates.addHook)(compileHook, {
|
||
|
exts,
|
||
|
ignoreNodeModules: false
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function revert() {
|
||
|
if (piratesRevert) piratesRevert();
|
||
|
}
|
||
|
|
||
|
register();
|
||
|
|
||
|
function register(opts = {}) {
|
||
|
opts = Object.assign({}, opts);
|
||
|
hookExtensions(opts.extensions || babel.DEFAULT_EXTENSIONS);
|
||
|
|
||
|
if (opts.cache === false && cache) {
|
||
|
registerCache.clear();
|
||
|
cache = null;
|
||
|
} else if (opts.cache !== false && !cache) {
|
||
|
registerCache.load();
|
||
|
cache = registerCache.get();
|
||
|
}
|
||
|
|
||
|
delete opts.extensions;
|
||
|
delete opts.cache;
|
||
|
transformOpts = Object.assign({}, opts);
|
||
|
let {
|
||
|
cwd = "."
|
||
|
} = transformOpts;
|
||
|
cwd = transformOpts.cwd = _path.default.resolve(cwd);
|
||
|
|
||
|
if (transformOpts.ignore === undefined && transformOpts.only === undefined) {
|
||
|
transformOpts.only = [new RegExp("^" + (0, _escapeRegExp.default)(cwd), "i")];
|
||
|
transformOpts.ignore = [new RegExp("^" + (0, _escapeRegExp.default)(cwd) + "(?:" + _path.default.sep + ".*)?" + (0, _escapeRegExp.default)(_path.default.sep + "node_modules" + _path.default.sep), "i")];
|
||
|
}
|
||
|
}
|