# glimmer-analyzer

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

Latest version **0.3.3** (published 2018-05-02) · MIT license · 0 weekly downloads

## Install

```sh
npm install glimmer-analyzer
pnpm add glimmer-analyzer
yarn add glimmer-analyzer
bun add glimmer-analyzer
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.3.3 |
| Published | 2018-05-02 |
| First published | 2017-05-20 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 5 |
| Unpacked size | 35 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 8 |
| Author | Tom Dale |
| Maintainers | tomdale |
| Keywords | glimmer, static, analysis, handlebars |

## Links

- npm: https://www.npmjs.com/package/glimmer-analyzer
- Repository: https://github.com/tomdale/glimmer-analyzer
- Homepage: https://github.com/tomdale/glimmer-analyzer#readme
- Issues: https://github.com/tomdale/glimmer-analyzer/issues
- npm.io page: https://npm.io/package/glimmer-analyzer

## Dependencies (5)

- [debug](https://npm.io/package/debug.md) ^3.1.0
- [@glimmer/syntax](https://npm.io/package/@glimmer/syntax.md) ^0.34.2
- [@glimmer/resolver](https://npm.io/package/@glimmer/resolver.md) ^0.3.0
- [simple-html-tokenizer](https://npm.io/package/simple-html-tokenizer.md) ^0.5.1
- [@glimmer/resolution-map-builder](https://npm.io/package/@glimmer/resolution-map-builder.md) ^0.4.0

## Recent versions

- 0.3.3 (latest) — 2018-05-02
- 0.3.2 — 2017-10-16
- 0.3.1 — 2017-10-15
- 0.3.0 — 2017-10-15
- 0.2.3 — 2017-10-12
- 0.2.2 — 2017-10-12
- 0.2.1 — 2017-10-03
- 0.2.0 — 2017-09-27
- 0.1.5 — 2017-06-16
- 0.1.3 — 2017-06-16
- 0.1.2 — 2017-06-08
- 0.1.1 — 2017-06-06
- 0.1.0 — 2017-05-20

## README

# Glimmer Analyzer

A library for doing some static analysis of Glimmer apps.

## Installation

```
yarn add glimmer-analyzer
```

## Creating an Analyzer

```ts
import Analyzer from 'glimmer-analyzer';
let analyzer = new Analyzer('/path/to/glimmer/app');
```

## Template Dependencies

### `dependenciesForTemplate(componentName)`

Discover the child components used in a component's template.

```ts
import Analyzer from 'glimmer-analyzer';
let analyzer = new Analyzer('/path/to/glimmer/app');
analyzer.dependenciesForTemplate('my-component');
// {
//   path: '/my-app/components/my-component',
//   hasComponentHelper: false,
//   components: [
//     '/my-app/components/my-component/local-component',
//     '/my-app/components/my-other-component'
//   ]
// }
```

### `recursiveDependenciesForTemplate(componentName)`

Discover the child components used in a component's template, and the components
used in the child components' templates, and so on, until the entire dependency
graph has been walked.

```ts
import Analyzer from 'glimmer-analyzer';
let analyzer = new Analyzer('/path/to/glimmer/app');
analyzer.dependenciesForTemplate('my-component');
// {
//   path: '/my-app/components/my-component',
//   hasComponentHelper: false,
//   components: [
//     '/my-app/components/my-component/local-component',
//     '/my-app/components/my-component/local-component/we-must-go-deeper',
//     '/my-app/components/my-other-component',
//     '/my-app/components/user-profile',
//     '/my-app/components/some-component-used-by-my-other-component-but-not-my-component'
//     '/my-app/components/no-one-reads-readmes-anyway',
//   ]
// }
```

## Treeshaken Resolution Maps

Glimmer uses a [resolution
map](https://github.com/glimmerjs/resolution-map-builder#the-resolution-map) to
map components used in your templates to their underlying modules. Instead of
building a resolution map that contains everything for the whole app, you can
build a map that contains the modules for just a single component (an entry
point for a route, for example) and all of its dependencies.

### `resolutionMapForEntryPoint`

Returns the resolution map for the app with everything but the given component
and its dependencies removed. If you don't provide the map as the second
argument, it will try to generate one for you.

```ts
import Analyzer from 'glimmer-analyzer';
let analyzer = new Analyzer('/path/to/glimmer/app');
let resolutionMapForWholeApp = ...;

analyzer.resolutionMapForEntryPoint('my-component', resolutionMapForWholeApp);
// {
//   'component:/my-app/components/my-component': 'ui/components/my-component/component.ts',
//   'template:/my-app/components/my-component': 'ui/components/my-component/template.hbs',
//   'component:/my-app/components/my-component/page-banner': 'ui/components/my-app/page-banner/component.ts',
//   'template:/my-app/components/my-component/page-banner': 'ui/components/my-app/page-banner/template.hbs',
//   'template:/my-app/components/ferret-launcher': 'ui/components/ferret-launcher/template.hbs',
// }
```

---
_Source: https://npm.io/package/glimmer-analyzer · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
