open-index/open-npm huggingface dataset:
npm package: @koex/validate
Description: validate for koa extend
Author: Zero
Latest version: 0.0.3

# validate

[![NPM version](https://img.shields.io/npm/v/@koex/validate.svg?style=flat)](https://www.npmjs.com/package/@koex/validate)
[![Coverage Status](https://img.shields.io/coveralls/koexjs/validate.svg?style=flat)](https://coveralls.io/r/koexjs/validate)
[![Dependencies](https://img.shields.io/david/koexjs/validate.svg)](https://github.com/koexjs/validate)
[![Build Status](https://travis-ci.com/koexjs/validate.svg?branch=master)](https://travis-ci.com/koexjs/validate)
![license](https://img.shields.io/github/license/koexjs/validate.svg)
[![issues](https://img.shields.io/github/issues/koexjs/validate.svg)](https://github.com/koexjs/validate/issues)

> validate for koa extend.

### Install

```
$ npm install @koex/validate
```

### Usage

```javascript
// See more in test
import * as bodyParser from 'koa-body';
import onerror from '@zcorky/onerror';
import validate from '@koex/validate';
import * as router from '@koex/router';

import * as Koa from 'koa';
const app = new Koa();

app.use(onerror());
app.use(bodyParse());
app.use(validate());

app.use(router.post('/', (ctx, next) => {
  ctx.validate({
    name: 'string',
    age: 'int',
  });
}, ctx => {
  ctx.body = ctx.request.body;
}));

app.listen(8000, '0.0.0.0', () => {
  console.log('koa server start at port: 8000');
});
```

### Related
* [koa-validate](https://github.com/koajs/validate)
* [egg-validate](https://github.com/eggjs/egg-validate)
npm package: @kofany/irc-framework
Description: IRC framework for node.js — fork with CTCP event consistency
Author: prawnsalad
Latest version: 4.14.1

# irc-framework
A better IRC framework for node.js. For bots and full clients. Read the [documentation](https://github.com/kiwiirc/irc-framework/blob/master/docs/clientapi.md).

### Aims
* Lightweight
* Performant
* Very easy to get going out of the box
* Grows as needed for larger applications
* IRCv3 compliant
* Multiple (+ auto detected) encoding support
* Complete test suite


#### A simple and low-boilerplate framework to build IRC bots.
~~~javascript
var bot = new IRC.Client();
bot.connect({
	host: 'irc.freenode.net',
	port: 6667,
	nick: 'prawnsbot'
});

bot.on('message', function(event) {
  	if (event.message.indexOf('hello') === 0) {
  		  event.reply('Hi!');
  	}

  	if (event.message.match(/^!join /)) {
  		var to_join = event.message.split(' ')[1];
  		event.reply('Joining ' + to_join + '..');
  		bot.join(to_join);
  	}
});


// Or a quicker to match messages...
bot.matchMessage(/^hi/, function(event) {
	event.reply('hello there!');
});
~~~

#### Channel/buffer objects. Great for building clients
~~~javascript
var bot = new IRC.Client();
bot.connect({
	host: 'irc.freenode.net',
	port: 6667,
	nick: 'prawnsbot'
});

var buffers = [];
bot.on('registered', function() {
	var channel = bot.channel('#prawnsalad');
	buffers.push(channel);

	channel.join();
	channel.say('Hi!');

	channel.updateUsers(function() {
		console.log(channel.users);
	});

	// Or you could even stream the channel messages elsewhere
	var stream = channel.stream();
	stream.pipe(process.stdout);
});
~~~


#### Middleware
~~~javascript
function ExampleMiddleware() {
	return function(client, raw_events, parsed_events) {
		parsed_events.use(theMiddleware);
	}


	function theMiddleware(command, event, client, next) {
		if (command === 'registered') {
			if (client.options.nickserv) {
				var options = client.options.nickserv;
				client.say('nickserv', 'identify ' + options.account + ' ' + options.password);
			}
		}

		if (command === 'message' && client.caseCompare(event.event.nick, 'nickserv')) {
			// Handle success/retries/failures
		}

		next();
	}
}


var irc_bot = new IRC.Client();
irc_bot.use(ExampleMiddleware());
~~~
npm package: @koffeine/eslint-config
Description: Koffeine's ESLint shareable config
Author: Kornél Horváth
Latest version: 48.6.0

<h1>
	eslint-config
	<a href="https://www.npmjs.com/package/@koffeine/eslint-config"><img alt="npm" src="https://img.shields.io/npm/v/@koffeine/eslint-config"></a>
</h1>

Koffeine's ESLint shareable config

## Installation

```sh
npm install --save-dev @koffeine/eslint-config eslint
```

## Usage

Add the following to your `eslint.config.js` file:

```js
import koffeine from '@koffeine/eslint-config';

export default [
    ...koffeine
];
```
npm package: @koffeine/eslint-config-svelte
Description: Koffeine's ESLint shareable config for Svelte
Author: Kornél Horváth
Latest version: 2.4.0

<h1>
	eslint-config-svelte
	<a href="https://www.npmjs.com/package/@koffeine/eslint-config-svelte"><img alt="npm" src="https://img.shields.io/npm/v/@koffeine/eslint-config-svelte"></a>
</h1>

Koffeine's ESLint shareable config for Svelte

## Installation

```sh
npm install --save-dev @koffeine/eslint-config-svelte eslint svelte
```

## Usage

Add the following to your `eslint.config.js` file:

```js
import koffeineSvelte from '@koffeine/eslint-config-svelte';

export default [
    ...koffeineSvelte
];
```
npm package: @koffeine/eslint-config-vue
Description: Koffeine's ESLint shareable config for Vue.js
Author: Kornél Horváth
Latest version: 13.0.0

<h1>
	eslint-config-vue
	<a href="https://www.npmjs.com/package/@koffeine/eslint-config-vue"><img alt="npm" src="https://img.shields.io/npm/v/@koffeine/eslint-config-vue"></a>
</h1>

Koffeine's ESLint shareable config for Vue.js 3

## Installation

Use option `--save-exact` for npm install to make sure that eslint-plugin-vue and config rules match.

__Install config__

```sh
npm install @koffeine/eslint-config-vue --save-dev --save-exact
```

__Install eslint-plugin-vue__

Install the correct version of eslint-plugin-vue, which is listed by the command:

```sh
npm info @koffeine/eslint-config-vue peerDependencies
```

For example:

```sh
npm install eslint-plugin-vue@7.20.0 --save-dev --save-exact
```

## Usage

Add the following to your .eslintrc.js file:

```js
module.exports = {
    extends: '@koffeine/eslint-config-vue',
    plugins: [ 'vue' ],
    parser: 'vue-eslint-parser'
};
```

## License

Copyright © Kornél Horváth

Licensed under the [MIT License](https://raw.githubusercontent.com/koffeine/eslint-config-vue/master/LICENSE).
npm package: @koffeine/kss
Description: Koffeine's Style Sheets
Author: Kornél Horváth
Latest version: 4.4.2

<h1>
	kss
	<a href="https://www.npmjs.com/package/@koffeine/kss"><img alt="npm" src="https://img.shields.io/npm/v/@koffeine/kss"></a>
</h1>

Koffeine's Style Sheets

## Demo

[https://koffeine.github.io/kss/](https://koffeine.github.io/kss/)

## Installation

```sh
npm install @koffeine/kss
```

## Usage

```css
@import url(@koffeine/kss);
```
npm package: @koffeine/rollup-plugin-postcss
Description: Rollup plugin for PostCSS
Author: Kornél Horváth
Latest version: 1.3.2

<h1>
	rollup-plugin-postcss
	<a href="https://www.npmjs.com/package/@koffeine/rollup-plugin-postcss"><img alt="npm" src="https://img.shields.io/npm/v/@koffeine/rollup-plugin-postcss"></a>
</h1>

Rollup plugin for PostCSS

## What it does

- Transforms imported CSS files using PostCSS plugins
- Concatenates and extracts processed styles

## Features

- Sourcemap support
	- Only generates and saves sourcemap when requested by the configuration
	- Generates correct sourcemap file that traces back to the original imported file
	- Makes sources relative to cwd by default, but this can be overridden with a custom sourcemapPathTransform function

## Installation

```sh
npm install @koffeine/rollup-plugin-postcss postcss --save-dev
```

## Usage

```js
import postcss from '@koffeine/rollup-plugin-postcss';

export default {
	// ...
	plugins: [
		postcss({
			// which files should be processed by this plugin
			// type: regular expression, minimatch pattern or an array of regular expressions and minimatch patterns
			include: /\.css/u,

			// which files should not be processed by this plugin
			// type: regular expression, minimatch pattern or an array of regular expressions and minimatch patterns
			exclude: undefined,

			// whether or not to generate and save a sourcemap
			// type: boolean
			sourcemap: false,

			// transformation to apply to each source path in a sourcemap
			// type: (source: string, id: string) => string
			//     source: sourcemap source
			//     id: module id (as reported by Rollup)
			//     returns: transformed path
			sourcemapPathTransform: (source) => path.relative(process.cwd(), source),

			// which PostCSS plugins to use
			// type: array of PostCSS plugins
			plugins: [],

			// where to save the output file which is a Rollup asset relative to output.dir (required)
			// type: string
			output: undefined
		})
	]
	// ...
};
```

## License

Copyright © Kornél Horváth

Licensed under the [MIT License](https://raw.githubusercontent.com/koffeine/rollup-plugin-postcss/master/LICENSE).
npm package: @koffeine/rollup-plugin-sass-postcss
Description: Rollup plugin for Sass and PostCSS
Author: Kornél Horváth
Latest version: 2.1.1

<h1>
	rollup-plugin-sass-postcss
	<a href="https://www.npmjs.com/package/@koffeine/rollup-plugin-sass-postcss"><img alt="npm" src="https://img.shields.io/npm/v/@koffeine/rollup-plugin-sass-postcss"></a>
</h1>

Rollup plugin for Sass and PostCSS

## What it does

- Compiles imported Sass files and transforms those using PostCSS plugins
- Concatenates and extracts processed styles

## Features

- Uses the sass package
- Watches for changes in all Sass files loaded during compilation
- Sourcemap support
	- Only generates and saves sourcemap when requested by the configuration
	- Generates correct sourcemap file that traces back to the original imported file
	- Makes sources relative to cwd

## Installation

```sh
npm install @koffeine/rollup-plugin-sass-postcss sass postcss --save-dev
```

## Usage

```js
import sassPostcss from '@koffeine/rollup-plugin-sass-postcss';

export default {
	// ...
	plugins: [
		sassPostcss({
			// which files should be processed by this plugin
			// type: regular expression, minimatch pattern or an array of regular expressions and minimatch patterns
			include: [ /\.sass/u, /\.scss/u ],

			// which files should not be processed by this plugin
			// type: regular expression, minimatch pattern or an array of regular expressions and minimatch patterns
			exclude: undefined,

			// whether or not to generate and save a sourcemap
			// type: boolean
			sourcemap: false,

			// which PostCSS plugins to use
			// type: array of PostCSS plugins
			plugins: [],

			// where to save the output file which is a Rollup asset relative to output.dir (required)
			// type: string
			output: undefined
		})
	]
	// ...
};
```

## License

Copyright © Kornél Horváth

Licensed under the [MIT License](https://raw.githubusercontent.com/koffeine/rollup-plugin-sass-postcss/master/LICENSE).
npm package: @koffeine/svelte-router
Description: Router for Svelte
Author: Kornél Horváth
Latest version: 6.0.5

<h1>
    svelte-router
    <a href="https://www.npmjs.com/package/@koffeine/svelte-router"><img alt="npm" src="https://img.shields.io/npm/v/@koffeine/svelte-router"></a>
</h1>

Router for Svelte 5

## Demo

[https://koffeine.github.io/svelte-router/](https://koffeine.github.io/svelte-router/)

## Installation

```sh
npm install @koffeine/svelte-router
```

## Usage

[`App.svelte`](https://github.com/koffeine/svelte-router/blob/main/demo/App.svelte):

```html
<script>
import { init, navigate, route, link } from '@koffeine/svelte-router';

/** @type {import('@koffeine/svelte-router').Route[]} */
const routes = [
    // Route with component
    { path: '/welcome/:name', component: () => import('./Welcome.svelte') },

    // Route with redirect
    { path: '*', redirect: '/welcome/unknown' }
];

// Initialize router
init(
    routes,
    {
        // Base url, defaults to ''
        baseUrl: import.meta.env.BASE_URL
    }
);
</script>

<!-- API navigation & using route.path -->
<div>
    <!-- Without params -->
    <button type="button" disabled={route.path === '/welcome/john'} onclick={() => navigate('/welcome/john')}>Welcome John</button>

    <!-- With params -->
    <button type="button" disabled={route.path === '/welcome/jane'} onclick={() => navigate('/welcome/:name', { params: { name: 'jane' } })}>Welcome Jane</button>
</div>

<!-- Anchor navigation & using route.path -->
<div>
    <!-- Without params -->
    <a href="/welcome/john" {@attach link()} class:active={route.path === '/welcome/john'}>Welcome John</a>
    |
    <!-- With params -->
    <a href="/welcome/:name" {@attach link({ params: { name: 'jane' } })} class:active={route.path === '/welcome/jane'}>Welcome Jane</a>
</div>

<!-- Router outlet -->
<route.component {...route.params} />
```

[`Welcome.svelte`](https://github.com/koffeine/svelte-router/blob/main/demo/Welcome.svelte):

```html
<script>
import { navigate, route, link } from '@koffeine/svelte-router';

// Param
/** @type {{ name: string }} */
const { name } = $props();

// Query param
const numbers = $derived([ 1, 2, 3 ].sort((a, b) => (a - b) * (route.query.order === 'desc' ? -1 : 1)));
const query = $derived({ order: route.query.order === 'desc' ? 'asc' : 'desc' });
</script>

<h1>Welcome, {name[0].toUpperCase() + name.slice(1)}!</h1>

Numbers:

<ul>
    {#each numbers as number (number)}
        <li>{number}</li>
    {/each}
</ul>

<!-- API navigation using current path, changing only query params -->
<button type="button" onclick={() => navigate(route.path, { query })}>Reverse</button>

<!-- Anchor navigation using current path, changing only query params -->
<a href={route.path} {@attach link({ query })}>Reverse</a>
```

## API

[Go to declaration](https://github.com/koffeine/svelte-router/blob/main/src/index.d.ts)
npm package: @koficypher/meetup
Description: A NodeJS SDK for interacting with meetup.com's api
Author: Kofi Cypher
Latest version: 1.0.1

[![Known Vulnerabilities](https://snyk.io/test/github/koficypher/meetup/badge.svg?targetFile=package.json)](https://snyk.io/test/github/koficypher/meetup?targetFile=package.json)

# Meetup NodeJS SDK
A NodeJS SDK for [Meetup](https://meetup.com)'s [API](https://www.meetup.com/meetup_api/) Version 2

Authentication as at this version only supports API key authentication. Future releases may support OAuth2
authentication.

>Not complete yet, more features to come..

## Features
1. Get all upcoming meetups for a specified `GROUP_URLNAME`

## Installation
- Run :
`npm install @koficypher/meetup --save`

- Create a `.env` file and specify your `API_KEY` ,  `GROUP_URLNAME` and specify the V2 api url
  `API_URL =https://api.meetup.com/2`
- Require it in your file like so: 
  ```js
  const meetup = require('@koficypher/meetup')

  //initialize meetup class

  const meetups = new meetup()

  /** result returns a promise so console log it to see it */
  meetups.getUpcoming().then(data => {
     console.log(data);
  });
  ```



## Want to Collaborate ?
Kindly send me an email [koficypher](mailto:skcypher6@gmail.com)

## Licence
The project is licenced under the MIT licence

## Security Issues
Please email all security issues to [koficypher](mailto:skcypher6@gmail.com)
npm package: @koficypher/spektra
Description: [![Build Status](https://travis-ci.org/koficypher/spektra.svg?branch=master)](https://travis-ci.org/koficypher/spektra)
Author: Kofi Cypher
Latest version: 1.0.0

# Spektra Pay 
[![Build Status](https://travis-ci.org/koficypher/spektra.svg?branch=master)](https://travis-ci.org/koficypher/spektra)

Spektra Pay is the unofficial Javascript SDK for [Spektra](https://spektra.co) payment platform.
It takes a [Promise](https://medium.com/@PangaraWorld/an-introduction-to-understanding-javascript-promises-37eff85b2b08) based or [Async Await](https://medium.com/javascript-in-plain-english/async-await-javascript-5038668ec6eb) approach. Its been made to be very simple and easy to use.

## Installation
 - First head over to [https://spektra.co](https://spektra.co) to create an account. Submit all relevant documents to be able  to go live.
 - Head over to your dashboard and to the developers page. Generate new public and secret keys and or copy the existing ones over to your project.
 - Install the SDK by typing `npm install @koficypher/spektra`
 - In your project create a `.env` file and place it in your project's base path. We have a sample
 `.env.example` in this repo for you to take a look at.
 - In your `.env` file update the `PUBLIC_KEY` AND `SECRET_KEY` accordingly
 - You are now ready to recieve payments.

 ## Usage
 Using this SDK is very simple. To get started you have to require and instantiate it like so:
 ```javascript
  const Spektra = require('@koficypher/spektra')

  const Pay = new Spektra();
 ```
npm package: @kofno/cute
Description: Immutable Stacks and Deques and such
Author: Ryan L. Bell
Latest version: 2.5.0

# Cute

[![Build Status](https://travis-ci.org/kofno/cute.svg?branch=master)](https://travis-ci.org/kofno/cute)
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=plastic)](https://github.com/semantic-release/semantic-release)

Implementations of immutable Stacks and Deques for various use cases.

Compatible with Maybeasy and CooperTS.

## Install

```
> npm install --save @kofno/cute

> yarn add @kofno/cute
```

### [API](docs/api/index.md)
npm package: @kofno/gaia
Description: Safely read values from your environment
Author: Ryan L. Bell
Latest version: 2.8.1

# Gaia

[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=plastic)](https://github.com/semantic-release/semantic-release)

Read variables from the environment in a typesafe way.

Compatible with Maybeasy, Resulty, and Taskarian
npm package: @kofno/piper
Description: Tools for functional composition
Latest version: 5.0.1

# Piper

[![Build Status](https://travis-ci.org/kofno/piper.svg?branch=master)](https://travis-ci.org/kofno/piper)

Functional composition in Typescript

_pipe_ is pretty much strait-up stolen from [RxJS](https://github.com/ReactiveX/rxjs/blob/f8a9d6e52f6ab151d08da0e7424f64f70763c830/src/internal/util/pipe.ts)

Also, I wanted to release a library named after my cat. She is glorious.
npm package: @kofno/stack-ts
Description: Typescript based immutable stack
Author: Ryan L. Bell
Latest version: 2.5.0

# Stack

[![Build Status](https://travis-ci.org/kofno/stack-ts.svg?branch=master)](https://travis-ci.org/kofno/stack-ts)
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=plastic)](https://github.com/semantic-release/semantic-release)

An implementation of an immutable Stack data structure.

Compatible with Maybeasy.

## Install

```
> npm install --save @kofno/stack-ts

> yarn add @kofno/stack-ts
```

### [API](docs/api/index.md)
npm package: @kofoworolaaa/oak-pupil-client-test
Description: React Client for Oak Pupil API
Latest version: 1.3.0

# Oak Pupil Client

![License: MIT](https://img.shields.io/badge/license-MIT-brightgreen)

The Pupil Client is a React TypeScript client to interface with the [Oak Pupil API](https://github.com/oaknational/oak-pupil-api).

## Installation

To integrate the Oak Pupil Client into your project, you will need React 18 later. Install the package using NPM or your preferred package manager:

```bash
npm i @oaknational/oak-pupil-client
```

## Usage

### Setting up the client

Wrap your app with the provider

```tsx
import { OakPupilClientProvider } from "@oaknational/oak-pupil-client";

export const MyView = ({ children }: { children: React.ReactNode }) => {
  return (
    <OakPupilClientProvider
      config={{
        getLessonAttemptUrl: "https://example.com/get-lessom-attempt",
        logLessonAttemptUrl: "http://example.com/log-lesson-attempt",
      }}
    >
      {children}
    </OakPupilClientProvider>
  );
};
```

### Using the Hook

For components that need to interact with the state, the useOakPupil hook can be utilised. This hook provides access to the current state, allowing users to log and retrieve lesson attempts.

```tsx
import { useOakPupil } from "@oaknational/oak-pupil-client";

function MyComponent() {
  const { state } = useOakPupil();

  useEffect(() => {
    if (requiresInteraction) {
      showCookieBanner(); // you're expected to handle any UI and its associated state
    }
  }, [requiresInteraction]);
}
```

## External Contributions

### Security and Bug Bounty

Please see our [security.txt](public/.well-known/security.txt) file.

### Contributing to the Code

While the Oak Pupil Client is currently not open for direct contributions, we encourage you to report any issues or suggest enhancements through the GitHub issue tracker. Your feedback is invaluable in making this tool more effective for developers.

## Open Source Acknowledgements

As with all web projects we are dependent on open source libraries maintained by others. While it is not practical to acknowledge them all, we would nevertheless like to express our gratitude for the contributions and efforts of the OSS community. Our dependency list can be found in our [package.json](package.json) file.

## License

Unless stated otherwise, the codebase is released under the [MIT License][mit]. This covers both the codebase and any sample code in the documentation. Where any Oak National Academy trademarks or logos are included, these are not released under the [MIT License][mit], and should be used in line with [Oak National Academy brand guidelines][brand].

Any documentation included is © [Oak National Academy][oak] and available under the terms of the [Open Government Licence v3.0][ogl], except where otherwise stated.

[mit]: LICENCE
[oak]: https://www.thenational.academy/
[ogl]: https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/
[brand]: https://support.thenational.academy/using-the-oak-brand
npm package: @koga73/file-drop
Description: A simple library to enable client-side file uploads via drag-and-drop or click
Author: AJ Savino
Latest version: 1.0.0

# file-drop

A simple library to enable client-side file uploads via drag-and-drop or click

Include file-drop.css and file-drop.js

```html
<div id="fileDropContainer">
	<input type="file" accept=".json" multiple />
</div>
```

```js
var fileDrop = new FileDrop(document.getElementById("fileDropContainer"));
fileDrop.addEventListener(FileDrop.EVENT_FILE, function(evt) {
	console.log(evt.detail); //evt.detail is the FileList
	console.log("Use a FileReader on the files");
});
```

## IE11 Support

Add this polyfill for CustomEvent in IE11

```html
<!-- CustomEvent polyfill for IE11 -->
<script>
	(function() {
		if (typeof window.CustomEvent === "function") return false; //If not IE

		function CustomEvent(event, params) {
			params = params || {bubbles: false, cancelable: false, detail: undefined};
			var evt = document.createEvent("CustomEvent");
			evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
			return evt;
		}

		CustomEvent.prototype = window.Event.prototype;

		window.CustomEvent = CustomEvent;
	})();
</script>
```
npm package: @koga73/object-fit-polyfill
Description: Simple polyfill for object-fit by converting img to background-image
Author: AJ Savino
Latest version: 1.1.2

# object-fit-polyfill
Simple polyfill for object-fit by converting img to background-image

## Install:
``` bash
npm i @koga73/object-fit-polyfill
```

Markup:
```html
<picture>
	<source srcset="http://via.placeholder.com/1920x1080" media="(orientation:landscape)"/>
	<source srcset="http://via.placeholder.com/1080x1920" media="(orientation:portrait)"/>
	<img src="http://via.placeholder.com/1920x1080" data-object-fit>
</picture>
<script src="../src/object-fit-polyfill.js"></script>
```

Styles:
```css
picture {
	display:block;
	width:100%;
	height:100%;
	background-size:cover;
	background-position:center center;
}

/* Image gets hidden when needed */
img {
	display:block;
	width:100%;
	height:100%;
	object-fit:cover;
}
```
npm package: @kogai/angular-mock-generator
Description: `Anuglar.js 1.x`を用いたアプリケーションのテストのためにAPIレスポンスのモックを生成するライブラリ
Latest version: 0.1.10

`Anuglar.js 1.x`を用いたアプリケーションのテストのためにAPIレスポンスのモックを生成するライブラリ

## 目的

APIレスポンスを模したオブジェクトから、`Angular.js`/`Node.js`のモジュールシステムでそれぞれ使用できるモックを生成する  
`Angular.js`の`Value Service`として生成され、ベースとなったファイルへのパスから`Service`としての名前を`camelCase`で決定する

```js
// /path/to/base/file/my-file.js
// こういうオブジェクトから...
module.exports = {
  foo: 'bar'
};

// Angular.jsのモジュールとして直接ブラウザに読み込ませるためのモック
// /path/to/base/file/my-file.angular.js として生成される
angular.module('httpBackendMock').value('pathToBaseFile', {
  "foo": "bar"
});

// ProtractorのaddMockModuleメソッドに追加するためのモック
// /path/to/base/file/my-file.node.js として生成される
module.exports = function() {
  angular.module('httpBackendMock').value('pathToBaseFile', {
    "foo": "bar"
  });
};
```

## 使い方

CLIツールとして使用する。  
第一引数に設定ファイルを渡すことで、モックモジュールの生成元となるファイルを指定する

設定ファイルには以下の3つのパラメータがある  
※このレポジトリでは`mock.conf.js`というファイル名になっているが、ファイル名の指定は無い

```js
module.exports = {
  // Aungular.jsのモジュールシステムにおけるモジュールの名前を指定する
  moduleName: 'httpBackendMock',

  // globパターンでモックモジュールの生成元となるファイル郡を指定する
  files: [
    'sample/*.js',
    'sample/**/*.js',
  ],

  // デバッグモードをオンにすると、どんなファイルが生成されるか標準出力で確認できる
  isDebug: false,
};
```