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.
48 lines
1008 B
48 lines
1008 B
'use strict'; |
|
const path = require('path'); |
|
const locatePath = require('locate-path'); |
|
|
|
module.exports = (filename, opts) => { |
|
opts = opts || {}; |
|
|
|
const startDir = path.resolve(opts.cwd || ''); |
|
const root = path.parse(startDir).root; |
|
|
|
const filenames = [].concat(filename); |
|
|
|
return new Promise(resolve => { |
|
(function find(dir) { |
|
locatePath(filenames, {cwd: dir}).then(file => { |
|
if (file) { |
|
resolve(path.join(dir, file)); |
|
} else if (dir === root) { |
|
resolve(null); |
|
} else { |
|
find(path.dirname(dir)); |
|
} |
|
}); |
|
})(startDir); |
|
}); |
|
}; |
|
|
|
module.exports.sync = (filename, opts) => { |
|
opts = opts || {}; |
|
|
|
let dir = path.resolve(opts.cwd || ''); |
|
const root = path.parse(dir).root; |
|
|
|
const filenames = [].concat(filename); |
|
|
|
// eslint-disable-next-line no-constant-condition |
|
while (true) { |
|
const file = locatePath.sync(filenames, {cwd: dir}); |
|
|
|
if (file) { |
|
return path.join(dir, file); |
|
} else if (dir === root) { |
|
return null; |
|
} |
|
|
|
dir = path.dirname(dir); |
|
} |
|
};
|
|
|