@enbock/state-value-observer v2.0.1
State Value Observer
The State Value Observer is an atomic implementation of the value observation pattern.
Feature
- Implemented in dependency injection methodology.
- Provide setter and getter functions of an observed value.
- Provide interfaces for callbacks and callback adapters.
- Provide an listener adapter.
Usage
const adapter: IObserverAdapter<string> = {
onChange: function (newValue: string): void {
console.log('Observed value was changed to:', newValue);
}
};
const observer: Observer<string> = new Observer<string>('initial value', adapter);
observer.value = 'Hello World!';
Usage of Listener Adapter
const adapter: ListenerAdapter<string> = new ListenerAdapter<string>();
const observer: Observer<string> = new Observer<string>('initial value', adapter);
function valueConsumer(newValue: string): void {
console.log('Observed value was changed to:', newValue);
}
adapter.addListener(valueConsumer.bind(window));
observer.value = 'Hello World!';
Listener Adapter in synchronous mode
const adapter: ListenerAdapter<string> = new ListenerAdapter<string>(false);
const observer: Observer<string> = new Observer<string>('initial value', adapter);
function valueConsumer(newValue: string): void {
console.log('Observed value was changed to:', newValue);
}
adapter.addListener(valueConsumer.bind(window));
observer.value = 'Hello World!';
Testing
Using this library in your project
This library is providing in ECMAScript® 2020 language. When you use jest, you get this error by using my library:
Details:
<YOUR_PATH>\node_modules\@enbock\state-value-observer\ListenerAdapter.js:1
export default class ListenerAdapter {
^^^^^^
SyntaxError: Unexpected token 'export'
at compileFunction (vm.js:341:18)
See more: https://jestjs.io/docs/en/tutorial-react-native#transformignorepatterns-customization
Reason and solution
Jest running internally on ES5, that does not know the ES6-imports.
Force converting ES6+ Libraries
To solve this, you have to exclude all my libraries from the exclusion-list:
"transformIgnorePatterns": [
"/node_modules/(?!(@enbock)/)"
]
Let babel "learn" ES6+
babel.config.js
module.exports = {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
'@babel/preset-typescript'
]
};
See more: https://github.com/facebook/jest#using-typescript
Run tests
yarn test
Building
yarn build
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago