glimmer-analyzer
Version:
Statically analyzes Handlebars templates and components for dependency trees and other information.
113 lines • 9.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("fs");
const path = require("path");
const Debug = require("debug");
const resolution_map_builder_1 = require("@glimmer/resolution-map-builder");
const resolver_1 = require("@glimmer/resolver");
const util_1 = require("@glimmer/util");
const load_package_json_1 = require("./utils/load-package-json");
const load_config_factory_1 = require("./utils/load-config-factory");
const build_resolver_config_1 = require("./utils/build-resolver-config");
const debug = Debug('glimmer-analyzer:project');
class Template {
constructor(templateString, specifier) {
this.string = templateString;
this.specifier = specifier;
}
}
exports.Template = Template;
const DEFAULT_PATHS = {
src: 'src',
config: 'config'
};
class Project {
constructor(projectDir, options = {}) {
this.projectDir = projectDir;
this.paths = Object.assign({}, DEFAULT_PATHS, options.paths);
this.environment = options.environment || 'development';
debug(`creating project; dir=%s; env=%s; paths=%o`, projectDir, this.environment, this.paths);
this.loadPackageJSON(projectDir);
this.loadEnvironmentConfig(projectDir, this.environment);
this.buildResolverConfig();
}
get map() {
if (this._map) {
return this._map;
}
let { resolverConfig: moduleConfig, projectDir } = this;
let modulePrefix = (moduleConfig.app && moduleConfig.app.rootName) || 'app';
let map = resolution_map_builder_1.buildResolutionMap({
projectDir,
moduleConfig,
modulePrefix
});
// We can stop doing this if/when https://github.com/glimmerjs/resolution-map-builder/pull/27 is merged.
for (let key in map) {
map[key] = `src/${map[key]}`;
}
return this._map = map;
}
get pathMap() {
if (this._pathMap) {
return this._pathMap;
}
let map = this.map;
let pathMap = {};
for (let key in map) {
pathMap[map[key]] = key;
}
return this._pathMap = pathMap;
}
get resolver() {
if (this._resolver) {
return this._resolver;
}
return this._resolver = new resolver_1.default(this.resolverConfig, this.registry);
}
get registry() {
if (this._registry) {
return this._registry;
}
return this._registry = new resolver_1.BasicModuleRegistry(this.map);
}
templateFor(templateName) {
let specifier = this.resolver.identify(`template:${templateName}`);
if (!specifier) {
throw new Error(`Couldn't find template for component ${templateName} in Glimmer app ${this.projectDir}.`);
}
let templatePath = this.resolver.resolve(specifier);
let templateString = fs.readFileSync(path.join(this.projectDir, templatePath), 'utf8');
return new Template(templateString, specifier);
}
specifierForPath(objectPath) {
return this.pathMap[objectPath] || null;
}
pathForSpecifier(specifier) {
return this.map[specifier] || null;
}
loadPackageJSON(projectDir) {
let pkgPath = path.join(projectDir, 'package.json');
let pkg = load_package_json_1.default(pkgPath);
this.pkg = pkg;
util_1.assert(pkg.name, `The package.json at ${pkgPath} did not contain a valid 'name' field.`);
debug('loaded package.json; path=%s', pkgPath);
}
loadEnvironmentConfig(projectDir, environment) {
let configPath = path.join(projectDir, this.paths.config, 'environment');
let configFactory = load_config_factory_1.default(configPath);
if (configFactory) {
this.config = configFactory(environment);
debug('evaluated project config; path=%s; config=%o', configPath, this.config);
}
else {
debug('no project config found; falling back to defaults');
this.config = {};
}
}
buildResolverConfig() {
this.resolverConfig = build_resolver_config_1.default(this.config, this.pkg.name);
}
}
exports.default = Project;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUJBQTBCO0FBQzFCLDZCQUE4QjtBQUM5QiwrQkFBZ0M7QUFFaEMsNEVBQXFFO0FBQ3JFLGdEQUF5RjtBQUN6Rix3Q0FBNkM7QUFFN0MsaUVBQXlFO0FBQ3pFLHFFQUF3RTtBQUN4RSx5RUFBZ0U7QUFFaEUsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFNaEQ7SUFJRSxZQUFZLGNBQXNCLEVBQUUsU0FBaUI7UUFDbkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBUkQsNEJBUUM7QUFZRCxNQUFNLGFBQWEsR0FBRztJQUNwQixHQUFHLEVBQUUsS0FBSztJQUNWLE1BQU0sRUFBRSxRQUFRO0NBQ2pCLENBQUM7QUFFRjtJQVlFLFlBQW1CLFVBQWtCLEVBQUUsVUFBMEIsRUFBRTtRQUFoRCxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksYUFBYSxDQUFDO1FBRXhELEtBQUssQ0FBQyw0Q0FBNEMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFOUYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV6RCxJQUFJLENBQUMsbUJBQW1CLEVBQUUs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