-
Notifications
You must be signed in to change notification settings - Fork 33
/
validateAddPackages.js
36 lines (33 loc) · 1.24 KB
/
validateAddPackages.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
* Ensures that the label package file actually exists
* @param {String} path - path to the json file label package
* @return {Bool || Error} this is a try-catch where the error
*/
const fs = require('fs');
const path = require('path');
const isJsonString = require('../utils/is-json-string.js');
// Not using arrows bc it will mess up "this" context
module.exports = function (jsonPath) { // eslint-disable-line func-names
// Declare function as asynchronous, and save the done callback
const done = this.async();
// this is clunky, but this way `we can just use a default
if (jsonPath === '') done(true);
try {
if (jsonPath.indexOf('.json') < 0) {
done('Not a JSON file');
return;
}
// Calculate the full path of the JSON file based upon the current working directory. Using
// path.resolve allows for absolute paths to be used also.
const fullPath = path.resolve(process.cwd(), jsonPath);
fs.readFile(fullPath, (err, data) => {
if (err) { done(err); return; }
if (isJsonString(data)) {
done(true);
}
done('Not a valid JSON file');
});
} catch (e) {
done(e);
}
};