pooka

0.2.0 • Public • Published

Pooka Build Status

npm install pooka

to use this module you have to pass Node.js the --harmony_proxies V8 flag

% node --v8-options | grep proxies 
--harmony_proxies (enable "harmony proxies" (in progress))

Traits reimagined using ES6 Proxies.

Mostly a thought experiment for now, but as Proxies become more battle-tested, it could become a useful pattern.

This implementation lazily constructs implemented Traits.

The last Trait to implement a method is the one that is evaluated.

import Traits from 'pooka'
 
class Wheels {
  constructor (number = 4) {
    // this will be private since it isn't on the prototype
    this.n = number 
  }
  drive      () { return true   }
  // these will be public properties
  get wheels () { return this.n }
  get sinks  () { return true   }
}
 
class Storage {
  constructor (type) {
    // these two properties are also private
    this.type     = type
    this.contents = []
  }
  
  add (thing) {
    this.contents.push(thing)
  }  
}
 
class Wings {
  fly () { return true }
}
 
class Amphibious {
  get sinks () { return false }
}
 
class Airplane extends Traits {}
// Arguments are curried for instantiation
Airplane.implements(Storage, 'cargo')
Airplane.implements(Wheels, 3)
Airplane.implements(Wings)
 
 
class Car extends Traits {}
Car.implements(Storage, 'trunk')
Car.implements(Wheels/*, 4 as default */)
 
// Multiple levels of inheritance
class Amphicar extends Traits {}
Amphicar.implements(Car)
// override Wheels.prototyope.sinks
Amphicar.implements(Amphibious)
 
class Bike extends Traits {}
Bike.implements(Storage, 'basket')
Bike.implements(Wheels, 2)
 
class Semi extends Traits {}
Semi.implements(Storage, 'trailer')
Semi.implements(Wheels, 18)
 
car.fly() // new Error('Vehicle does not implement fly')

Readme

Keywords

Package Sidebar

Install

npm i pooka

Weekly Downloads

1

Version

0.2.0

License

ISC

Last publish

Collaborators

  • ondreian