likeaboss
v0.1.4
Published
export for nodejs or web like a boss, easy, fast, & tiny.
Downloads
39
Maintainers
Readme
🕴 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)