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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@poppinss/module-methods-extractor

v1.0.5

Published

A package to extract methods from a Typescript or Javascript class

Downloads

5

Readme

Module methods exporter

Returns a list of method names and line number for a JavaScript or TypeScript module.

circleci-image npm-image license-image audit-report-image

This module is used by the AdonisJs VsCode extension to show an autocomplete list of controller methods, event listeners and so on.

The module is tailored for AdonisJs only, which helps in optimizing the way we scan the source code AST.

Table of contents

Usage

Install the package from npm registry as follows:

import { Extractor } from '@poppinss/Extractor'

const extractor = new Extractor()

const response = extractor.extract(`
export default class UserController {
  public async index () {
  }

  public async store () {
  }
}
`)

assert.deepEqual(response, {
  kind: 'class',
  methods: [
    {
      name: 'index',
      lineno: 2
    },
    {
      name: 'store',
      lineno: 5
    },    
  ]
})

Design & Limitations

The module is written to work with AdonisJs, where modules are not imported explicitly but their filenames are passed as a reference. For example:

Route.get('users', 'UsersController.index')

In the above example, The UsersController is an actual module that has a default export on the UserController class. AdonisJs behind the scenes will use its IoC container to lazy load this class and invoke the defined method.

Features supported

  • CommonJs module.exports and exports are supported.
  • ESM export default is supported.
  • Handle assignment references like module.exports = exports = UserController.
  • Handle inline class declarations like export default UserController {}.
  • Returns lineno for all methods.

Limitations

  • Named exports are not allowed, since they are also forbidden by the IoC container automatic bindings.

  • The export reference must be located as a top level property. For example:

    const someObject = {
      prop: class UserController {}
    }
    
    export default someObject.prop

    The above expression is not something we advocate in the AdonisJs eco-system and also it is not a great pattern to use either.

  • Only 3 levels deep assignments are supported.

    // works
    module.exports = exports = UserController
    
    // works
    module.exports = exports = someFunc = UserController
    
    // does not work
    module.exports = exports = someFunc = someOtherFunc = UserController