Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cheton/common-utility-libraries
Common utility libraries used in my projects
https://github.com/cheton/common-utility-libraries
Last synced: 10 days ago
JSON representation
Common utility libraries used in my projects
- Host: GitHub
- URL: https://github.com/cheton/common-utility-libraries
- Owner: cheton
- License: mit
- Created: 2017-09-09T06:16:09.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2018-10-16T10:25:39.000Z (about 6 years ago)
- Last Synced: 2024-10-30T00:00:12.207Z (20 days ago)
- Language: JavaScript
- Homepage:
- Size: 28.3 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Common Utility Libraries
### AsyncAction
[AsyncAction.js](src/AsyncAction.js)```js
const timeout = (ms) => new Promise((resolve, reject) => {
setTimeout(() => reject(new Error(`Timeout exceeded: ${ms}ms`)), ms);
});const asyncActions = [
new AsyncAction(),
new AsyncAction(),
new AsyncAction()
];
const asyncPromises = asyncActions.map(action => action.promise);const main = async () => {
try {
const result = await Promise.race([
timeout(2000),
Promise.all(asyncPromises)
]);
} catch (e) {
console.log('Timedout:');
} finally {
for (let i = 0; i < asyncActions.length; ++i) {
const { pending, fulfilled, rejected } = asyncActions[i];
console.log(`- ${i}: pending=${pending}, fulfilled=${fulfilled}, rejected=${rejected}`);
}
}
};setTimeout(() => asyncActions[0].resolve(), 1000);
setTimeout(() => asyncActions[1].reject(), 1500);main();
```**Output**
```js
// → Timedout:
// → - 0: pending=false, fulfilled=true, rejected=false
// → - 1: pending=false, fulfilled=false, rejected=true
// → - 2: pending=true, fulfilled=false, rejected=false
```### Chained Function
[chained-function.js](src/chained-function.js)```js
React.Children.map(this.props.children, child => {
if (!React.isValidElement(child)) {
return child;
}
return React.cloneElement(child, {
...child.props,
onClick: chainedFunction(
child.props.onClick,
this.handleClick
)
});
});
```### CSS
[css.js](src/css.js)```js
css.stringify({
lineHeight: 2,
padding: '2px 0',
color: '#3B5998',
background: '#EDEFF4'
});
// → 'line-height:2px;padding:2px 0;color:#3B5998;background:#EDEFF4;'
```### DOM Events
[dom-events.js](src/dom-events.js)```js
const onClick = (event) => {
preventDefault(event);
stopPropagation(event);
};addEventListener(target, 'click', onClick);
removeEventListener(target, 'click', onClick);
```### Ensure Array
[ensure-array.js](src/ensure-array.js)### Ensure Positive Number
[ensure-positive-number.js](src/ensure-positive-number.js)### Event Emitter Store
[EventEmitterStore.js](src/EventEmitterStore.js)```js
const store = new EventEmitterStore({
widget: {
console: {
minimized: false,
lines: []
}
}
});store.on('change', (state) => {
// Listen for changes
});store.set('widget.console.minimized', true);
store.get('widget.console.minimized', false /* defaultValue */);
store.replace('widget.console.lines', ['line 1', 'line 2', 'line 3']);
```### Extend
[extend.js](src/extend.js)### Get
[get.js](src/get.js)#### Log
[log.js](src/log.js)See [universal-logger](https://github.com/cheton/universal-logger) and [universal-logger-browser](https://github.com/cheton/universal-logger-browser) for details.
```js
log.setLevel(TRACE);
log.log(INFO, 'The logger has initialized');
log.trace(emoji.get('mostly_sunny'));
log.debug(emoji.get('sun_small_cloud'));
log.info(emoji.get('barely_sunny'));
log.warn(emoji.get('rain_cloud'));
log.error(emoji.get('lightning_cloud'));
```![image](https://cloud.githubusercontent.com/assets/447801/25939476/96bd5568-3665-11e7-9b6f-b96fe0dc73d8.png)
### Fisher Yates Shuffle
[fisherYatesShuffle.js](src/fisherYatesShuffle.js)```js
const cards = ['C', 'D', 'H', 'S'].reduce((acc, suit) => {
return acc.concat(['A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'].map(card => String(card) + suit));
}, []);fisherYatesShuffle(cards);
```### Match Balanced Parentheses
[match-balanced-parentheses][src/match-balanced-parentheses.js]### Normalize Range
[normalize-range.js](src/normalize-range.js)### Numeral
[numeral.js](src/numeral.js)### Portal
[portal.jsx](src/portal.jsx)```jsx
import chainedFunction from 'chained-function';portal(({ onClose }) => (
{'Delete Account'}
{'Are you sure you want to delete this account?'}
{'No'}
{
action.deleteAccount(id);
},
onClose
)}
>
{'Yes'}
));
```### Promise Series
[promise-series.js](src/promise-series.js)```js
import series from './promise-series';const sleep = (fn, timeout) => new Promise(resolve => {
setTimeout(() => {
fn();
resolve();
}, timeout);
});series([
() => sleep(() => console.log(Date.now()), 1000),
() => sleep(() => console.log(Date.now()), 2000)
]).then(() => {
console.log('Completed');
}).catch(err => {
console.error(err);
});
```**Output**
```js
// → 1510307749306
// → 1510307751318
// → Completed
```### Promisify
[promisify.js](src/promisify.js)```js
async sync(source, target) {
try {
const content = await promisify(fs.readFile)(`${source}/package.json`, 'utf8');
const pkg = JSON.parse(content);
await promisify(fs.writeFile)(`${target}/package.json`, JSON.stringify(pkg, null, 4), 'utf8');
} catch (err) {
console.error(err);
}
}
``````js
async refresh() {
const fetchPorts = promisify(controller.getPorts, { errorFirst: true, thisArg: controller });
const fetchBaudRates = promisify(controller.getBaudRates, { errorFirst: false, thisArg: controller });
try {
const ports = await fetchPorts();
const baudRates = await fetchBaudRates();
console.log('Ports:', ports);
console.log('Baud rates:', baudRates);
} catch(err) {
console.error(err);
}
}
```### Random IP
[random-ip.js](src/random-ip.js)```js
> randomip('0.0.0.0');
// → '108.52.74.162'
> randomip('10.0.0.0');
// → '10.102.167.63'
> randomip('10.1.0.0');
// → '10.1.105.93'
> randomip('172.16.0.0');
// → '172.16.130.7'
```### Random Mac
[random-mac.js](src/random-mac.js)```js
> randommac();
// → '54:52:00:d5:7d:ca'
> randommac();
// → '54:52:00:f7:b4:08'
> randommac('10:FE:90');
// → '10:FE:90:b9:90:76'
```### Reset Context
[reset-context.styl](src/reset-context.styl)```css
@import "./reset-context";.container {
reset-context();
}
```**Recommended Readings**
* https://www.paulirish.com/2012/box-sizing-border-box-ftw/
* https://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/### Resize Observer
[ResizeObserver.js](src/ResizeObserver.js)```js
new ResizeObserver(() => {
// Callback
}).observe(document.body);
```### Short ID
[shortid.js](src/shortid.js)### Split Component Props
[split-component-props.js](src/split-component-props.js)### Trim
[trim.js](src/trim.js)### Unique ID
[uniqueid.js](src/uniqueid.js)### Units
[units.js](src/units.js)