npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@groma/scanner-vue

v0.1.3

Published

Complementary Vue framework evidence; a dependency declaration does not verify runtime use.

Readme

Vue scanner

The Vue scanner adds single-file component (SFC) event bindings to Groma's TypeScript scanner evidence. Install the project's dependencies using its package manager and lockfile. The scanner reads each selected project's tsconfig.json; it does not install dependencies or execute application code.

bun install --frozen-lockfile --ignore-scripts
bun plugins/scanners/vue/build.ts

In the project being scanned:

groma scanner add /absolute/path/to/groma/plugins/scanners/vue/dist/package
groma scan

The package bundles Vue language-core 3.3.11, Volar TypeScript 2.4.28, Vue compiler-dom 3.5.42 and its own TypeScript 5.9.3. Compiler-sfc 3.5.42 provides build-time declarations only. The build pins compiler imports to that TypeScript installation. The separate TypeScript scanner uses its own 7.1 SDK. Compiler libraries and Vue helper declarations ship in the package; no consumer build or installation script is required.

Vue language tools supply project configuration, SFC parsing, template code generation and original-source mappings. Volar integrates the generated code with the TypeScript checker, which resolves component imports and handler function identities. The scanner translates these facts into the existing supplied-callback evidence contract; it has no separate name or type resolver.

Supported interaction

The qualified example is Vue REPL's CodeMirror change event bound to the parent's onChange function. A static imported SFC must use a typed defineEmits declaration assigned to a constant. A call to that same symbol must supply a declared literal event name inside a source function. The parent template must bind the event directly to one source function declaration or constant function expression. Imported TypeScript functions use the same rule. See Vue component events.

The observation records the emitting function, literal emit call, concrete template attribute and supplied handler. All positions refer to the original physical source, as zero-based UTF-16 offsets; lines are one-based. The nearest function owns a nested emit call. Repeated scans are deterministic.

Unresolved, dynamic or unsupported bindings produce unsupported-vue-binding diagnostics and no certain relationship. This revision does not support Options API events, runtime defineEmits arrays, dynamic components, dynamic event names, handler expressions or modifiers, state stores, routing, server frameworks or arbitrary event mutation. Compiler syntax/template errors fail the scan and preserve the previous complete map. Readiness errors explain missing project dependencies or invalid configuration.

Vue contributes vue Code provenance for configured source files. Shared core keeps one physical-file owner, interprets complementary and conflicting observations, and writes readable relationship rows. .vue and TypeScript edits participate in the existing scan watcher.

In OKF, the result is ordinary source links and relationship Markdown. An SFC is source evidence; it does not automatically define a C4 responsibility or add a containment level. Groma's existing ownership and relationship model owns that interpretation. No new architecture metadata is added.

See validation for the pinned project and executed release checks. This prototype package name does not imply public publication.

Nested projects

Run Groma from the repository root. The scanner finds package declarations in tracked and unignored files, including nested apps and libraries. Dependencies, dev dependencies, peer dependencies and optional dependencies identify candidates. A candidate also needs a tracked or unignored tsconfig.json and Vue source files belonging to that package, outside nested packages. Declaration files and inactive fixtures with a .fixture suffix do not qualify. Packages with only framework tooling dependencies are skipped. No matching project produces no evidence. Each compiler uses that project's configuration and installed dependencies; imported source in sibling repository libraries keeps its original source path. Readiness checks all selected projects. An invalid selected project fails this scanner's observation; other scanners can still update the architecture. Source and nested package/configuration changes use the shared scanner watch flow.