0.1.2 • Published 6 years ago

alien-cascade v0.1.2

Weekly downloads
4
License
MIT
Repository
-
Last release
6 years ago

alien version 0.1.0

Before I bore you with use-cases and details, look at these few examples:

Basic Usage

ℿ(['name', 'email']).setName('Nathaniel').setEmail('Nathaniel@website.com')

Configuring Output

ℿ(['name'], {c: {s: t => `_${t}`}})._name("Nathaniel")

Advanced Settings

const schema = ℿ(['SSN'], {ob: true}).schema

What is alien?

Alien (invoked via alien() or ) is a system for building cascadable object factories. You define the properties of your object, and it generates a fluent interface that allows the caller to chain set commands. So, instead of:

myObject.prop1 = "Hey"
myObject.prop2 = "There"

you get:

myObject.setProp1("Hey").setProp2("There")

This, in combination with pure functions, creates a powerful, expressive means of modifying your DTOs.

Absolutely Everything is Configurable

Let's say you don't like set[Property] as the property syntax. You can pass in the setterTransformer property to change it to _[Property], or changeTheValueOf[Property]To, or whatever you want. It's all up to the caller.

You can configure:

  • Whether or not to keep unset variables (finalization.removeUnused)
  • Whether or not to remove the setters (finalization.removeSetters)
  • Whether or not to build a schema (objectUtilities.schema) (you always want this unless memory usage is a gigantic concern)
  • Whether or not to add a .reset() that blanks the properties (objectUtilities.reset)
  • How to name the properties (control.nameTransformer)
  • How to name the setters (control.setterTransformer)
  • Whether or not to add a .set({prop: 'val'}) interface (control.setObjects)
  • Whether you initialize properties are undefined or simply don't add them (control.createBlankProperty)
  • What to do when the object begins building (advanced.startAction)
  • What to do when the object is about to be done building (advanced.finalAction)
  • What to do every time a property is processed (when it's making the setters) (advanced.stepAction)
  • Whether or not to override the schema step and use unsafe validation (advanced.allowUnsafeInitialization)

Saving Space

Any of the options are configurable with the least amount of characters to uniqueled identify the setting... (what?)

So, control.nameTransformer can be set with {c: {n" true}} (c = control, n = nameTransformer)

This is called a fast-option, and it's a large part of what makes alien appealable as a means of reducing the amount of code that needs to be transmitted to the client..

Warning: Semver not affected from fast-option breakages

Since the alien developers cannot know what fast-option's are being used, if a change is made that may break your fast-option, it will not bump the major semver version. Be careful! In many cases, it's safer to use the camel-case-initialism match.

So, {c: {nT: ''}} for {control: {nameTransformer: ''}}