# @phucbm/os-util

> Utility functions for open-source projects.

Latest version **0.0.5** (published 2023-08-04) · MIT license · 0 weekly downloads

## Install

```sh
npm install @phucbm/os-util
pnpm add @phucbm/os-util
yarn add @phucbm/os-util
bun add @phucbm/os-util
```

## Health

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

Positive: no vulnerabilities.

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

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.5 |
| Published | 2023-08-04 |
| First published | 2023-07-10 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 10.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | phucbm |
| Maintainers | phucbui96 |
| Keywords | phucbm, javascript, es6, open-source |

## Links

- npm: https://www.npmjs.com/package/@phucbm/os-util
- Repository: https://github.com/phucbm/os-util
- Issues: https://github.com/phucbm/os-util/issues
- npm.io page: https://npm.io/package/@phucbm/os-util

## Alternatives

- [jsforce](https://npm.io/package/jsforce.md) — 851.2K weekly downloads
- [react-native-qrcode-svg](https://npm.io/package/react-native-qrcode-svg.md) — 693.5K weekly downloads
- [@salesforce/plugin-data](https://npm.io/package/@salesforce/plugin-data.md) — 394.9K weekly downloads
- [@backstage/plugin-search-common](https://npm.io/package/@backstage/plugin-search-common.md) — 308.5K weekly downloads
- [@chain-registry/types](https://npm.io/package/@chain-registry/types.md) — 38.4K weekly downloads

## Recent versions

- 0.0.5 (latest) — 2023-08-04
- 0.0.4 — 2023-07-26
- 0.0.3 — 2023-07-26
- 0.0.2-3 — 2023-07-10
- 0.0.2-2 — 2023-07-10
- 0.0.2-1 — 2023-07-10
- 0.0.2 — 2023-07-10
- 0.0.1 — 2023-07-10

## README

# OS Util

https://www.npmjs.com/package/@phucbm/os-util

## Install

```shell
# Install
npm i @phucbm/os-util
```

## Features

### Get options from attribute

```js
import {getOptionsFromAttribute} from "@phucbm/os-util";
```

#### 1. Test cases for boolean and numeric values

```html

<section data-json='{"testNum":"480", "testFalse":"false", "testTrue":"true"}'>
</section>
```

```js
const options = getOptionsFromAttribute({
    target: document.querySelector('section'), // required, DOM element that holds the attribute
    attributeName: 'data-json', // required, attribute name that holds the value
    numericValues: ['testNum'], // optional, the props will be converted into numeric values
    defaultOptions: {}, // optional, options from attribute will override these default options, 
    // or return defaultOptions if options are not found
});
console.log(options); // => {"testNum": 480, "testFalse": false, "testTrue": true};
```

#### 2. Empty value

```html

<section data-json></section>
```

```js
const options = getOptionsFromAttribute({
    target: document.querySelector('section'),
    attributeName: 'data-json',
});
console.log(options); // => {}
```

#### 3. Value is just a string

```html

<section data-json="hello-world"></section>
```

```js
const options = getOptionsFromAttribute({
    target: document.querySelector('section'),
    attributeName: 'data-json',
    onIsString: value => {
        console.log(value); // => "hello-world"
    }
});
console.log(options); // => {}
```

### Events Manager

```js
import {EventsManager} from "@phucbm/os-util";
```

In your plugin constructor

```js
// init events manager
this.events = new EventsManager(this, {
    names: ['onInit'] // register event names
});

// fire an event
this.events.fire('onInit', {source}); // the 2nd param is an object that will be passed to the callback
```

Create a method to assign late-events

```js
/**
 * Assign late-events
 */
function on(eventName, callback){
    this.events.add(eventName, callback);
}
```

Usage

```js
// add event from init
const instance = Plugin.init({
    onInit: data => {
        console.log('init', data)
    }
});

// add via method after init
instance.on('onInit', data => {
    console.log('init', data)
});

// with or without keyword on before the event name are all acceptable
instance.on('init', data => {
    console.log('init', data)
});
```

## Deployment

```shell
# Publish package
# 1. Export the new function in index.js
# 2. Update version in package.json
# 3. Run publish
npm publish

# Dev
npm run dev
```

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