0.1.4 โ€ข Published 7 years ago

likeaboss v0.1.4

Weekly downloads
23
License
MIT
Repository
github
Last release
7 years ago

๐Ÿ•ด 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

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

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)