Compare commits

...

8 Commits

18 changed files with 235 additions and 324 deletions

View File

@ -1,5 +1,32 @@
# Changelog # Changelog
## 2025-01-25 - 2.2.1 - fix(core)
Remove unused logcontext classes and update exports
- Removed classes and plugins from logcontext that were not in use.
- Adjusted exports to not include deprecated logger-related modules.
## 2025-01-25 - 2.2.0 - feat(tests)
Added a new test script to demonstrate and validate AsyncContext functionality
- Introduced jstrial.js in the test directory to ensure the correct working of AsyncContext.
- The new tests handle various scenarios, including the independence of child stores and data deletion.
## 2025-01-23 - 2.1.8 - fix(core)
Refactor and clean up class imports and exports
- Simplified class file structure by unifying imports and exports.
- Removed redundant `logcontext.*` prefixes from filenames.
- Ensured consistent path references in index.ts.
## 2025-01-23 - 2.1.7 - fix(core)
Enhanced debugging and improved dependency tracking
- Updated @types/node to version ^22.10.10.
- Updated simple-async-context to version ^0.0.23.
- Enhanced the logDebug method to check for the existence of process and environment variables.
- Fixed dependency versions in package.json.
## 2025-01-19 - 2.1.6 - fix(core) ## 2025-01-19 - 2.1.6 - fix(core)
Updated dependencies and improved AsyncStore debugging and cleanup Updated dependencies and improved AsyncStore debugging and cleanup

1
dist/index.d.ts vendored
View File

@ -1 +0,0 @@
export * from './logcontext.classes.logger';

7
dist/index.js vendored
View File

@ -1,7 +0,0 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./logcontext.classes.logger"));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlEQUE0QyJ9

View File

@ -1,60 +0,0 @@
import * as plugins from './logcontext.plugins';
import { LogMap } from './logcontext.classes.logmap';
export declare class Logger {
namespaceString: string;
clsNameSpace: plugins.smartcls.Namespace;
logmap: LogMap;
thirdPartyLogger: any;
child: any;
settings: {
enableScope: () => void;
disableScope: () => void;
enableAddData: () => void;
disableAddData: () => void;
};
private settingsParams;
constructor(namespaceArg?: string);
addData(paramNameArg: string, dataArg: any): void;
addThirdPartyLogger(thirdPartyLoggerArg: any): void;
/**
* debug
* @param logMessageArg
*/
debug(logMessageArg: any): void;
/**
* log
* @param logMessageArg
*/
log(logMessageArg: any): void;
/**
* info
* @param logObjectArg
*/
info(logObjectArg: any): void;
/**
* error
* @param logMessageArg
* @param args
*/
error(logMessageArg: any, ...args: any[]): void;
/**
* warn
* @param logMessageArg
* @param args
*/
warn(logMessageArg: any, ...args: any[]): void;
/**
* fatal
* @param logMessageArg
* @param args
*/
fatal(logMessageArg: any, ...args: any[]): void;
scope(funcArg: any): void;
/**
* routes the log according to whats available in the environment
* @param {string} logMethod
* @param {any} message
* @param {any[]} ...args
*/
private routeLog(logMethod, message, ...args);
}

View File

@ -1,113 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const plugins = require("./logcontext.plugins");
const logcontext_classes_logmap_1 = require("./logcontext.classes.logmap");
class Logger {
constructor(namespaceArg = plugins.shortid()) {
this.settings = {
enableScope: () => {
this.settingsParams.scope = true;
},
disableScope: () => {
this.settingsParams.scope = false;
},
enableAddData: () => {
this.settingsParams.addData = true;
},
disableAddData: () => {
this.settingsParams.addData = false;
}
};
this.settingsParams = {
scope: true,
addData: true
};
this.namespaceString = namespaceArg;
this.clsNameSpace = plugins.smartcls.createNamespace(this.namespaceString);
this.logmap = new logcontext_classes_logmap_1.LogMap(this.clsNameSpace);
}
addData(paramNameArg, dataArg) {
if (this.settingsParams.addData) {
this.logmap.addData(paramNameArg, dataArg);
}
}
addThirdPartyLogger(thirdPartyLoggerArg) {
this.thirdPartyLogger = thirdPartyLoggerArg;
}
/**
* debug
* @param logMessageArg
*/
debug(logMessageArg) {
this.routeLog('debug', logMessageArg);
}
/**
* log
* @param logMessageArg
*/
log(logMessageArg) {
this.routeLog('log', logMessageArg);
}
/**
* info
* @param logObjectArg
*/
info(logObjectArg) {
this.routeLog('info', logObjectArg);
}
/**
* error
* @param logMessageArg
* @param args
*/
error(logMessageArg, ...args) {
this.routeLog('error', logMessageArg, ...args);
}
/**
* warn
* @param logMessageArg
* @param args
*/
warn(logMessageArg, ...args) {
this.routeLog('warn', logMessageArg, ...args);
}
/**
* fatal
* @param logMessageArg
* @param args
*/
fatal(logMessageArg, ...args) {
this.routeLog('fatal', logMessageArg, ...args);
}
// creates a new async scope
scope(funcArg) {
// create node continuation scope
if (this.settingsParams.scope) {
this.clsNameSpace.run(funcArg);
}
else {
funcArg();
}
}
/**
* routes the log according to whats available in the environment
* @param {string} logMethod
* @param {any} message
* @param {any[]} ...args
*/
routeLog(logMethod, message, ...args) {
let logObject = {
message: message,
type: logMethod,
logContext: this.logmap.getAllData()
};
if (this.thirdPartyLogger && this.thirdPartyLogger[logMethod]) {
this.thirdPartyLogger[logMethod](logObject, ...args);
}
else {
console.log(logObject);
}
}
}
exports.Logger = Logger;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nY29udGV4dC5jbGFzc2VzLmxvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2xvZ2NvbnRleHQuY2xhc3Nlcy5sb2dnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxnREFBZ0Q7QUFDaEQsMkVBQXFEO0FBRXJEO0lBeUJFLFlBQVksZUFBdUIsT0FBTyxDQUFDLE9BQU8sRUFBRTtRQW5CcEQsYUFBUSxHQUFHO1lBQ1QsV0FBVyxFQUFFLEdBQUcsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ25DLENBQUM7WUFDRCxZQUFZLEVBQUUsR0FBRyxFQUFFO2dCQUNqQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDcEMsQ0FBQztZQUNELGFBQWEsRUFBRSxHQUFHLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNyQyxDQUFDO1lBQ0QsY0FBYyxFQUFFLEdBQUcsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3RDLENBQUM7U0FDRixDQUFDO1FBQ00sbUJBQWMsR0FBeUM7WUFDN0QsS0FBSyxFQUFFLElBQUk7WUFDWCxPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUM7UUFHQSxJQUFJLENBQUMsZUFBZSxHQUFHLFlBQVksQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksa0NBQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELE9BQU8sQ0FBQyxZQUFvQixFQUFFLE9BQVk7UUFDeEMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FB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

