forked from FINAKON/HelpProject
1. Initial Commit - a boiler plate code and POC to realize the concept of context sensitive help 2. Frontend code written in ReactJS 3. Backend code written in Java, Spring Boot Framework 4. Frontend Start: pre-requisites : node, npm npm run dev ==> to start the frontend vite server 5. Backend Start: pre-requisites : java, mvn mvn spring-boot:run ==> to start the backend server 6. Visit http://localhost:5173/ for basic demo of help, press F1 in textboxes 7. Visit http://localhost:5173/editor and enter "admin123" to add/modify texts. Happy Coding !!! Thank you, Bhargava.
227 lines
4.8 KiB
Markdown
227 lines
4.8 KiB
Markdown
# zwitch
|
||
|
||
[![Build][build-badge]][build]
|
||
[![Coverage][coverage-badge]][coverage]
|
||
[![Downloads][downloads-badge]][downloads]
|
||
[![Size][size-badge]][size]
|
||
|
||
Handle values based on a field.
|
||
|
||
## Contents
|
||
|
||
* [What is this?](#what-is-this)
|
||
* [When should I use this?](#when-should-i-use-this)
|
||
* [Install](#install)
|
||
* [Use](#use)
|
||
* [API](#api)
|
||
* [`zwitch(key[, options])`](#zwitchkey-options)
|
||
* [`one(value[, rest…])`](#onevalue-rest)
|
||
* [`function handler(value[, rest…])`](#function-handlervalue-rest)
|
||
* [Types](#types)
|
||
* [Compatibility](#compatibility)
|
||
* [Related](#related)
|
||
* [Contribute](#contribute)
|
||
* [Security](#security)
|
||
* [License](#license)
|
||
|
||
## What is this?
|
||
|
||
This is a tiny package that lets you `switch` between some field on objects.
|
||
|
||
## When should I use this?
|
||
|
||
This package is very useful when mapping one AST to another.
|
||
It’s a lot like a `switch` statement on one field, but it’s extensible.
|
||
|
||
## Install
|
||
|
||
This package is [ESM only][esm].
|
||
In Node.js (version 14.14+, 16.0+), install with [npm][]:
|
||
|
||
```sh
|
||
npm install zwitch
|
||
```
|
||
|
||
In Deno with [`esm.sh`][esmsh]:
|
||
|
||
```js
|
||
import {zwitch} from 'https://esm.sh/zwitch@2'
|
||
```
|
||
|
||
In browsers with [`esm.sh`][esmsh]:
|
||
|
||
```html
|
||
<script type="module">
|
||
import {zwitch} from 'https://esm.sh/zwitch@2?bundle'
|
||
</script>
|
||
```
|
||
|
||
## Use
|
||
|
||
```js
|
||
import {zwitch} from 'zwitch'
|
||
|
||
const handle = zwitch('type', {invalid, unknown, handlers: {alpha: handleAlpha}})
|
||
|
||
handle({type: 'alpha'})
|
||
|
||
function handleAlpha() { /* … */ }
|
||
```
|
||
|
||
Or, with a `switch` statement:
|
||
|
||
```js
|
||
const field = 'type'
|
||
|
||
function handle(value) {
|
||
let fn = invalid
|
||
|
||
if (value && typeof value === 'object' && field in value) {
|
||
switch (value[field]) {
|
||
case 'alpha':
|
||
fn = handleAlpha
|
||
break
|
||
default:
|
||
fn = unknown
|
||
break
|
||
}
|
||
}
|
||
|
||
return fn.apply(this, arguments)
|
||
}
|
||
|
||
handle({type: 'alpha'})
|
||
|
||
function handleAlpha() { /* … */ }
|
||
function unknown() { /* … */ }
|
||
function invalid() { /* … */ }
|
||
```
|
||
|
||
## API
|
||
|
||
This package exports the identifier `zwitch`.
|
||
There is no default export.
|
||
|
||
### `zwitch(key[, options])`
|
||
|
||
Create a switch, based on a `key` (`string`).
|
||
|
||
##### `options`
|
||
|
||
Options can be omitted and added later to `one`.
|
||
|
||
###### `options.handlers`
|
||
|
||
Handlers to use, stored on `one.handlers` (`Record<string, Function>`,
|
||
optional).
|
||
|
||
###### `options.unknown`
|
||
|
||
Handler to use for unknown values, stored on `one.unknown` (`Function`,
|
||
optional).
|
||
|
||
###### `options.invalid`
|
||
|
||
Handler to use for invalid values, stored on `one.invalid` (`Function`,
|
||
optional).
|
||
|
||
###### Returns
|
||
|
||
See [`one`][one] (`Function`).
|
||
|
||
### `one(value[, rest…])`
|
||
|
||
Handle one value.
|
||
Based on the bound `key`, a respective handler will be called.
|
||
If `value` is not an object, or doesn’t have a `key` property, the special
|
||
“invalid” handler will be called.
|
||
If `value` has an unknown `key`, the special “unknown” handler will be called.
|
||
|
||
All arguments, and the context object (`this`), are passed through to the
|
||
[handler][], and it’s result is returned.
|
||
|
||
###### `one.handlers`
|
||
|
||
Map of [handler][]s (`Record<string, Function>`).
|
||
|
||
###### `one.invalid`
|
||
|
||
Special [`handler`][handler] called if a value doesn’t have a `key` property.
|
||
If not set, `undefined` is returned for invalid values.
|
||
|
||
###### `one.unknown`
|
||
|
||
Special [`handler`][handler] called if a value does not have a matching
|
||
handler.
|
||
If not set, `undefined` is returned for unknown values.
|
||
|
||
### `function handler(value[, rest…])`
|
||
|
||
Handle one value.
|
||
|
||
## Types
|
||
|
||
This package is fully typed with [TypeScript][].
|
||
It exports the types `Handler`, `UnknownHandler`, `InvalidHandler`, and
|
||
`Options`.
|
||
|
||
## Compatibility
|
||
|
||
This package is at least compatible with all maintained versions of Node.js.
|
||
As of now, that is Node.js 14.14+ and 16.0+.
|
||
It also works in Deno and modern browsers.
|
||
|
||
## Related
|
||
|
||
* [`mapz`](https://github.com/wooorm/mapz)
|
||
— functional map
|
||
|
||
## Contribute
|
||
|
||
Yes please!
|
||
See [How to Contribute to Open Source][contribute].
|
||
|
||
## Security
|
||
|
||
This package is safe.
|
||
|
||
## License
|
||
|
||
[MIT][license] © [Titus Wormer][author]
|
||
|
||
<!-- Definitions -->
|
||
|
||
[build-badge]: https://github.com/wooorm/zwitch/workflows/main/badge.svg
|
||
|
||
[build]: https://github.com/wooorm/zwitch/actions
|
||
|
||
[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/zwitch.svg
|
||
|
||
[coverage]: https://codecov.io/github/wooorm/zwitch
|
||
|
||
[downloads-badge]: https://img.shields.io/npm/dm/zwitch.svg
|
||
|
||
[downloads]: https://www.npmjs.com/package/zwitch
|
||
|
||
[size-badge]: https://img.shields.io/bundlephobia/minzip/zwitch.svg
|
||
|
||
[size]: https://bundlephobia.com/result?p=zwitch
|
||
|
||
[npm]: https://docs.npmjs.com/cli/install
|
||
|
||
[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
|
||
|
||
[esmsh]: https://esm.sh
|
||
|
||
[typescript]: https://www.typescriptlang.org
|
||
|
||
[contribute]: https://opensource.guide/how-to-contribute/
|
||
|
||
[license]: license
|
||
|
||
[author]: https://wooorm.com
|
||
|
||
[one]: #onevalue-rest
|
||
|
||
[handler]: #function-handlervalue-rest
|