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

swc-plugin-transform-async-to-ng-generator

v0.2.1

Published

SWC plugin to transform async functions to ng-generator functions for AngularJS $q compatibility

Readme

swc-plugin-transform-async-to-ng-generator

SWC plugin to transform async functions to generator functions wrapped with _ngAsyncToGenerator for AngularJS $q compatibility.

Why?

AngularJS uses $q for promises, which integrates with the digest cycle. Native async/await returns native Promises that don't trigger Angular's digest cycle. This plugin transforms async functions to use a custom wrapper that uses $q when available.

Installation

npm install swc-plugin-transform-async-to-ng-generator @swc/core

Usage

In your SWC config:

{
  jsc: {
    experimental: {
      plugins: [
        ["swc-plugin-transform-async-to-ng-generator", {}]
      ]
    }
  }
}

Runtime Requirement

You need to include the _ngAsyncToGenerator runtime helper in your application. See ngAsyncToGenerator.js for the implementation.

Transformation Examples

Async Function Declaration

// Input
async function fetchData() {
    const result = await fetch('/api');
    return result;
}

// Output
function fetchData() {
    return _fetchData.apply(this, arguments);
}
function _fetchData() {
    _fetchData = _ngAsyncToGenerator(function* () {
        const result = yield fetch('/api');
        return result;
    });
    return _fetchData.apply(this, arguments);
}

Async Arrow Function

// Input
const fetchData = async () => {
    const result = await fetch('/api');
    return result;
};

// Output
const fetchData = (function () {
    var _ref = _ngAsyncToGenerator(function* () {
        const result = yield fetch('/api');
        return result;
    });
    return function () {
        return _ref.apply(this, arguments);
    };
})();

Async Class Method

// Input
class Service {
    async load() {
        const data = await this.fetch();
        return data;
    }
}

// Output
class Service {
    load() {
        var _this = this;
        return _ngAsyncToGenerator(function* () {
            const data = yield _this.fetch();
            return data;
        })();
    }
}

Building

# Install Rust (stable) and wasm32-wasip1 target
rustup target add wasm32-wasip1

# Build
npm run build

The output wasm file will be at target/wasm32-wasip1/release/swc_plugin_transform_async_to_ng_generator.wasm.

Upgrading Dependencies

When upgrading Rust dependencies (e.g., updating swc_core version in Cargo.toml), you need to temporarily disable offline mode:

CARGO_NET_OFFLINE=false cargo build --target wasm32-wasip1 --release

This allows Cargo to fetch new crate versions from the registry.

Compatibility

This plugin is compatible with @swc/core version 1.15.x (swc_core v54.0.0).

License

MIT