View File

@ -1,11 +0,0 @@
import * as plugins from './logcontext.plugins';
import { Namespace } from 'smartcls';
export declare class LogMap {
clsNamespace: Namespace;
paramMap: plugins.lik.Stringmap;
constructor(clsNamespaceArg: Namespace);
addData(paramName: string, logData: any): void;
deleteData(paramName: string): void;
getData(paramName: string): any;
getAllData(): {};
}

View File

@ -1,28 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const plugins = require("./logcontext.plugins");
class LogMap {
constructor(clsNamespaceArg) {
this.paramMap = new plugins.lik.Stringmap();
this.clsNamespace = clsNamespaceArg;
}
addData(paramName, logData) {
this.paramMap.addString(paramName);
this.clsNamespace.set(paramName, logData);
}
deleteData(paramName) {
this.clsNamespace.set(paramName, null);
}
getData(paramName) {
return this.clsNamespace.get(paramName);
}
getAllData() {
let returnObject = {};
for (let stringArg of this.paramMap.getStringArray()) {
returnObject[stringArg] = this.clsNamespace.get(stringArg);
}
return returnObject;
}
}
exports.LogMap = LogMap;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nY29udGV4dC5jbGFzc2VzLmxvZ21hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2xvZ2NvbnRleHQuY2xhc3Nlcy5sb2dtYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxnREFBZ0Q7QUFLaEQ7SUFJRSxZQUFZLGVBQTBCO1FBRnRDLGFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7UUFHckMsSUFBSSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUM7SUFDdEMsQ0FBQztJQUVELE9BQU8sQ0FBQyxTQUFpQixFQUFFLE9BQU87UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxVQUFVLENBQUMsU0FBaUI7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxPQUFPLENBQUMsU0FBaUI7UUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLEdBQUcsQ0FBQyxDQUFDLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JELFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUE1QkQsd0JBNEJDIn0=

View File

@ -1,5 +0,0 @@
import 'typings-global';
import * as lik from 'lik';
import * as smartcls from 'smartcls';
import * as shortid from 'shortid';
export { lik, smartcls, shortid };

View File

@ -1,10 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
require("typings-global");
const lik = require("lik");
exports.lik = lik;
const smartcls = require("smartcls");
exports.smartcls = smartcls;
const shortid = require("shortid");
exports.shortid = shortid;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nY29udGV4dC5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbG9nY29udGV4dC5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMEJBQXdCO0FBRXhCLDJCQUEyQjtBQUlsQixrQkFBRztBQUhaLHFDQUFxQztBQUd2Qiw0QkFBUTtBQUZ0QixtQ0FBbUM7QUFFWCwwQkFBTyJ9

View File

