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
"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")]; |
|
} |
|
} |