{"id":28684908,"url":"https://github.com/node-modules/urlmock","last_synced_at":"2025-06-14T03:07:48.143Z","repository":{"id":23537761,"uuid":"26904616","full_name":"node-modules/urlmock","owner":"node-modules","description":"Easy load mock data from a specify url.","archived":false,"fork":false,"pushed_at":"2023-01-09T20:28:53.000Z","size":23,"stargazers_count":5,"open_issues_count":1,"forks_count":1,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-06-03T02:09:25.318Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/node-modules.png","metadata":{"files":{"readme":"README.md","changelog":"History.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-11-20T09:14:56.000Z","updated_at":"2023-07-12T11:18:25.000Z","dependencies_parsed_at":"2023-01-13T23:27:35.076Z","dependency_job_id":null,"html_url":"https://github.com/node-modules/urlmock","commit_stats":null,"previous_names":["node-modules/urlmock"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/node-modules/urlmock","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-modules%2Furlmock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-modules%2Furlmock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-modules%2Furlmock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-modules%2Furlmock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/node-modules","download_url":"https://codeload.github.com/node-modules/urlmock/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-modules%2Furlmock/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259752078,"owners_count":22905972,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-14T03:07:40.152Z","updated_at":"2025-06-14T03:07:48.138Z","avatar_url":"https://github.com/node-modules.png","language":"JavaScript","readme":"urlmock\n=======\n\n[![NPM version][npm-image]][npm-url]\n[![build status][travis-image]][travis-url]\n[![Test coverage][coveralls-image]][coveralls-url]\n[![Gittip][gittip-image]][gittip-url]\n[![David deps][david-image]][david-url]\n[![node version][node-image]][node-url]\n[![npm download][download-image]][download-url]\n\n[npm-image]: https://img.shields.io/npm/v/urlmock.svg?style=flat-square\n[npm-url]: https://npmjs.org/package/urlmock\n[travis-image]: https://img.shields.io/travis/node-modules/urlmock.svg?style=flat-square\n[travis-url]: https://travis-ci.org/node-modules/urlmock\n[coveralls-image]: https://img.shields.io/coveralls/node-modules/urlmock.svg?style=flat-square\n[coveralls-url]: https://coveralls.io/r/node-modules/urlmock?branch=master\n[gittip-image]: https://img.shields.io/gittip/fengmk2.svg?style=flat-square\n[gittip-url]: https://www.gittip.com/fengmk2/\n[david-image]: https://img.shields.io/david/node-modules/urlmock.svg?style=flat-square\n[david-url]: https://david-dm.org/node-modules/urlmock\n[node-image]: https://img.shields.io/badge/node.js-%3E=_0.10-green.svg?style=flat-square\n[node-url]: http://nodejs.org/download/\n[download-image]: https://img.shields.io/npm/dm/urlmock.svg?style=flat-square\n[download-url]: https://npmjs.org/package/urlmock\n\nEasy load mock data from a specify url.\n\n---\n\n## Features\n\n- Simple url and mock file mapping rules.\n- Support `*.js`, `*.json` and common datas.\n\n## Installation\n\n```bash\n$ npm install urlmock\n```\n\n## URL Mapping Rules\n\nUse `?__scene[={scene}]` to select mock scene, default scene is `default`.\n\n### Rules\n\n```\n{url}?__scene={scene} =\u003e {datadir}{url}/{scene}.js\n```\n\n### Examples\n\n- `{datadir}` equal `/foobar/test/mocks`\n\nThere are some mapping rules:\n\n- `/?__scene` (meaning `/?__scene=default`) =\u003e `/foobar/test/mocks/default.js`\n- `/users?__scene=other` =\u003e `/foobar/test/mocks/users/other.js`\n- `/users/?__scene=second` =\u003e `/foobar/test/mocks/users/second.js`\n- `/users/123.html?__scene` =\u003e `/foobar/test/mocks/users/123.html/default.js`\n- `/users/123.json?__scene` =\u003e `/foobar/test/mocks/users/123.json/default.js`\n- `/users/123.json?__scene=one` =\u003e `/foobar/test/mocks/users/123.json/one.js`\n- `/users/123?__scene=one` =\u003e `/foobar/test/mocks/users/123/one.js`\n\nSo we will see total structure on `/foobar/test/mocks` like this:\n\n- / (`GET /`)\n    - default.js\n    - users/ (`GET /users`)\n        - default.js\n        - other.js\n        - second.js\n        - 123.html/ (`GET /users/123.html`)\n            - default.js\n        - 123.json/ (`GET /users/123.json`)\n            - default.js\n            - one.js\n        - 123/ (`GET /users/123`)\n            - default.js\n            - one.js\n            - common.js\n\n## Mock file format\n\n### `*.js`: normal js file\n\n`../common/user.js`\n\n```js\nmodule.exports = {\n  name: 'mock-name',\n  age:100,\n  isAdmin: false,\n  logined: false,\n  homepage: 'http://ooxx.com/fengmk2',\n  // .. other common user properties\n};\n```\n\n`../common/admin.js`\n\n```js\nmodule.exports = {\n  isAdmin: true,\n  logined: true,\n};\n```\n\n`./logined_user.js`\n\n```js\nmodule.exports = {\n  logined: true,\n};\n```\n\n`logined_admin.js`\n\n```js\nmodule.exports = {\n  name: 'fengmk2',\n  age: 18,\n  // require common data\n  __requires: ['../common/user', './logined_user', '../common/admin'],\n};\n```\n\nMerge sequence:\n\nOutput \u003c== `../common/user` \u003c== `./logined_user` \u003c== `../common/admin`\n\nSo `logined_admin.js` will merge all data:\n\n```js\n{\n  name: 'fengmk2',\n  age: 18,\n  isAdmin: true,\n  logined: true,\n  homepage: 'http://ooxx.com/fengmk2',\n  // .. other common user properties\n}\n```\n\n### `*.json`: readonly json file\n\n`foo.json`:\n\n```json\n{\n  \"name\": \"fengmk2\",\n  \"age\": 18,\n  \"logined\": false\n}\n```\n\n## Quick start\n\n```js\nvar urlmock = require('urlmock');\n\nvar data = urlmock('/foobar/test/mocks', '/users/1984?__scene=newuser');\nconsole.log(data);\n// { name: 'fengmk2', age: 18 }\n```\n\n### use `__name` for scene name\n\nDefault scene name is `file name`.\nWe can add `__name` special property on mock data to set the scene name.\n\n`default.js` will show scene name is `normal user (default.js)`\n\n```js\nmodule.exports = {\n  name: 'jack',\n  __name: 'normal user'\n};\n```\n\n`ma.js` will show scene name is `马 yun yun (ma.js)`\n\n```js\nmodule.exports = {\n  name: 'jack ma',\n  __name: '马 yun yun',\n  __requires: ['./default']\n};\n```\n\n## API Reference\n\n### #urlmock(datadir, url)\n\nGet the url mapping mock data.\n\n- datadir: store mock data directory path\n- url: current request url\n\n```js\nvar data = urlmock('/foobar/test/mocks', '/users/1984?__scene=newuser');\nconsole.log(data);\n// { name: 'fengmk2', age: 18 }\n```\n\n### #urlmock(datadir, ctx)\n\nGet the url mapping mock data.\n\n- datadir: store mock data directory path\n- ctx: koa context instance\n\n```js\nvar data = urlmock('/foobar/test/mocks', ctx);\nconsole.log(data);\n// { name: 'fengmk2', age: 18 }\n```\n\n## License\n\nMIT\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnode-modules%2Furlmock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnode-modules%2Furlmock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnode-modules%2Furlmock/lists"}