@ -1,6 +1,6 @@
{ {
"name": "@push.rocks/smartcontext", "name": "@push.rocks/smartcontext",
"version": "2.1.6", "version": "2.2.1",
"description": "A module providing advanced asynchronous context management to enrich logs with context and manage scope effectively in Node.js applications.", "description": "A module providing advanced asynchronous context management to enrich logs with context and manage scope effectively in Node.js applications.",
"exports": { "exports": {
".": "./dist_ts/index.js" ".": "./dist_ts/index.js"
@ -17,13 +17,13 @@
"@git.zone/tsbuild": "^2.1.27", "@git.zone/tsbuild": "^2.1.27",
"@git.zone/tsbundle": "^2.0.7", "@git.zone/tsbundle": "^2.0.7",
"@git.zone/tsrun": "^1.2.39", "@git.zone/tsrun": "^1.2.39",
"@git.zone/tstest": "^1.0.57", "@git.zone/tstest": "^1.0.96",
"@push.rocks/smartdelay": "^3.0.5", "@push.rocks/smartdelay": "^3.0.5",
"@push.rocks/tapbundle": "^5.5.6", "@push.rocks/tapbundle": "^5.5.6",
"@types/node": "^22.10.7" "@types/node": "^22.10.10"
}, },
"dependencies": { "dependencies": {
"simple-async-context": "^0.0.16" "simple-async-context": "^0.0.23"
}, },
"private": false, "private": false,
"browserslist": [ "browserslist": [

155
pnpm-lock.yaml generated
View File

@ -9,8 +9,8 @@ importers:
.: .:
dependencies: dependencies:
simple-async-context: simple-async-context:
specifier: ^0.0.16 specifier: ^0.0.23
version: 0.0.16 version: 0.0.23
devDependencies: devDependencies:
'@git.zone/tsbuild': '@git.zone/tsbuild':
specifier: ^2.1.27 specifier: ^2.1.27
@ -22,8 +22,8 @@ importers:
specifier: ^1.2.39 specifier: ^1.2.39
version: 1.3.3 version: 1.3.3
'@git.zone/tstest': '@git.zone/tstest':
specifier: ^1.0.57 specifier: ^1.0.96
version: 1.0.90(@aws-sdk/credential-providers@3.731.1)(socks@2.8.3) version: 1.0.96(@aws-sdk/credential-providers@3.731.1)(socks@2.8.3)
'@push.rocks/smartdelay': '@push.rocks/smartdelay':
specifier: ^3.0.5 specifier: ^3.0.5
version: 3.0.5 version: 3.0.5
@ -31,8 +31,8 @@ importers:
specifier: ^5.5.6 specifier: ^5.5.6
version: 5.5.6(@aws-sdk/credential-providers@3.731.1)(socks@2.8.3) version: 5.5.6(@aws-sdk/credential-providers@3.731.1)(socks@2.8.3)
'@types/node': '@types/node':
specifier: ^22.10.7 specifier: ^22.10.10
version: 22.10.7 version: 22.10.10
packages: packages:
@ -226,8 +226,8 @@ packages:
resolution: {integrity: sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==} resolution: {integrity: sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
'@cloudflare/workers-types@4.20250109.0': '@cloudflare/workers-types@4.20250121.0':
resolution: {integrity: sha512-Y1zgSaEOOevl9ORpzgMcm4j535p3nK2lrblHHvYM2yxR50SBKGh+wvkRFAIxWRfjUGZEU+Fp6923EGioDBbobA==} resolution: {integrity: sha512-2bBosmudcwvUOKzuCL/Jum18LDh3QoU0QnTNMXIgcVwuq3LaNzyZnOW14bFXPhLU/84ZjNO3zO5R/U11Zgag2Q==}
'@colors/colors@1.6.0': '@colors/colors@1.6.0':
resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==}
@ -561,8 +561,8 @@ packages:
resolution: {integrity: sha512-DDzWunkxXLtXJTxBf4EioXLwhuqdA2VzdTmOzWrw4Z4Qnms/YM67q36yajwNohAajPYyRz5DayU0ikrceFXyVw==} resolution: {integrity: sha512-DDzWunkxXLtXJTxBf4EioXLwhuqdA2VzdTmOzWrw4Z4Qnms/YM67q36yajwNohAajPYyRz5DayU0ikrceFXyVw==}
hasBin: true hasBin: true
'@git.zone/tstest@1.0.90': '@git.zone/tstest@1.0.96':
resolution: {integrity: sha512-McytXK46GiReEps7wHWW6zOHYCFF4sywjj6auHjhGqzOogA2Wju1YtZRL+o+OAUb61kQxNFRras6Xg/4Zth0Bw==} resolution: {integrity: sha512-c1FlIiRmMiLB56BP5JlPrJ9VTYCSjOjA7v0avVMAjLqBl06GB3Urun0sAXHjcjr2h5lOmTiw0KprRlJ7KF2XFA==}
hasBin: true hasBin: true
'@hapi/bourne@3.0.0': '@hapi/bourne@3.0.0':
@ -813,6 +813,9 @@ packages:
'@push.rocks/smartpromise@4.2.0': '@push.rocks/smartpromise@4.2.0':
resolution: {integrity: sha512-1Yb0u/Yu68D1GPuxPhfMe2MefffqqzK+WmtrCipQl75cBXyaiNiwwrRKaG47ZJquMS+BYxqC/P40cDVAWDvMfw==} resolution: {integrity: sha512-1Yb0u/Yu68D1GPuxPhfMe2MefffqqzK+WmtrCipQl75cBXyaiNiwwrRKaG47ZJquMS+BYxqC/P40cDVAWDvMfw==}
'@push.rocks/smartpromise@4.2.1':
resolution: {integrity: sha512-toRH6DThNlyfMNCCAuUx20INaD5nbLD+q/ipzGZMZ7FR9ata3csjdnM0DUj81tuqypqkgeorZWKiDY2C85UO4Q==}
'@push.rocks/smartpuppeteer@2.0.2': '@push.rocks/smartpuppeteer@2.0.2':
resolution: {integrity: sha512-EcYCT0PX++WjfHp7W5UYX3t8x5gSNpJMMUvhA7SHz8b2t76ItslNWxprRcF0CUQyN1fozbf5StZf7dwdGc/dIA==} resolution: {integrity: sha512-EcYCT0PX++WjfHp7W5UYX3t8x5gSNpJMMUvhA7SHz8b2t76ItslNWxprRcF0CUQyN1fozbf5StZf7dwdGc/dIA==}
@ -1410,8 +1413,8 @@ packages:
'@types/node-forge@1.3.11': '@types/node-forge@1.3.11':
resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==}
'@types/node@22.10.7': '@types/node@22.10.10':
resolution: {integrity: sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==} resolution: {integrity: sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==}
'@types/parse5@6.0.3': '@types/parse5@6.0.3':
resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==}
@ -1500,8 +1503,8 @@ packages:
'@types/ws@7.4.7': '@types/ws@7.4.7':
resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
'@types/ws@8.5.13': '@types/ws@8.5.14':
resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==}
'@types/yargs-parser@21.0.3': '@types/yargs-parser@21.0.3':
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
@ -1512,8 +1515,8 @@ packages:
'@types/yauzl@2.10.3': '@types/yauzl@2.10.3':
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
'@ungap/structured-clone@1.2.1': '@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
'@web/browser-logs@0.4.1': '@web/browser-logs@0.4.1':
resolution: {integrity: sha512-ypmMG+72ERm+LvP+loj9A64MTXvWMXHUOu773cPO4L1SV/VWg6xA9Pv7vkvkXQX+ItJtCJt+KQ+U6ui2HhSFUw==} resolution: {integrity: sha512-ypmMG+72ERm+LvP+loj9A64MTXvWMXHUOu773cPO4L1SV/VWg6xA9Pv7vkvkXQX+ItJtCJt+KQ+U6ui2HhSFUw==}
@ -2931,8 +2934,8 @@ packages:
micromark-extension-gfm-strikethrough@2.1.0: micromark-extension-gfm-strikethrough@2.1.0:
resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
micromark-extension-gfm-table@2.1.0: micromark-extension-gfm-table@2.1.1:
resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==} resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==}
micromark-extension-gfm-tagfilter@2.0.0: micromark-extension-gfm-tagfilter@2.0.0:
resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
@ -2991,8 +2994,8 @@ packages:
micromark-util-sanitize-uri@2.0.1: micromark-util-sanitize-uri@2.0.1:
resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
micromark-util-subtokenize@2.0.3: micromark-util-subtokenize@2.0.4:
resolution: {integrity: sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==} resolution: {integrity: sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==}
micromark-util-symbol@2.0.1: micromark-util-symbol@2.0.1:
resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
@ -3628,8 +3631,8 @@ packages:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'} engines: {node: '>=14'}
simple-async-context@0.0.16: simple-async-context@0.0.23:
resolution: {integrity: sha512-FbE32PwJcZQU+rta11BGI5K+bSwPf2FPnkMmOJVWUOz5qRMgwEqRRc2e85fhkRkYe3Pb9P/r5ELWjgaBGBsnDQ==} resolution: {integrity: sha512-kHxBJjXJcFv6LucWaNayVx5ntp8+DU74kE8FjzyZDp5Bpo3aX5Lfgu4OmFP5QsWmF1xyv2JPlrIF3elpDxuF5w==}
simple-swizzle@0.2.2: simple-swizzle@0.2.2:
resolution: {integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=} resolution: {integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=}
@ -4157,7 +4160,7 @@ snapshots:
'@api.global/typedrequest': 3.1.10 '@api.global/typedrequest': 3.1.10
'@api.global/typedrequest-interfaces': 3.0.19 '@api.global/typedrequest-interfaces': 3.0.19
'@api.global/typedsocket': 3.0.1 '@api.global/typedsocket': 3.0.1
'@cloudflare/workers-types': 4.20250109.0 '@cloudflare/workers-types': 4.20250121.0
'@design.estate/dees-comms': 1.0.27 '@design.estate/dees-comms': 1.0.27
'@push.rocks/lik': 6.1.0 '@push.rocks/lik': 6.1.0
'@push.rocks/smartchok': 1.0.34 '@push.rocks/smartchok': 1.0.34
@ -4175,7 +4178,7 @@ snapshots:
'@push.rocks/smartntml': 2.0.8 '@push.rocks/smartntml': 2.0.8
'@push.rocks/smartopen': 2.0.0 '@push.rocks/smartopen': 2.0.0
'@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpath': 5.0.18
'@push.rocks/smartpromise': 4.1.0 '@push.rocks/smartpromise': 4.2.1
'@push.rocks/smartrequest': 2.0.23 '@push.rocks/smartrequest': 2.0.23
'@push.rocks/smartrx': 3.0.7 '@push.rocks/smartrx': 3.0.7
'@push.rocks/smartsitemap': 2.0.3 '@push.rocks/smartsitemap': 2.0.3
@ -4759,7 +4762,7 @@ snapshots:
dependencies: dependencies:
regenerator-runtime: 0.14.1 regenerator-runtime: 0.14.1
'@cloudflare/workers-types@4.20250109.0': {} '@cloudflare/workers-types@4.20250121.0': {}
'@colors/colors@1.6.0': {} '@colors/colors@1.6.0': {}
@ -4788,7 +4791,7 @@ snapshots:
'@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartdelay': 3.0.5
'@push.rocks/smartjson': 5.0.20 '@push.rocks/smartjson': 5.0.20
'@push.rocks/smartmarkdown': 3.0.3 '@push.rocks/smartmarkdown': 3.0.3
'@push.rocks/smartpromise': 4.1.0 '@push.rocks/smartpromise': 4.2.1
'@push.rocks/smartrouter': 1.3.2 '@push.rocks/smartrouter': 1.3.2
'@push.rocks/smartrx': 3.0.7 '@push.rocks/smartrx': 3.0.7
'@push.rocks/smartstate': 2.0.19 '@push.rocks/smartstate': 2.0.19
@ -5013,7 +5016,7 @@ snapshots:
'@push.rocks/smartshell': 3.2.2 '@push.rocks/smartshell': 3.2.2
tsx: 4.19.2 tsx: 4.19.2
'@git.zone/tstest@1.0.90(@aws-sdk/credential-providers@3.731.1)(socks@2.8.3)': '@git.zone/tstest@1.0.96(@aws-sdk/credential-providers@3.731.1)(socks@2.8.3)':
dependencies: dependencies:
'@api.global/typedserver': 3.0.53 '@api.global/typedserver': 3.0.53
'@git.zone/tsbundle': 2.1.0 '@git.zone/tsbundle': 2.1.0
@ -5023,10 +5026,10 @@ snapshots:
'@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartdelay': 3.0.5
'@push.rocks/smartfile': 11.1.5 '@push.rocks/smartfile': 11.1.5
'@push.rocks/smartlog': 3.0.7 '@push.rocks/smartlog': 3.0.7
'@push.rocks/smartpromise': 4.1.0 '@push.rocks/smartpromise': 4.2.1
'@push.rocks/smartshell': 3.2.2 '@push.rocks/smartshell': 3.2.2
'@push.rocks/tapbundle': 5.5.6(@aws-sdk/credential-providers@3.731.1)(socks@2.8.3) '@push.rocks/tapbundle': 5.5.6(@aws-sdk/credential-providers@3.731.1)(socks@2.8.3)
'@types/ws': 8.5.13 '@types/ws': 8.5.14
figures: 6.1.0 figures: 6.1.0
ws: 8.18.0 ws: 8.18.0
transitivePeerDependencies: transitivePeerDependencies:
@ -5071,7 +5074,7 @@ snapshots:
'@jest/schemas': 29.6.3 '@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4 '@types/istanbul-reports': 3.0.4
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/yargs': 17.0.33 '@types/yargs': 17.0.33
chalk: 4.1.2 chalk: 4.1.2
@ -5307,7 +5310,7 @@ snapshots:
'@push.rocks/smartchok@1.0.34': '@push.rocks/smartchok@1.0.34':
dependencies: dependencies:
'@push.rocks/lik': 6.1.0 '@push.rocks/lik': 6.1.0
'@push.rocks/smartpromise': 4.1.0 '@push.rocks/smartpromise': 4.2.1
'@push.rocks/smartrx': 3.0.7 '@push.rocks/smartrx': 3.0.7
'@tempfix/watcher': 2.3.0 '@tempfix/watcher': 2.3.0
@ -5536,7 +5539,7 @@ snapshots:
dependencies: dependencies:
'@design.estate/dees-element': 2.0.39 '@design.estate/dees-element': 2.0.39
'@happy-dom/global-registrator': 15.11.7 '@happy-dom/global-registrator': 15.11.7
'@push.rocks/smartpromise': 4.1.0 '@push.rocks/smartpromise': 4.2.1
fake-indexeddb: 6.0.0 fake-indexeddb: 6.0.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -5559,7 +5562,7 @@ snapshots:
'@push.rocks/smartfile': 11.1.5 '@push.rocks/smartfile': 11.1.5
'@push.rocks/smartnetwork': 3.0.2 '@push.rocks/smartnetwork': 3.0.2
'@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpath': 5.0.18
'@push.rocks/smartpromise': 4.1.0 '@push.rocks/smartpromise': 4.2.1
'@push.rocks/smartpuppeteer': 2.0.2 '@push.rocks/smartpuppeteer': 2.0.2
'@push.rocks/smartunique': 3.0.9 '@push.rocks/smartunique': 3.0.9
'@tsclass/tsclass': 4.4.0 '@tsclass/tsclass': 4.4.0
@ -5578,6 +5581,8 @@ snapshots:
'@push.rocks/smartpromise@4.2.0': {} '@push.rocks/smartpromise@4.2.0': {}
'@push.rocks/smartpromise@4.2.1': {}
'@push.rocks/smartpuppeteer@2.0.2': '@push.rocks/smartpuppeteer@2.0.2':
dependencies: dependencies:
'@pushrocks/smartdelay': 2.0.13 '@pushrocks/smartdelay': 2.0.13
@ -5649,7 +5654,7 @@ snapshots:
'@push.rocks/smartenv': 5.0.12 '@push.rocks/smartenv': 5.0.12
'@push.rocks/smartjson': 5.0.20 '@push.rocks/smartjson': 5.0.20
'@push.rocks/smartlog': 3.0.7 '@push.rocks/smartlog': 3.0.7
'@push.rocks/smartpromise': 4.1.0 '@push.rocks/smartpromise': 4.2.1
'@push.rocks/smartrx': 3.0.7 '@push.rocks/smartrx': 3.0.7
'@push.rocks/smarttime': 4.1.1 '@push.rocks/smarttime': 4.1.1
engine.io: 6.5.4 engine.io: 6.5.4
@ -5674,7 +5679,7 @@ snapshots:
'@push.rocks/isohash': 2.0.1 '@push.rocks/isohash': 2.0.1
'@push.rocks/lik': 6.1.0 '@push.rocks/lik': 6.1.0
'@push.rocks/smartjson': 5.0.20 '@push.rocks/smartjson': 5.0.20
'@push.rocks/smartpromise': 4.1.0 '@push.rocks/smartpromise': 4.2.1
'@push.rocks/smartrx': 3.0.7 '@push.rocks/smartrx': 3.0.7
'@push.rocks/webstore': 2.0.20 '@push.rocks/webstore': 2.0.20
@ -6363,14 +6368,14 @@ snapshots:
'@types/accepts@1.3.7': '@types/accepts@1.3.7':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/babel__code-frame@7.0.6': {} '@types/babel__code-frame@7.0.6': {}
'@types/body-parser@1.19.5': '@types/body-parser@1.19.5':
dependencies: dependencies:
'@types/connect': 3.4.38 '@types/connect': 3.4.38
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/buffer-json@2.0.3': {} '@types/buffer-json@2.0.3': {}
@ -6386,17 +6391,17 @@ snapshots:
'@types/clean-css@4.2.11': '@types/clean-css@4.2.11':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
source-map: 0.6.1 source-map: 0.6.1
'@types/co-body@6.1.3': '@types/co-body@6.1.3':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/qs': 6.9.18 '@types/qs': 6.9.18
'@types/connect@3.4.38': '@types/connect@3.4.38':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/content-disposition@0.5.8': {} '@types/content-disposition@0.5.8': {}
@ -6409,11 +6414,11 @@ snapshots:
'@types/connect': 3.4.38 '@types/connect': 3.4.38
'@types/express': 5.0.0 '@types/express': 5.0.0
'@types/keygrip': 1.0.6 '@types/keygrip': 1.0.6
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/cors@2.8.17': '@types/cors@2.8.17':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/debounce@1.2.4': {} '@types/debounce@1.2.4': {}
@ -6427,14 +6432,14 @@ snapshots:
'@types/express-serve-static-core@4.19.6': '@types/express-serve-static-core@4.19.6':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/qs': 6.9.18 '@types/qs': 6.9.18
'@types/range-parser': 1.2.7 '@types/range-parser': 1.2.7
'@types/send': 0.17.4 '@types/send': 0.17.4
'@types/express-serve-static-core@5.0.5': '@types/express-serve-static-core@5.0.5':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/qs': 6.9.18 '@types/qs': 6.9.18
'@types/range-parser': 1.2.7 '@types/range-parser': 1.2.7
'@types/send': 0.17.4 '@types/send': 0.17.4
@ -6459,30 +6464,30 @@ snapshots:
'@types/from2@2.3.5': '@types/from2@2.3.5':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/fs-extra@11.0.4': '@types/fs-extra@11.0.4':
dependencies: dependencies:
'@types/jsonfile': 6.1.4 '@types/jsonfile': 6.1.4
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/fs-extra@9.0.13': '@types/fs-extra@9.0.13':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/glob@7.2.0': '@types/glob@7.2.0':
dependencies: dependencies:
'@types/minimatch': 5.1.2 '@types/minimatch': 5.1.2
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/glob@8.1.0': '@types/glob@8.1.0':
dependencies: dependencies:
'@types/minimatch': 5.1.2 '@types/minimatch': 5.1.2
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/gunzip-maybe@1.4.2': '@types/gunzip-maybe@1.4.2':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/hast@3.0.4': '@types/hast@3.0.4':
dependencies: dependencies:
@ -6516,7 +6521,7 @@ snapshots:
'@types/jsonfile@6.1.4': '@types/jsonfile@6.1.4':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/keygrip@1.0.6': {} '@types/keygrip@1.0.6': {}
@ -6533,7 +6538,7 @@ snapshots:
'@types/http-errors': 2.0.4 '@types/http-errors': 2.0.4
'@types/keygrip': 1.0.6 '@types/keygrip': 1.0.6
'@types/koa-compose': 3.2.8 '@types/koa-compose': 3.2.8
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/mdast@4.0.4': '@types/mdast@4.0.4':
dependencies: dependencies:
@ -6551,9 +6556,9 @@ snapshots:
'@types/node-forge@1.3.11': '@types/node-forge@1.3.11':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/node@22.10.7': '@types/node@22.10.10':
dependencies: dependencies:
undici-types: 6.20.0 undici-types: 6.20.0
@ -6571,19 +6576,19 @@ snapshots:
'@types/s3rver@3.7.4': '@types/s3rver@3.7.4':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/semver@7.5.8': {} '@types/semver@7.5.8': {}
'@types/send@0.17.4': '@types/send@0.17.4':
dependencies: dependencies:
'@types/mime': 1.3.5 '@types/mime': 1.3.5
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/serve-static@1.15.7': '@types/serve-static@1.15.7':
dependencies: dependencies:
'@types/http-errors': 2.0.4 '@types/http-errors': 2.0.4
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/send': 0.17.4 '@types/send': 0.17.4
'@types/sinon-chai@3.2.12': '@types/sinon-chai@3.2.12':
@ -6603,11 +6608,11 @@ snapshots:
'@types/tar-stream@2.2.3': '@types/tar-stream@2.2.3':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/through2@2.0.41': '@types/through2@2.0.41':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/triple-beam@1.3.5': {} '@types/triple-beam@1.3.5': {}
@ -6631,7 +6636,7 @@ snapshots:
'@types/whatwg-url@8.2.2': '@types/whatwg-url@8.2.2':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/webidl-conversions': 7.0.3 '@types/webidl-conversions': 7.0.3
'@types/which@2.0.2': {} '@types/which@2.0.2': {}
@ -6640,11 +6645,11 @@ snapshots:
'@types/ws@7.4.7': '@types/ws@7.4.7':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/ws@8.5.13': '@types/ws@8.5.14':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
'@types/yargs-parser@21.0.3': {} '@types/yargs-parser@21.0.3': {}
@ -6654,10 +6659,10 @@ snapshots:
'@types/yauzl@2.10.3': '@types/yauzl@2.10.3':
dependencies: dependencies:
'@types/node': 22.10.7 '@types/node': 22.10.10
optional: true optional: true
'@ungap/structured-clone@1.2.1': {} '@ungap/structured-clone@1.3.0': {}
'@web/browser-logs@0.4.1': '@web/browser-logs@0.4.1':
dependencies: dependencies:
@ -7239,7 +7244,7 @@ snapshots:
dependencies: dependencies:
'@types/cookie': 0.4.1 '@types/cookie': 0.4.1
'@types/cors': 2.8.17 '@types/cors': 2.8.17
'@types/node': 22.10.7 '@types/node': 22.10.10
accepts: 1.3.8 accepts: 1.3.8
base64id: 2.0.0 base64id: 2.0.0
cookie: 0.4.2 cookie: 0.4.2
@ -7705,7 +7710,7 @@ snapshots:
hast-util-sanitize@5.0.2: hast-util-sanitize@5.0.2:
dependencies: dependencies:
'@types/hast': 3.0.4 '@types/hast': 3.0.4
'@ungap/structured-clone': 1.2.1 '@ungap/structured-clone': 1.3.0
unist-util-position: 5.0.0 unist-util-position: 5.0.0
hast-util-to-html@9.0.4: hast-util-to-html@9.0.4:
@ -7960,7 +7965,7 @@ snapshots:
jest-util@29.7.0: jest-util@29.7.0:
dependencies: dependencies:
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 22.10.7 '@types/node': 22.10.10
chalk: 4.1.2 chalk: 4.1.2
ci-info: 3.9.0 ci-info: 3.9.0
graceful-fs: 4.2.11 graceful-fs: 4.2.11
@ -8291,7 +8296,7 @@ snapshots:
dependencies: dependencies:
'@types/hast': 3.0.4 '@types/hast': 3.0.4
'@types/mdast': 4.0.4 '@types/mdast': 4.0.4
'@ungap/structured-clone': 1.2.1 '@ungap/structured-clone': 1.3.0
devlop: 1.1.0 devlop: 1.1.0
micromark-util-sanitize-uri: 2.0.1 micromark-util-sanitize-uri: 2.0.1
trim-lines: 3.0.1 trim-lines: 3.0.1
@ -8342,7 +8347,7 @@ snapshots:
micromark-util-html-tag-name: 2.0.1 micromark-util-html-tag-name: 2.0.1
micromark-util-normalize-identifier: 2.0.1 micromark-util-normalize-identifier: 2.0.1
micromark-util-resolve-all: 2.0.1 micromark-util-resolve-all: 2.0.1
micromark-util-subtokenize: 2.0.3 micromark-util-subtokenize: 2.0.4
micromark-util-symbol: 2.0.1 micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1 micromark-util-types: 2.0.1
@ -8380,7 +8385,7 @@ snapshots:
micromark-util-symbol: 2.0.1 micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1 micromark-util-types: 2.0.1
micromark-extension-gfm-table@2.1.0: micromark-extension-gfm-table@2.1.1:
dependencies: dependencies:
devlop: 1.1.0 devlop: 1.1.0
micromark-factory-space: 2.0.1 micromark-factory-space: 2.0.1
@ -8405,7 +8410,7 @@ snapshots:
micromark-extension-gfm-autolink-literal: 2.1.0 micromark-extension-gfm-autolink-literal: 2.1.0
micromark-extension-gfm-footnote: 2.1.0 micromark-extension-gfm-footnote: 2.1.0
micromark-extension-gfm-strikethrough: 2.1.0 micromark-extension-gfm-strikethrough: 2.1.0
micromark-extension-gfm-table: 2.1.0 micromark-extension-gfm-table: 2.1.1
micromark-extension-gfm-tagfilter: 2.0.0 micromark-extension-gfm-tagfilter: 2.0.0
micromark-extension-gfm-task-list-item: 2.1.0 micromark-extension-gfm-task-list-item: 2.1.0
micromark-util-combine-extensions: 2.0.1 micromark-util-combine-extensions: 2.0.1
@ -8492,7 +8497,7 @@ snapshots:
micromark-util-encode: 2.0.1 micromark-util-encode: 2.0.1
micromark-util-symbol: 2.0.1 micromark-util-symbol: 2.0.1
micromark-util-subtokenize@2.0.3: micromark-util-subtokenize@2.0.4:
dependencies: dependencies:
devlop: 1.1.0 devlop: 1.1.0
micromark-util-chunked: 2.0.1 micromark-util-chunked: 2.0.1
@ -8519,7 +8524,7 @@ snapshots:
micromark-util-normalize-identifier: 2.0.1 micromark-util-normalize-identifier: 2.0.1
micromark-util-resolve-all: 2.0.1 micromark-util-resolve-all: 2.0.1
micromark-util-sanitize-uri: 2.0.1 micromark-util-sanitize-uri: 2.0.1
micromark-util-subtokenize: 2.0.3 micromark-util-subtokenize: 2.0.4
micromark-util-symbol: 2.0.1 micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1 micromark-util-types: 2.0.1
transitivePeerDependencies: transitivePeerDependencies:
@ -9173,7 +9178,7 @@ snapshots:
signal-exit@4.1.0: {} signal-exit@4.1.0: {}
simple-async-context@0.0.16: {} simple-async-context@0.0.23: {}
simple-swizzle@0.2.2: simple-swizzle@0.2.2:
dependencies: dependencies:

