kostil.js
@Maxim Shastsel
@Uladzimir Halushka
What is kostil.js?
It's like lodash but for the next level of JS.
1
Our motivation
To simplify the solution of typical problems
License
Licensed under WTFPL license
How to install
npm i --save kostil.js
via NPM
Then add a <script> to your index.html:
<script src="/node_modules/kostil.js/dist/kostil.js"></script>
Or import 'kostil.js' from your code.
Case #1
<!doctype html>
<html lang="en">
<head>
<title>Case #1</title>
<script src="app.bundle.js"></script>
</head>
<body>
<button>Click</button>
</body>
</html>
const button = document.querySelector('button');
button.addEventListener('click', () => console.log('clicked'));
Solution
import fix from 'kostil.js';
fix(() => {
const button = document.querySelector('button');
button.addEventListener('click', () => console.log('clicked'));
});
Implementation
export default function fix (f) {
return setTimeout(f, 0);
}
Case #2
import { myNewAwesomePromiseBasedService } from './services';
function oldStyleCallback (err, res) {
//...
}
myNewAwesomePromiseBasedService()
.then()
.catch()
Solution
import { callbackotify } from 'kostil.js';
import { myNewAwesomePromiseBasedService } from './service';
function oldStyleCallback (err, res) {
//...
}
const awesome = callbackotify(myNewAwesomePromiseBasedService);
awesome(oldStyleCallback);
OVER backward compatibility
Case #3
const code = 'var x = 5;';
eval(code);
Solution
import { safeEval } from 'kostil.js'
const code = 'var x = 5;';
safeEval(code);
Implementation
export function safeEval (code) {
'use strict';
try {
'use strict';
eval('\'use strict;\'' + code);
} catch (e) {
console.error('Script evaluation error! \n', e);
}
}
Safety
Case #4
GET api/method?deviceCode=1&isWifiSecure=yes
Solution
import { makeUnderstandableBoolean } from 'kostil.js';
console.log(makeUnderstandableBoolean(true)); // logs "yes"
console.log(makeUnderstandableBoolean(false)); // logs "no"
Bad API architecture
Case #5
function uid (l) {
const id = Math.random().toString(35).substr(2, l);
let result = '';
for (let i = 0; i < l; i++) {
result += Math.random() > 0.5 ? id[i].toUpperCase() : id[i];
}
return result;
}
// sometimes throws exception :(
const id = uid(5);
Solution
import { tryHard } from 'kostil.js';
function uid () {
const length = 5;
const id = Math.random().toString(35).substr(2, length);
let result = '';
for (let i = 0; i < length; i++) {
result += Math.random() > 0.5 ? id[i].toUpperCase() : id[i];
}
return result;
}
// works OK
const id = tryHard(uid);
Implementation
export function tryHard (f) {
while (true) {
try {
return f();
} catch (e) {
console.log('Try harder!');
}
}
}
Masking the problem isn't a solution
Case #6
form
input
button
How do i submit the form?
Solution
import { submitForm } from 'kostil.js';
const form = document.querySelector('form');
const button = document.querySelector('button');
submitForm(form, button);
Implementation
/**
* Submits your form if you don't know about type="submit"
* @param form
* @param button
*/
export function submitForm (form, button) {
return button.addEventListener('click', (e) => {
e.preventDefault();
form.submit()
});
}
Case #7
I can't inject NODE_ENV into the app, how can i check if app running is production?
Solution
import { isProduction } from 'kostil.js';
console.log(isProduction());
Implementation
/**
* Checks self length to understand is app in prod mode or not
* @returns {boolean}
*/
export function isProduction () {
return isProduction.toString().length < 75;
}
Case #8
const ws = new WebSocket('wss://your.awersome.backend.ws');
ws.addEventListener('message', ({ data }) => {
document.body.innerHTML = JSON.parse(data);// throws an exception
});
Solution
import { parseJSONorNot } from 'kostil.js';
const ws = new WebSocket('wss://your.awersome.backend.ws');
ws.addEventListener('message', ({ data }) => {
const jsonOrNot = parseJSONorNot(data);// throws an exception
document.body.innerHTML = jsonOrNot;
});
Bad API architecture
BONUS
/**
* Helps to debug your code.
* Works only in dev mode.
*/
export function deb () {
if (!isProduction()) {
debugger;
}
}
How to uninstall
npm uninstall kostil.js
via NPM
Delete the <script> from your index.html:
<script src="/node_modules/kostil.js/dist/kostil.js"></script>
Or delete import 'kostil.js' from your code.
kostil.js
By Uladzimir Halushka
kostil.js
- 660