likeaboss

0.1.4 • Public • Published

🕴 likeaboss

NPM version MIT License fliphub fluents

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

screen shot 2017-04-24 at 4 48 22 pm
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

see the output

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

see the tests

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

screen shot 2017-04-24 at 5 51 21 am
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)

Package Sidebar

Install

npm i likeaboss

Weekly Downloads

14

Version

0.1.4

License

MIT

Last publish

Collaborators

  • aretecode