View File

@ -1,15 +1,18 @@
import { tap, expect } from '@push.rocks/tapbundle'; import { tap, expect } from '@push.rocks/tapbundle';
import { AsyncContext } from '../ts/logcontext.classes.asynccontext.js';
import { AsyncStore } from '../ts/logcontext.classes.asyncstore.js';
process.env.DEBUG = 'true'; import * as asynccontext from '../dist_ts/index.js';
if (typeof process !== 'undefined') {
// process.env.DEBUG = 'true';
}
/** /**
* This test file demonstrates how to use the AsyncContext and ensures * This test file demonstrates how to use the AsyncContext and ensures
* that runScoped() properly creates child AsyncStore contexts and merges parent data. * that runScoped() properly creates child AsyncStore contexts and merges parent data.
*/ */
const asyncContext = new AsyncContext(); const asyncContext = new asynccontext.AsyncContext();
tap.test('should run a scoped function and add data to a child store', async () => { tap.test('should run a scoped function and add data to a child store', async () => {
// add some default data to the parent store // add some default data to the parent store

110
test/test.both.ts Normal file
View File

@ -0,0 +1,110 @@
import { tap, expect } from '@push.rocks/tapbundle';
import * as asynccontext from '../ts/index.js';
if (typeof process !== 'undefined') {
process.env.DEBUG = 'true';
}
/**
* This test file demonstrates how to use the AsyncContext and ensures
* that runScoped() properly creates child AsyncStore contexts and merges parent data.
*/
const asyncContext = new asynccontext.AsyncContext();
tap.test('should run a scoped function and add data to a child store', async () => {
// add some default data to the parent store
asyncContext.store.add('parentKey', 'parentValue');
expect(asyncContext.store.get('parentKey')).toEqual('parentValue');
// now run a child scope, add some data, and check that parent's data is still accessible
await asyncContext.runScoped(async () => {
asyncContext.store.add('childKey', 'childValue');
// child should see its own data
expect(asyncContext.store.get('childKey')).toEqual('childValue');
// child should also see parent data
expect(asyncContext.store.get('parentKey')).toEqual('parentValue');
});
});
tap.test('should not contaminate the parent store with child-only data', async () => {
// create a new child scope
await asyncContext.runScoped(async () => {
asyncContext.store.add('temporaryKey', 'temporaryValue');
expect(asyncContext.store.get('temporaryKey')).toEqual('temporaryValue');
});
// after the child scope finishes, 'temporaryKey' should not exist in the parent
expect(asyncContext.store.get('temporaryKey')).toBeUndefined();
});
tap.test('should allow adding data in multiple scopes independently', async (toolsArg) => {
const done = toolsArg.cumulativeDefer();
// add data in first scope
asyncContext.runScoped(async () => {
const subDone = done.subDefer();
asyncContext.store.add('childKey1', 'childValue1-v1');
await toolsArg.delayFor(2000);
expect(asyncContext.store.get('childKey1')).toEqual('childValue1-v1');
subDone.resolve();
});
asyncContext.runScoped(async () => {
const subDone = done.subDefer();
asyncContext.store.add('childKey1', 'childValue1-v2');
await toolsArg.delayFor(1000);
expect(asyncContext.store.get('childKey1')).toEqual('childValue1-v2');
subDone.resolve();
});
// add data in second scope
asyncContext.runScoped(async () => {
asyncContext.store.add('childKey2', 'childValue2');
expect(asyncContext.store.get('childKey2')).toEqual('childValue2');
});
// neither childKey1 nor childKey2 should exist in the parent store
expect(asyncContext.store.get('childKey1')).toBeUndefined();
expect(asyncContext.store.get('childKey2')).toBeUndefined();
await done.promise;
});
tap.test(
'should allow deleting data in a child store without removing it from the parent store',
async (toolsArg) => {
// ensure parent has some data
asyncContext.store.add('deletableKey', 'iShouldStayInParent');
await asyncContext.runScoped(async () => {
// child sees the parent's data
expect(asyncContext.store.get('deletableKey')).toEqual('iShouldStayInParent');
// attempt to delete it in the child
asyncContext.store.delete('deletableKey');
// child no longer sees it
expect(asyncContext.store.get('deletableKey')).toBeUndefined();
// but parent still has it
});
expect(asyncContext.store.get('deletableKey')).toEqual('iShouldStayInParent');
}
);
tap.test('should allow multiple child scopes to share the same parent store data', async () => {
// add a key to the parent store
asyncContext.store.add('sharedKey', 'sharedValue');
expect(asyncContext.store.get('sharedKey')).toEqual('sharedValue');
// first child scope
await asyncContext.runScoped(async () => {
expect(asyncContext.store.get('sharedKey')).toEqual('sharedValue');
});
// second child scope
await asyncContext.runScoped(async () => {
expect(asyncContext.store.get('sharedKey')).toEqual('sharedValue');
});
});
export default tap.start();

View File

@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@push.rocks/smartcontext', name: '@push.rocks/smartcontext',
version: '2.1.6', version: '2.2.1',
description: 'A module providing advanced asynchronous context management to enrich logs with context and manage scope effectively in Node.js applications.' description: 'A module providing advanced asynchronous context management to enrich logs with context and manage scope effectively in Node.js applications.'
} }

View File

@ -1,5 +1,5 @@
import * as plugins from './logcontext.plugins.js'; import * as plugins from './plugins.js';
import { AsyncStore } from './logcontext.classes.asyncstore.js'; import { AsyncStore } from './classes.asyncstore.js';
export class AsyncContext { export class AsyncContext {
private _context = new plugins.simpleAsyncContext.AsyncContext.Variable<AsyncStore>(); private _context = new plugins.simpleAsyncContext.AsyncContext.Variable<AsyncStore>();

View File

@ -1,4 +1,4 @@
import * as plugins from './logcontext.plugins.js'; import * as plugins from './plugins.js';
export class AsyncStore { export class AsyncStore {
private static idCounter = 0; private static idCounter = 0;
@ -16,7 +16,7 @@ export class AsyncStore {
* Logs debug info if process.env.DEBUG is set. * Logs debug info if process.env.DEBUG is set.
*/ */
private logDebug(functionName: string, before: Record<string, any>, after: Record<string, any>) { private logDebug(functionName: string, before: Record<string, any>, after: Record<string, any>) {
if (process.env.DEBUG) { if (typeof process !== 'undefined' && process.env && process.env.DEBUG) {
console.log(`Store ID: ${this.id}`); console.log(`Store ID: ${this.id}`);
console.log(`Function: ${functionName}`); console.log(`Function: ${functionName}`);
console.log('--- Before ---'); console.log('--- Before ---');

View File

@ -1 +1,2 @@
export * from './logcontext.classes.asynccontext.js'; export * from './classes.asynccontext.js';
export * from './classes.asyncstore.js';