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

@mnc-software/mosaic-build-plus

v0.0.5

Published

Angular builder that extends ngx-build-plus with manifest generation, i18n copy, and WMD packaging

Readme

@mnc-software/mosaic-build-plus

@mnc-software/mosaic-build-plus is an Angular builder that wraps ngx-build-plus:browser and adds Mosaic-specific packaging steps:

  • Generate manifest.json from:
    • angular.json build metadata
    • Module Federation exposes from webpack config
    • TypeScript source analysis (ICustomWidget and @Option(...))
  • Copy manifest.json to output root
  • Copy i18n folder to output root
  • Optionally create .wmd package (zip containing manifest.json, ngwebmodule, i18n)

Builder Name

@mnc-software/mosaic-build-plus:browser

Example angular.json configuration

{
  "projects": {
    "myapp": {
      "architect": {
        "build": {
          "builder": "@mnc-software/mosaic-build-plus:browser",
          "options": {
            "index": "src/index.html",
            "main": "src/main.ts",
            "tsConfig": "tsconfig.app.json",
            "extraWebpackConfig": "webpack.config.js",
            "manifestPath": "manifest.json",
            "angularConfigPath": "angular.json",
            "projectName": "myapp",
            "widgetLabelPrefix": "DashboardWidget.",
            "generateManifest": true,
            "copyManifest": true,
            "i18nPath": "i18n",
            "copyI18n": true
          },
          "configurations": {
            "production": {
              "createWmd": true
            },
            "development": {
              "createWmd": false
            }
          }
        }
      }
    }
  }
}

Builder options

  • outputPath: Optional. Defaults to dist/ngwebmodule.
  • manifestPath: Source manifest path. Default manifest.json.
  • angularConfigPath: Path to angular workspace config. Default angular.json.
  • projectName: Optional explicit angular project name.
  • widgetLabelPrefix: Optional prefix for widget labels in generated manifest widgetData entries. Defaults to DashboardWidget..
  • webpackConfigPath: Optional explicit webpack config path. Defaults to active build config.
  • generateManifest: Default true.
  • copyManifest: Default true.
  • i18nPath: Source i18n folder. Default i18n.
  • copyI18n: Default true.
  • outputRoot: Optional packaging root. Defaults to dirname(outputPath).
  • createWmd: Optional. If omitted:
    • WMD_PACKAGE=true => force on
    • WMD_PACKAGE=false => force off
    • otherwise defaults to on
  • wmdFileName: Optional package file name. Defaults to ${manifest.name}.wmd.

All standard ngx-build-plus:browser options are also passed through.

WMD file name and manifest name resolution

The generated WMD package file name is resolved in this order:

  1. wmdFileName builder option (if provided)
  2. ${manifest.name}.wmd
  3. module.wmd (only if manifest.name is missing)

manifest.name is resolved in this order when manifest generation is enabled:

  1. Module Federation plugin name from webpack config (new ModuleFederationPlugin({ name: ... }))
  2. package.json name
  3. Angular projectName

This means the Angular project name is a fallback, not the primary source.

Example

If your Angular project is clientproptest but your Module Federation name is mfe1, the package will default to mfe1.wmd.

To force a specific package name regardless of manifest contents, set:

{
  "projects": {
    "myapp": {
      "architect": {
        "build": {
          "options": {
            "wmdFileName": "clientproptest.wmd"
          }
        }
      }
    }
  }
}

Troubleshooting

  • Seeing an unexpected filename like mfe1.wmd:
    • Check manifest.json name
    • Check webpack Module Federation name
    • Check package.json name
    • If needed, set wmdFileName explicitly

Publishing

  1. Ensure package metadata is correct in package.json.
  2. Pack locally:
    • npm pack
  3. Publish to npm/artifactory using your normal registry workflow.

Notes

  • Widget/component classification is source-based:
    • implements ICustomWidget => widgetData
    • otherwise => componentData
  • Widget options are parsed from class property @Option(...) decorators.