An atomic value observer pattern implementation.
The State Value Observer is an atomic implementation of the value
observation pattern.
typescript
const adapter: IObserverAdapter = {
onChange: function (newValue: string): void {
console.log('Observed value was changed to:', newValue);
}
};
const observer: Observer = new Observer('initial value', adapter);observer.value = 'Hello World!';
`Usage of Listener Adapter
`typescript
const adapter: ListenerAdapter = new ListenerAdapter();
const observer: Observer = new Observer('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!';
`$3
`typescript
const adapter: ListenerAdapter = new ListenerAdapter(false);
const observer: Observer = new Observer('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
$3
This library is providing in [ECMAScript® 2020] language. When you use jest,
you get this error by using my library:
`text
Details:
\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
`js
module.exports = {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
'@babel/preset-typescript'
]
};
`
See more: https://github.com/facebook/jest#using-typescript
$3
`shell script
yarn test
`Building
`shell script
yarn build
``[ECMAScript® 2020]:https://tc39.es/ecma262/