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

webpack-devserver-helper

v1.0.0

Published

helper for webpack-dev-server for data mocking and proxy

Downloads

7

Readme

Webpack devServer helper

Build Status Test Coverage Maintainability License

A processor to mock data from static file via devServer.historyApiFallback.rewrites. Also a tool to parse mock configuration. Another tool is used to process devServer.proxy configuration, taking into account the public path and other stuff, to simplify its configuration.

Mock illustration

config

  • folder

    mock

  • mocked file extension

    json

  • conversion map

    	'article/(\\d+)/comment/(\\d+)' =>  'article_$1_comment_$2'

url

`article/235/comment/456`

result url

`mock/article_456_comment_235.json`

Webpack config example

const helper =require('webpack-devserver-helper');
const publicPath = 'root';
const cfg= [
  ['article/(\\d+)/comment/(\\d+)', 'article_$1_comment_$2_']
];
const mock=helper.staticMock(helper.parseMockConfig(cfg), publicPath);
module.exports={
  ...,
  devServer: {
    historyApiFallback: {
      verbose: true,
      index: publicPath + '/index.html',
      rewrites: [{
        from: new RegExp(`^api/([^.]+)`),
        to: function(ctx){
          return mock(ctx.match[1]);
        } 
      }]
    },
    setup:function setup(app){
      app.post('/api/:path', function(req, res, next) {
        req.method='GET';
        next();
      });
    }
  }
};

Proxy illustration

config

  • public path

    root

  • source config

    {
    context: ['/auth', '/api'],
    target: 'http://localhost:3000',
    }

output

[{
  context: ['root/auth', 'root/api'],
  target: 'http://localhost:3000',
}]

Docs

Functions

parseMockConfig(cfg) ⇒ Object

Generate config of full format from shorthand, for staticMock using. Acceptible formats refering to @see.

Kind: global function
Returns: Object - - refined config
See: input and output formats

  • input

    • {true} => {folder:'mock'}
    • {string} 'mockDir' => {folder:'mockDir'},
    • {array}
      ['article/(\\d+)/comment/(\\d+)', 'article_$1_comment_$2_']
      =>
      {folder:'mock', rewrites:[]}
    • {Object} if 'folder' is missed, set to 'mock', or stay untouched
  • output

    {
      folder:'mock',
      rewrites:[
        ['article/(\\d+)/comment/(\\d+)', 'article_$1_comment_$2_']
      ]
    }

| Param | Type | Description | | --- | --- | --- | | cfg | Object | passed in shorthand config. |

staticMock(mockConfig, publicPath, [ext]) ⇒ function

Create a path mapping function used for devServer config. Config details referring to webpack config example.

Kind: global function
Returns: function - - function mapping path to mock data file name.

| Param | Type | Default | Description | | --- | --- | --- | --- | | mockConfig | Object | | returned from parseMockConfig() | | publicPath | string | | what is configured in webpack | | [ext] | string | "json" | default file extension mapped when no rewrites matched |

parseProxies(proxies, publicPath, apiPrefix) ⇒ Object

Refine setting for devServer.proxy.

  1. prepend publicPath to key.
  2. rewrites them to empty string, if no 'pathRewrite' is specified.
  3. set logLevel to 'debug'.

Kind: global function
Returns: Object - the config object with correct format.
See: allowed format for input config:

  • {string} assume apiPrefix is source to match 'http://api.com'

  • {object} {'api':'http://afsfa.com'}

    or (will be wrapped into array automatically)

    {
      context: ['/auth', '/api'],
      target: 'http://localhost:3000',
    }
  • {array}

    [{
     context: ["/auth", "/api"],
     target: "http://localhost:3000",
    }].

| Param | Type | Description | | --- | --- | --- | | proxies | string | object | array | input config, ref @see to see allowed format. | | publicPath | string | the option set in webpack. | | apiPrefix | string | default url to match when url is missing in config. |

License

MIT.