Naval Pilgrim's Mayflower

    ember-types

    0.5.5 • Public • Published

    Ember-types

    Sometymes you need types and assertions when organizing bigger application. Addon provides extensions to assert types for computed properties and function parameters in runtime.

                     _                    _                         
       ___ _ __ ___ | |__   ___ _ __     | |_ _   _ _ __   ___  ___ 
      / _ \ '_ ` _ \| '_ \ / _ \ '__|____| __| | | | '_ \ / _ \/ __|
     |  __/ | | | | | |_) |  __/ | |_____| |_| |_| | |_) |  __/\__ \
      \___|_| |_| |_|_.__/ \___|_|        \__|\__, | .__/ \___||___/
                                              |___/|_|              
    
    

    Installation

    ember install ember-error-handler

    Typed computed property

    import { asserted } from 'ember-types/property';
     
    export default Ember.Object.extend({
      
      hello: asserted('string', function() {
          return 'world'
      })
     
    });
     

    or with passing computed

    import { asserted } from 'ember-types/property';
    const {computed} = Ember;
     
    export default Ember.Object.extend({
      
      hello: asserted('string', computed(function() {
          return 'world'
      }))
     
    });
     

    or empty

    import { asserted } from 'ember-types/property';
     
    export default Ember.Object.extend({
     
     helloWorld: asserted('string')
     
    });
     

    Assert type of function arguments

    import { assertType } from 'ember-types/asserts';
    function execute(param) {
      assertType(param, 'string');
    };

    Types validators (assertions)

    Assertions could be defined as string, Assertion Validator or Class name

    Assertion based on shortcuts

    import { assertType } from 'ember-types/asserts';
    assertType('hello world', 'string');

    supported shortcuts

    • array
    • boolean
    • function
    • nothing
    • number
    • object
    • string

    Assertion based on class

    import { assertType } from 'ember-types/asserts';
    assertType(myInstance, Ember.Object);

    Assertion based on validator

    import { assertType } from 'ember-types/asserts';
    import LogicalOr from 'ember-types/asserts/validator/logical-or'
    import Enumeration from 'ember-types/asserts/validator/enumeration'
     
    assertType(mixed, new LogicalOr(Ember.Component, Ember.Route));
    assertType(mixed, new LogicalOr(Ember.Component, Ember.Route, new Enumeration(false, undefined, null));
     

    Assertion based on enumeration

    import { assertType } from 'ember-types/asserts';
     
    // will fail
    assertType('hello', enumeration('hello', 'world'));

    Custom validators could be implemented

    import { defineValidator } from 'ember-types/definition';
    import { InvalidTypeError } from 'ember-types/errors';
    import { extractName } from 'ember-types/classes';
     
    export default  defineValidator(
      (value) => {
        if (typeof value !== 'boolean') {
          throw new InvalidTypeError(`value ${extractName(value)} must be boolean`);
        }
      },
      {name: 'boolean'}
    );
     

    See LogicalOr validator as advanced validator implementation

    Naming tooling

    Extension also includes tooling for proper class / function / instance naming

    TBD

    Will-be tooling

    Extension also includes tooling for definition of non-scalar values on classes

    TBD

    Function decorators

    TBD

    Install

    npm i ember-types

    DownloadsWeekly Downloads

    2

    Version

    0.5.5

    License

    MIT

    Unpacked Size

    21.2 kB

    Total Files

    30

    Last publish

    Collaborators

    • janmisek