https://github.com/michaelpiper/susx
Susceptive Extension for JS
https://github.com/michaelpiper/susx
Last synced: about 2 months ago
JSON representation
Susceptive Extension for JS
- Host: GitHub
- URL: https://github.com/michaelpiper/susx
- Owner: michaelpiper
- License: isc
- Created: 2023-10-07T16:26:50.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-11-07T19:07:50.000Z (over 1 year ago)
- Last Synced: 2025-04-03T23:34:55.991Z (about 2 months ago)
- Language: TypeScript
- Size: 59.6 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# SusX Library
## Author
Michael PiperThis library provides classes for managing subscriptions, objects, and event-driven behavior. It includes the following components:
- `SusXObject`
- `SusXObserver`
- `SusXSubscription`
- `SusX`
- `SusXChangeObserver`## Usage
```javascript
import {
SusXObject,
SusXObserver,
SusXSubscription,
SusX,
SusXChangeObserver
} from 'susx';// ... (code continues)
```## SusX
### Example Usage:
```javascript
const susX = new SusX(1);
/// available command are
/// 1) ctx.on() // will turn on the observer
/// 2) ctx.off() // will turn off the observer
/// 3) ctx.once() // will turn on the observer once and them remove it immediately after
const ctx: SusXChangeObserver = susX.valueChange((value)=>{
console.log('value change', value);
assert(susX.value === value, 'value should be ' + susX.value);
}).on();susX.on('do not wait', async (value)=>{
await susX.delay(20);
console.log('do not wait first listener', value);
});susX.on('do not wait', async (value)=>{
await susX.delay(10);
console.log('do not wait second listener', value);
});await t.test("it would run the event in parallel and not wait for result", async function () {
susX.emit('do not wait', 'emit');
});await t.test("it would run the event parallel and await for each listener to finish before the next", async function () {
await susX.tap('do not wait', 'tap');
});await t.test("it would run the event concurrently and await for all listener to finish",async function () {
await susX.broadcast('do not wait', 'broadcast');
console.log('"do not wait second" will print before "do not wait first" broadcast complete',);
});// More code...
```## SusXSubscription
### Example Usage:
```javascript
const test1 = new SusXSubscription();await test1.delay(200);
const logText: SusXObserver = test1.subscribe('long-text');
logText.on('data', (data) => {
console.log(data);
assert(data === text[currentText], 'Text Chunk should be same as source value' + " source=" + text[currentText]);
});logText.on('end', () => {
console.log('Long Text End');
});for(let chunk of text){
await test1.broadcast('long-text', chunk);
}test1.off('long-text');
// More code...
```## SusXObject
### Example Usage:
```javascript
const test1 = new SusXObject();setTimeout(async function () {
console.log('waited for 2s to broadcast result hi');
test1.setObject({ hi: 'hi' }).putObject({ hi2: 'you' });
await test1.broadcast('hi', 'hi');
test1.emit('hi2', test1.value.hi2);
console.log('should be the last line result already returned');
}, 2000);const result2 = await test1.observe('hi2', function (data: any) {
console.log('this', this.getObject());
return data;
});assert(result2 === 'you', 'result2 should be you' + ' result2=' + result2);
// More code...
```## Testing
To run the tests, use the following command:
```bash
npm test
```## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Contributing
Please read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests.
## Issues
If you encounter any problems or have suggestions, please [open an issue](https://github.com/michaelpiper/SusX/issues).
## Changelog
For details, see [CHANGELOG.md](CHANGELOG.md).
---
Feel free to customize and expand upon this template according to your specific project needs.