# urlmock

> Easy load mock data from a specify url

Latest version **2.1.0** (published 2017-05-18) · MIT license · 0 weekly downloads

## Install

```sh
npm install urlmock
pnpm add urlmock
yarn add urlmock
bun add urlmock
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.1.0 |
| Published | 2017-05-18 |
| First published | 2014-11-20 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >= 0.10.0 |
| Dependencies | 2 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 5 |
| Author | fengmk2 |
| Maintainers | fengmk2, popomore |
| Keywords | urlmock, mock, mockfile, mockify, mocker |

## Links

- npm: https://www.npmjs.com/package/urlmock
- Repository: https://github.com/node-modules/urlmock
- Issues: https://github.com/node-modules/urlmock/issues
- npm.io page: https://npm.io/package/urlmock

## Dependencies (2)

- [debug](https://npm.io/package/debug.md) ^2.6.7
- [extend](https://npm.io/package/extend.md) ^2.0.1

## Alternatives

- [base64url](https://npm.io/package/base64url.md) — 6.1M weekly downloads
- [get-installed-path](https://npm.io/package/get-installed-path.md) — 502.9K weekly downloads
- [@uppy/url](https://npm.io/package/@uppy/url.md) — 185.8K weekly downloads
- [@d3fc/d3fc-shape](https://npm.io/package/@d3fc/d3fc-shape.md) — 16.2K weekly downloads
- [localizer](https://npm.io/package/localizer.md) — 226 weekly downloads

## Recent versions

- 2.1.0 (latest) — 2017-05-18
- 2.0.1 — 2015-07-01
- 2.0.0 — 2015-03-20
- 1.3.1 — 2014-12-24
- 1.3.0 — 2014-12-08
- 1.2.0 — 2014-12-06
- 1.1.0 — 2014-11-21
- 1.0.0 — 2014-11-20

## README

urlmock
=======

[![NPM version][npm-image]][npm-url]
[![build status][travis-image]][travis-url]
[![Test coverage][coveralls-image]][coveralls-url]
[![Gittip][gittip-image]][gittip-url]
[![David deps][david-image]][david-url]
[![node version][node-image]][node-url]
[![npm download][download-image]][download-url]

[npm-image]: https://img.shields.io/npm/v/urlmock.svg?style=flat-square
[npm-url]: https://npmjs.org/package/urlmock
[travis-image]: https://img.shields.io/travis/node-modules/urlmock.svg?style=flat-square
[travis-url]: https://travis-ci.org/node-modules/urlmock
[coveralls-image]: https://img.shields.io/coveralls/node-modules/urlmock.svg?style=flat-square
[coveralls-url]: https://coveralls.io/r/node-modules/urlmock?branch=master
[gittip-image]: https://img.shields.io/gittip/fengmk2.svg?style=flat-square
[gittip-url]: https://www.gittip.com/fengmk2/
[david-image]: https://img.shields.io/david/node-modules/urlmock.svg?style=flat-square
[david-url]: https://david-dm.org/node-modules/urlmock
[node-image]: https://img.shields.io/badge/node.js-%3E=_0.10-green.svg?style=flat-square
[node-url]: http://nodejs.org/download/
[download-image]: https://img.shields.io/npm/dm/urlmock.svg?style=flat-square
[download-url]: https://npmjs.org/package/urlmock

Easy load mock data from a specify url.

---

## Features

- Simple url and mock file mapping rules.
- Support `*.js`, `*.json` and common datas.

## Installation

```bash
$ npm install urlmock
```

## URL Mapping Rules

Use `?__scene[={scene}]` to select mock scene, default scene is `default`.

### Rules

```
{url}?__scene={scene} => {datadir}{url}/{scene}.js
```

### Examples

- `{datadir}` equal `/foobar/test/mocks`

There are some mapping rules:

- `/?__scene` (meaning `/?__scene=default`) => `/foobar/test/mocks/default.js`
- `/users?__scene=other` => `/foobar/test/mocks/users/other.js`
- `/users/?__scene=second` => `/foobar/test/mocks/users/second.js`
- `/users/123.html?__scene` => `/foobar/test/mocks/users/123.html/default.js`
- `/users/123.json?__scene` => `/foobar/test/mocks/users/123.json/default.js`
- `/users/123.json?__scene=one` => `/foobar/test/mocks/users/123.json/one.js`
- `/users/123?__scene=one` => `/foobar/test/mocks/users/123/one.js`

So we will see total structure on `/foobar/test/mocks` like this:

- / (`GET /`)
    - default.js
    - users/ (`GET /users`)
        - default.js
        - other.js
        - second.js
        - 123.html/ (`GET /users/123.html`)
            - default.js
        - 123.json/ (`GET /users/123.json`)
            - default.js
            - one.js
        - 123/ (`GET /users/123`)
            - default.js
            - one.js
            - common.js

## Mock file format

### `*.js`: normal js file

`../common/user.js`

```js
module.exports = {
  name: 'mock-name',
  age:100,
  isAdmin: false,
  logined: false,
  homepage: 'http://ooxx.com/fengmk2',
  // .. other common user properties
};
```

`../common/admin.js`

```js
module.exports = {
  isAdmin: true,
  logined: true,
};
```

`./logined_user.js`

```js
module.exports = {
  logined: true,
};
```

`logined_admin.js`

```js
module.exports = {
  name: 'fengmk2',
  age: 18,
  // require common data
  __requires: ['../common/user', './logined_user', '../common/admin'],
};
```

Merge sequence:

Output <== `../common/user` <== `./logined_user` <== `../common/admin`

So `logined_admin.js` will merge all data:

```js
{
  name: 'fengmk2',
  age: 18,
  isAdmin: true,
  logined: true,
  homepage: 'http://ooxx.com/fengmk2',
  // .. other common user properties
}
```

### `*.json`: readonly json file

`foo.json`:

```json
{
  "name": "fengmk2",
  "age": 18,
  "logined": false
}
```

## Quick start

```js
var urlmock = require('urlmock');

var data = urlmock('/foobar/test/mocks', '/users/1984?__scene=newuser');
console.log(data);
// { name: 'fengmk2', age: 18 }
```

### use `__name` for scene name

Default scene name is `file name`.
We can add `__name` special property on mock data to set the scene name.

`default.js` will show scene name is `normal user (default.js)`

```js
module.exports = {
  name: 'jack',
  __name: 'normal user'
};
```

`ma.js` will show scene name is `马 yun yun (ma.js)`

```js
module.exports = {
  name: 'jack ma',
  __name: '马 yun yun',
  __requires: ['./default']
};
```

## API Reference

### #urlmock(datadir, url)

Get the url mapping mock data.

- datadir: store mock data directory path
- url: current request url

```js
var data = urlmock('/foobar/test/mocks', '/users/1984?__scene=newuser');
console.log(data);
// { name: 'fengmk2', age: 18 }
```

### #urlmock(datadir, ctx)

Get the url mapping mock data.

- datadir: store mock data directory path
- ctx: koa context instance

```js
var data = urlmock('/foobar/test/mocks', ctx);
console.log(data);
// { name: 'fengmk2', age: 18 }
```

## License

MIT

---
_Source: https://npm.io/package/urlmock · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
