UNPKG

1.41 kBJavaScriptView Raw
1let GladString = require('../namespace/string');
2let path = require('path');
3let { decamelizeToArray } = new GladString();
4let base = process.cwd();
5/**
6 * Glad.import
7 * requires a module using a path that canonicalizes to the project root.
8 * Examples with `const { imports, grab } = Glad;
9 * EX: From a controller: imports('models/user') === require('../models/user')
10 * EX: From a controller: grab('UserModel') === require('../models/user')
11 * EX: From a controller: grab('UserQueries') === require('../queries/user')
12 * EX: From a controller: grab('UserMapQueries') === require('../queries/map/user')
13 * EX: From a controller: grab('UserPolygonQueries') === require('../queries/polygon/user')
14 */
15
16function fetch (file) {
17
18 if (/\//.test(file)) {
19 return require(path.join(base, file));
20 }
21
22 let filePath = decamelizeToArray(file).reverse();
23 // Allow UserModel or UserRoute or UserController
24 if (filePath[0] === 'model') {
25 filePath[0] = 'models';
26 } else if (filePath[0] === 'controller') {
27 filePath[0] = 'controllers'
28 } else if (filePath[0] === 'route') {
29 filePath[0] = 'routes'
30 }
31 return require(path.join(base, filePath.join('/')));
32}
33
34function retrieve (files) {
35 return files.map(file => fetch(file));
36}
37
38module.exports = function importer (...args) {
39 if (args.length > 1) {
40 return retrieve(args);
41 } else {
42 return fetch(args[0]);
43 }
44}