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.
102 lines
2.9 KiB
102 lines
2.9 KiB
'use strict'; |
|
|
|
var _jestRegexUtil; |
|
|
|
function _load_jestRegexUtil() { |
|
return _jestRegexUtil = require('jest-regex-util'); |
|
} |
|
|
|
/** |
|
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
* |
|
* |
|
*/ |
|
|
|
const snapshotDirRegex = new RegExp((0, (_jestRegexUtil || _load_jestRegexUtil()).replacePathSepForRegex)('/__snapshots__/')); |
|
const snapshotFileRegex = new RegExp((0, (_jestRegexUtil || _load_jestRegexUtil()).replacePathSepForRegex)('__snapshots__/(.*).snap')); |
|
const isSnapshotPath = path => !!path.match(snapshotDirRegex); |
|
|
|
function compact(array) { |
|
const result = []; |
|
for (let i = 0; i < array.length; ++i) { |
|
const element = array[i]; |
|
if (element != null) { |
|
result.push(element); |
|
} |
|
} |
|
return result; |
|
} |
|
|
|
/** |
|
* DependencyResolver is used to resolve the direct dependencies of a module or |
|
* to retrieve a list of all transitive inverse dependencies. |
|
*/ |
|
class DependencyResolver { |
|
|
|
constructor(resolver, hasteFS) { |
|
this._resolver = resolver; |
|
this._hasteFS = hasteFS; |
|
} |
|
|
|
resolve(file, options) { |
|
const dependencies = this._hasteFS.getDependencies(file); |
|
if (!dependencies) { |
|
return []; |
|
} |
|
return compact(dependencies.map(dependency => { |
|
if (this._resolver.isCoreModule(dependency)) { |
|
return null; |
|
} |
|
try { |
|
return this._resolver.resolveModule(file, dependency, options); |
|
} catch (e) {} |
|
return this._resolver.getMockModule(file, dependency) || null; |
|
})); |
|
} |
|
|
|
resolveInverse(paths, filter, options) { |
|
const collectModules = (relatedPaths, moduleMap, changed) => { |
|
const visitedModules = new Set(); |
|
while (changed.size) { |
|
changed = new Set(moduleMap.filter(module => !visitedModules.has(module.file) && module.dependencies.some(dep => dep && changed.has(dep))).map(module => { |
|
const file = module.file; |
|
if (filter(file)) { |
|
relatedPaths.add(file); |
|
} |
|
visitedModules.add(file); |
|
return module.file; |
|
})); |
|
} |
|
return relatedPaths; |
|
}; |
|
|
|
if (!paths.size) { |
|
return []; |
|
} |
|
|
|
const relatedPaths = new Set(); |
|
const changed = new Set(); |
|
for (const path of paths) { |
|
if (this._hasteFS.exists(path)) { |
|
// /path/to/__snapshots__/test.js.snap is always adjacent to |
|
// /path/to/test.js |
|
const modulePath = isSnapshotPath(path) ? path.replace(snapshotFileRegex, '$1') : path; |
|
changed.add(modulePath); |
|
if (filter(modulePath)) { |
|
relatedPaths.add(modulePath); |
|
} |
|
} |
|
} |
|
|
|
const modules = this._hasteFS.getAllFiles().map(file => ({ |
|
dependencies: this.resolve(file, options), |
|
file |
|
})); |
|
return Array.from(collectModules(relatedPaths, modules, changed)); |
|
} |
|
} |
|
|
|
module.exports = DependencyResolver; |