UNPKG

glimmer-analyzer

Version:

Statically analyzes Handlebars templates and components for dependency trees and other information.

113 lines 9.34 kB
"use strict"; 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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