flow2schema/src/module.js

45 lines
930 B
JavaScript
Raw Normal View History

2017-11-16 15:17:15 +03:00
import * as pathlib from 'path';
import * as resolve from 'resolve';
2017-11-09 12:16:48 +03:00
2017-11-16 15:17:15 +03:00
export default class Module {
2017-11-09 12:16:48 +03:00
constructor(path, namespace) {
this.path = path;
this.namespace = namespace;
this.scopeCount = 0;
this._exports = new Map;
}
generateScopeId() {
return this.scopeCount++;
}
addExport(name, scope, reference) {
this._exports.set(name, [scope, reference]);
}
2017-11-13 21:11:18 +03:00
query(name, params) {
2017-11-09 12:16:48 +03:00
const result = this._exports.get(name);
if (!result) {
return {
type: 'unknown',
};
}
const [scope, reference] = result;
2017-11-13 21:11:18 +03:00
return scope.query(reference, params);
2017-11-09 12:16:48 +03:00
}
resolve(path) {
const basedir = pathlib.dirname(this.path);
// TODO: follow symlinks.
return resolve.sync(path, {basedir});
}
exports() {
return this._exports.values();
}
}