Sometymes you need types and assertions when organizing bigger application. Addon provides extensions to assert types for computed properties and function parameters in runtime.
_ _
___ _ __ ___ | |__ ___ _ __ | |_ _ _ _ __ ___ ___
/ _ \ '_ ` _ \| '_ \ / _ \ '__|____| __| | | | '_ \ / _ \/ __|
| __/ | | | | | |_) | __/ | |_____| |_| |_| | |_) | __/\__ \
\___|_| |_| |_|_.__/ \___|_| \__|\__, | .__/ \___||___/
|___/|_|
ember install ember-error-handler
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')
});
import { assertType } from 'ember-types/asserts';
function execute(param) {
assertType(param, 'string');
};
Assertions could be defined as string, Assertion Validator or Class name
import { assertType } from 'ember-types/asserts';
assertType('hello world', 'string');
supported shortcuts
- array
- boolean
- function
- nothing
- number
- object
- string
import { assertType } from 'ember-types/asserts';
assertType(myInstance, Ember.Object);
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));
import { assertType } from 'ember-types/asserts';
// will fail
assertType('hello', enumeration('hello', 'world'));
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
Extension also includes tooling for proper class / function / instance naming
TBD
Extension also includes tooling for definition of non-scalar values on classes
TBD
TBD