0.1.4 โข Published 7 years ago
likeaboss v0.1.4
๐ด likeaboss
export like a boss with functions, dynamic & static requires, module & web support; easy, fast & tiny.
works with:
- ๐ผ es5
- ๐ฌ es6+
- ๐ typescript
- ๐ผ babel
- ๐ธ web
- ๐๐ node
- other?
๐ฆ usage
yarn add likeaboss
npm i likeaboss --save
๐ documentation
๐ฌ tests
๐ examples
const Export = require('likeaboss')
const pkg = require('./package.json')
// export directly on the module without module.exports
// or do `exports = module.exports = ` when using .export
Export
.module(module)
// main export to be decorated
.main(ClassOrFunction)
// export for web usage when needed
.web('your-lib-name')
// load dynamic
.dir(__dirname + '/your-dist-folder')
// and all other props you want to use
.props({version: pkg.version})
// only `required` when used
.dynamics([
{name: 'PluginEh', path: '/PluginEh'},
{name: 'PluginOh', path: '/PluginOh'},
])
// finish
.end()
dynamics
only used when the "import"er / client does
import {PluginEh} from 'your-lib'
or
import ClassOrFunction from 'your-lib'
const {PluginEh} = ClassOrFunction
๐ณ diving deeper examples
โ fluent function export
const Export = require('likeaboss')
function fn(options, callback) {
// magical things when called as a function
}
const Canada = {canada: true}
exports = module.exports = Export.export(module.exports)
.fn(fn)
.props({Canada})
.end()
fluent fn with requires
dynamic and static requires, dynamic requires only are required when they are used
const Export = require('likeaboss')
function fn() {
console.log('called as a function')
}
exports = module.exports = Export.export(module.exports)
.dir(__dirname)
.fn(fn)
.dynamics('src', ['Boss'])
.dynamics('src/plugins', ['BossPlugin'])
.dynamics('', [{path: 'package.json', name: 'pkg'}])
.statics('', ['Statics'])
.end()
๐ฆ importing:
requires
./eh/src/Boss.js
import {Boss} from './eh'
import eh from './eh'
eh('callable as a function!')
console.log(Boss)
// requires the BossPlugin
console.log(eh.plugins.BossPlugin)
object function with requires
same as with fluent, but using object syntax
const Export = require('likeaboss')
exports = module.exports = Export.from({
target: module.exports,
dir: __dirname,
fn: func,
props: {Eh, Canada},
dynamics: {
'src': ['Boss'],
'src/plugins': ['BossPlugin'],
},
statics: {
'': ['Statics'],
},
})
module
no need to reassign exports and modules (exports is optional 2nd arg)
Exports.module(module).props({Canada}).end()
๐ฝ exports
file size (~700 bytes)
from
// imports the `from` static fn
const from = require('likeaboss/from')
const Export = require('likeaboss')
generate
๐งโ warning, experimental
// export.js
const gen = require('likeaboss/gen')
function fn(options, callback) { /* magic */ }
const Eh = {eh: true}
const Canada = {canada: true}
exports = module.exports = Exports.export()
.dir(__dirname)
.fn(fn)
.dynamics('src', ['Boss'])
.dynamics('src/plugins', ['BossPlugin'])
.statics('', ['Statics'])
.props({Eh, Canada})
.web('eh')
.end()
.toString()
console.log(exports)
// outputs exporting string
// node export.js > index.js
โ๏ธ benchmark
using ๐๏ธโ bench-chain
optimized x 30,975 ops/sec ยฑ13.48% (50 runs sampled)
fluent x 20,434 ops/sec ยฑ3.52% (73 runs sampled)
times with last example
console.log({})
: ~ โฒ 35000ms / 35ms- fluent: ~ โฒ 1300 microseconds / 1.3ms
- optimized: ~ โฒ 400 microseconds / .4ms
exports = module.exports = ...
: ~ โฒ 100-200 microseconds / .1ms-.2ms
๐ญ
output
example generated output pseudo code
function fn() {}
const ex = {
Eh: {eh: true},
Canada: {canada: true},
Boss: 'boss',
plugins: {},
Statics: {static: true},
__esModule: true,
}
Object.defineProperty(ex.plugins, 'BossPlugin', {
get() {
return 'boss'
},
})
ex.default = ex
Object.assign(fn, ex)