Compare commits

..

No commits in common. "master" and "v4.2.0" have entirely different histories.

5 changed files with 2067 additions and 1622 deletions

View File

@ -1,32 +1,5 @@
# Changelog # Changelog
## 2025-02-20 - 4.2.3 - fix(test)
Refactor test suite for improved readability and maintainability.
- Updated and cleaned up test cases for deferreds and promises.
- Reduced timeouts in tests for quicker execution.
- Added expectations for promise status and duration.
## 2025-02-20 - 4.2.3 - fix(test)
Refactor test suite for improved readability and maintainability.
- Updated and cleaned up test cases for deferreds and promises.
- Reduced timeouts in tests for quicker execution.
- Added expectations for promise status and duration.
## 2025-01-23 - 4.2.2 - fix(dependencies)
Update @git.zone/tstest and @types/node dependencies to latest versions
- Updated @git.zone/tstest from ^1.0.91 to ^1.0.92
- Updated @types/node from ^22.10.9 to ^22.10.10
## 2025-01-23 - 4.2.1 - fix(devDependencies)
Update development dependencies to latest versions
- Updated @git.zone/tstest to version ^1.0.91
- Updated @push.rocks/tapbundle to version ^5.5.6
- Updated @types/node to version ^22.10.9
## 2025-01-19 - 4.2.0 - feat(cumulativedeferred) ## 2025-01-19 - 4.2.0 - feat(cumulativedeferred)
Added subDefer method to CumulativeDeferred Added subDefer method to CumulativeDeferred

View File

@ -1,7 +1,7 @@
{ {
"name": "@push.rocks/smartpromise", "name": "@push.rocks/smartpromise",
"private": false, "private": false,
"version": "4.2.3", "version": "4.2.0",
"description": "A TypeScript library for managing promises and Deferred constructs, simplifying asynchronous programming.", "description": "A TypeScript library for managing promises and Deferred constructs, simplifying asynchronous programming.",
"main": "dist_ts/index.js", "main": "dist_ts/index.js",
"typings": "dist_ts/index.d.ts", "typings": "dist_ts/index.d.ts",
@ -23,9 +23,9 @@
"devDependencies": { "devDependencies": {
"@git.zone/tsbuild": "^2.2.0", "@git.zone/tsbuild": "^2.2.0",
"@git.zone/tsrun": "^1.3.3", "@git.zone/tsrun": "^1.3.3",
"@git.zone/tstest": "^1.0.92", "@git.zone/tstest": "^1.0.77",
"@push.rocks/tapbundle": "^5.5.6", "@push.rocks/tapbundle": "^5.5.5",
"@types/node": "^22.10.10" "@types/node": "^22.10.7"
}, },
"files": [ "files": [
"ts/**/*", "ts/**/*",
@ -53,12 +53,5 @@
"typescript", "typescript",
"asynchronous", "asynchronous",
"utilities" "utilities"
],
"pnpm": {
"onlyBuiltDependencies": [
"esbuild",
"mongodb-memory-server",
"puppeteer"
] ]
}
} }

3541
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -1,57 +1,53 @@
import * as smartpromise from '../ts/index.js'; import * as smartpromise from '../ts/index.js';
import { tap, expect } from '@push.rocks/tapbundle';
tap.test('simple deferred should resolve with correct value', async () => { // using Deferreds
const done = smartpromise.defer<string>(); // simple deferred;
let result: string | undefined; const done = smartpromise.defer();
done.promise.then((stringArg) => {
done.promise.then((stringArg) => { console.log(stringArg);
result = stringArg;
});
done.resolve('hello');
await done.promise;
expect(result).toEqual('hello');
}); });
done.resolve('hello'); // whenever you are ready
tap.test('deferred should work with async functions and track status/duration', async () => { // using deferreds in async functions to cater callback style apis
const myAsyncFunction = async (): Promise<string> => { const myAsyncFunction = async (): Promise<string> => {
const done = smartpromise.defer<string>(); const done = smartpromise.defer<string>(); // returns your typical Deferred object
setTimeout(() => { setTimeout(() => {
done.resolve('hi'); done.resolve('hi'); // will throw type error for other types than string as argument ;)
}, 100); // reduced timeout for testing }, 6000);
expect(done.status).toEqual('pending'); console.log(done.status); // logs "pending";
await done.promise; await done.promise;
expect(done.status).toEqual('fulfilled'); console.log(done.status); // logs "fullfilled"
expect(done.duration).toBeGreaterThan(0); console.log(done.duration); // outputs the duration in millisenconds
return done.promise; return done.promise;
}; };
const result = await myAsyncFunction(); let myAsyncFunction2 = async () => {
expect(result).toEqual('hi'); let aString = await myAsyncFunction();
console.log(aString); // will log 'hi' to console
};
myAsyncFunction2();
// Resolved and Rejected promises
// ------------------------------------------------
smartpromise.resolvedPromise(`I'll get logged to console soon`).then((x) => {
console.log(x);
}); });
tap.test('resolvedPromise should resolve immediately with correct value', async () => { smartpromise
const message = `I'll get logged to console soon`; .rejectedPromise(`what a lovely error message`)
const result = await smartpromise.resolvedPromise(message); .then(
expect(result).toEqual(message); () => {
}); console.log('This never makes it to console');
} /*, alternatively put a reject function here */
)
.catch((err) => {
console.log(err);
});
tap.test('rejectedPromise should reject with correct error message', async () => { import { tap, expect } from '@push.rocks/tapbundle';
const errorMessage = 'what a lovely error message';
let caught = false;
try {
await smartpromise.rejectedPromise(errorMessage);
} catch (err) {
caught = true;
expect(err).toEqual(errorMessage);
}
expect(caught).toEqual(true);
});
tap.test('runs through', async () => {});
export default tap.start(); export default tap.start();

View File

@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@push.rocks/smartpromise', name: '@push.rocks/smartpromise',
version: '4.2.3', version: '4.2.0',
description: 'A TypeScript library for managing promises and Deferred constructs, simplifying asynchronous programming.' description: 'A TypeScript library for managing promises and Deferred constructs, simplifying asynchronous programming.'
} }