@decaf-ts/logging 0.3.7 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/logging.cjs +651 -104
- package/dist/logging.esm.cjs +630 -101
- package/lib/constants.cjs +24 -6
- package/lib/constants.d.ts +7 -0
- package/lib/decorators.cjs +47 -24
- package/lib/decorators.d.ts +24 -6
- package/lib/environment.cjs +204 -0
- package/lib/environment.d.ts +86 -0
- package/lib/esm/constants.d.ts +7 -0
- package/lib/esm/constants.js +23 -5
- package/lib/esm/decorators.d.ts +24 -6
- package/lib/esm/decorators.js +46 -24
- package/lib/esm/environment.d.ts +86 -0
- package/lib/esm/environment.js +200 -0
- package/lib/esm/filters/LogFilter.d.ts +6 -0
- package/lib/esm/filters/LogFilter.js +7 -0
- package/lib/esm/filters/PatternFilter.d.ts +10 -0
- package/lib/esm/filters/PatternFilter.js +43 -0
- package/lib/esm/filters/index.d.ts +2 -0
- package/lib/esm/filters/index.js +3 -0
- package/lib/esm/index.d.ts +5 -1
- package/lib/esm/index.js +6 -2
- package/lib/esm/logging.d.ts +11 -11
- package/lib/esm/logging.js +62 -32
- package/lib/esm/text.d.ts +156 -0
- package/lib/esm/text.js +214 -0
- package/lib/esm/types.d.ts +32 -4
- package/lib/esm/types.js +1 -1
- package/lib/esm/web.d.ts +8 -0
- package/lib/esm/web.js +12 -0
- package/lib/esm/winston/winston.d.ts +2 -2
- package/lib/esm/winston/winston.js +4 -4
- package/lib/filters/LogFilter.cjs +11 -0
- package/lib/filters/LogFilter.d.ts +6 -0
- package/lib/filters/PatternFilter.cjs +47 -0
- package/lib/filters/PatternFilter.d.ts +10 -0
- package/lib/filters/index.cjs +19 -0
- package/lib/filters/index.d.ts +2 -0
- package/lib/index.cjs +6 -2
- package/lib/index.d.ts +5 -1
- package/lib/logging.cjs +61 -31
- package/lib/logging.d.ts +11 -11
- package/lib/text.cjs +227 -0
- package/lib/text.d.ts +156 -0
- package/lib/types.cjs +1 -1
- package/lib/types.d.ts +32 -4
- package/lib/web.cjs +15 -0
- package/lib/web.d.ts +8 -0
- package/lib/winston/winston.cjs +4 -4
- package/lib/winston/winston.d.ts +2 -2
- package/package.json +12 -3
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { ObjectAccumulator } from "typed-object-accumulator";
|
|
2
|
+
import { toENVFormat } from "./text.js";
|
|
3
|
+
import { isBrowser } from "./web.js";
|
|
4
|
+
import { BrowserEnvKey, DefaultLoggingConfig, ENV_PATH_DELIMITER, } from "./constants.js";
|
|
5
|
+
/**
|
|
6
|
+
* @class Environment
|
|
7
|
+
* @extends {ObjectAccumulator<T>}
|
|
8
|
+
* @template T
|
|
9
|
+
* @description A class representing an environment with accumulation capabilities.
|
|
10
|
+
* @summary Manages environment-related data and provides methods for accumulation and key retrieval.
|
|
11
|
+
* @param {T} [initialData] - The initial data to populate the environment with.
|
|
12
|
+
*/
|
|
13
|
+
export class Environment extends ObjectAccumulator {
|
|
14
|
+
/**
|
|
15
|
+
* @static
|
|
16
|
+
* @protected
|
|
17
|
+
* @description A factory function for creating Environment instances.
|
|
18
|
+
* @summary Defines how new instances of the Environment class should be created.
|
|
19
|
+
* @return {Environment<any>} A new instance of the Environment class.
|
|
20
|
+
*/
|
|
21
|
+
static { this.factory = () => new Environment(); }
|
|
22
|
+
constructor() {
|
|
23
|
+
super();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* @description Retrieves a value from the environment
|
|
27
|
+
* @summary Gets a value from the environment variables, handling browser and Node.js environments differently
|
|
28
|
+
* @param {string} k - The key to retrieve from the environment
|
|
29
|
+
* @return {unknown} The value from the environment, or undefined if not found
|
|
30
|
+
*/
|
|
31
|
+
fromEnv(k) {
|
|
32
|
+
let env;
|
|
33
|
+
if (isBrowser()) {
|
|
34
|
+
env = globalThis[BrowserEnvKey];
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
env = globalThis.process.env;
|
|
38
|
+
k = toENVFormat(k);
|
|
39
|
+
}
|
|
40
|
+
return env[k];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* @description Expands an object into the environment
|
|
44
|
+
* @summary Defines properties on the environment object that can be accessed as getters and setters
|
|
45
|
+
* @template V - Type of the object being expanded
|
|
46
|
+
* @param {V} value - The object to expand into the environment
|
|
47
|
+
* @return {void}
|
|
48
|
+
*/
|
|
49
|
+
expand(value) {
|
|
50
|
+
Object.entries(value).forEach(([k, v]) => {
|
|
51
|
+
Object.defineProperty(this, k, {
|
|
52
|
+
get: () => {
|
|
53
|
+
const fromEnv = this.fromEnv(k);
|
|
54
|
+
if (typeof fromEnv !== "undefined")
|
|
55
|
+
return fromEnv;
|
|
56
|
+
if (v && typeof v === "object") {
|
|
57
|
+
return Environment.buildEnvProxy(v, [k]);
|
|
58
|
+
}
|
|
59
|
+
// If the model provides an empty string, expose a proxy that composes ENV keys
|
|
60
|
+
if (v === "") {
|
|
61
|
+
return Environment.buildEnvProxy(undefined, [k]);
|
|
62
|
+
}
|
|
63
|
+
return v;
|
|
64
|
+
},
|
|
65
|
+
set: (val) => {
|
|
66
|
+
v = val;
|
|
67
|
+
},
|
|
68
|
+
configurable: true,
|
|
69
|
+
enumerable: true,
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* @protected
|
|
75
|
+
* @static
|
|
76
|
+
* @description Retrieves or creates the singleton instance of the Environment class.
|
|
77
|
+
* @summary Ensures only one instance of the Environment class exists.
|
|
78
|
+
* @template E
|
|
79
|
+
* @param {...unknown[]} args - Arguments to pass to the factory function if a new instance is created.
|
|
80
|
+
* @return {E} The singleton instance of the Environment class.
|
|
81
|
+
*/
|
|
82
|
+
static instance(...args) {
|
|
83
|
+
if (!Environment._instance) {
|
|
84
|
+
const base = Environment.factory(...args);
|
|
85
|
+
const proxied = new Proxy(base, {
|
|
86
|
+
get(target, prop, receiver) {
|
|
87
|
+
const value = Reflect.get(target, prop, receiver);
|
|
88
|
+
if (typeof value !== "undefined")
|
|
89
|
+
return value;
|
|
90
|
+
if (typeof prop === "string") {
|
|
91
|
+
// Avoid interfering with logging config lookups for optional fields like 'app'
|
|
92
|
+
if (prop === "app")
|
|
93
|
+
return undefined;
|
|
94
|
+
return Environment.buildEnvProxy(undefined, [prop]);
|
|
95
|
+
}
|
|
96
|
+
return value;
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
Environment._instance = proxied;
|
|
100
|
+
}
|
|
101
|
+
return Environment._instance;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* @static
|
|
105
|
+
* @description Accumulates the given value into the environment.
|
|
106
|
+
* @summary Adds new properties to the environment from the provided object.
|
|
107
|
+
* @template V
|
|
108
|
+
* @param {V} value - The object to accumulate into the environment.
|
|
109
|
+
* @return {V} The updated environment instance.
|
|
110
|
+
*/
|
|
111
|
+
static accumulate(value) {
|
|
112
|
+
const instance = Environment.instance();
|
|
113
|
+
Object.keys(instance).forEach((key) => {
|
|
114
|
+
const desc = Object.getOwnPropertyDescriptor(instance, key);
|
|
115
|
+
if (desc && desc.configurable && desc.enumerable) {
|
|
116
|
+
Object.defineProperty(instance, key, {
|
|
117
|
+
...desc,
|
|
118
|
+
enumerable: false,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
return instance.accumulate(value);
|
|
123
|
+
}
|
|
124
|
+
static get(key) {
|
|
125
|
+
return Environment._instance.get(key);
|
|
126
|
+
}
|
|
127
|
+
static buildEnvProxy(current, path) {
|
|
128
|
+
const buildKey = (p) => p.map((seg) => toENVFormat(seg)).join(ENV_PATH_DELIMITER);
|
|
129
|
+
// Helper to read from the active environment given a composed key
|
|
130
|
+
const readEnv = (key) => {
|
|
131
|
+
if (isBrowser()) {
|
|
132
|
+
const env = globalThis[BrowserEnvKey];
|
|
133
|
+
return env ? env[key] : undefined;
|
|
134
|
+
}
|
|
135
|
+
return globalThis?.process?.env?.[key];
|
|
136
|
+
};
|
|
137
|
+
const handler = {
|
|
138
|
+
get(_target, prop) {
|
|
139
|
+
if (prop === Symbol.toPrimitive) {
|
|
140
|
+
return () => buildKey(path);
|
|
141
|
+
}
|
|
142
|
+
if (prop === "toString") {
|
|
143
|
+
return () => buildKey(path);
|
|
144
|
+
}
|
|
145
|
+
if (prop === "valueOf") {
|
|
146
|
+
return () => buildKey(path);
|
|
147
|
+
}
|
|
148
|
+
if (typeof prop === "symbol")
|
|
149
|
+
return undefined;
|
|
150
|
+
const nextModel = current && Object.prototype.hasOwnProperty.call(current, prop)
|
|
151
|
+
? current[prop]
|
|
152
|
+
: undefined;
|
|
153
|
+
const nextPath = [...path, prop];
|
|
154
|
+
const composedKey = buildKey(nextPath);
|
|
155
|
+
// If an ENV value exists for this path, return it directly
|
|
156
|
+
const envValue = readEnv(composedKey);
|
|
157
|
+
if (typeof envValue !== "undefined")
|
|
158
|
+
return envValue;
|
|
159
|
+
// Otherwise, if the model has an object at this path, keep drilling with a proxy
|
|
160
|
+
const isNextObject = nextModel && typeof nextModel === "object";
|
|
161
|
+
if (isNextObject)
|
|
162
|
+
return Environment.buildEnvProxy(nextModel, nextPath);
|
|
163
|
+
// Always return a proxy for further path composition when no ENV value;
|
|
164
|
+
// do not surface primitive model defaults here (this API is for key composition).
|
|
165
|
+
return Environment.buildEnvProxy(undefined, nextPath);
|
|
166
|
+
},
|
|
167
|
+
ownKeys() {
|
|
168
|
+
return current ? Reflect.ownKeys(current) : [];
|
|
169
|
+
},
|
|
170
|
+
getOwnPropertyDescriptor(_t, p) {
|
|
171
|
+
if (!current)
|
|
172
|
+
return undefined;
|
|
173
|
+
if (Object.prototype.hasOwnProperty.call(current, p)) {
|
|
174
|
+
return { enumerable: true, configurable: true };
|
|
175
|
+
}
|
|
176
|
+
return undefined;
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
const target = {};
|
|
180
|
+
return new Proxy(target, handler);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* @static
|
|
184
|
+
* @description Retrieves the keys of the environment, optionally converting them to ENV format.
|
|
185
|
+
* @summary Gets all keys in the environment, with an option to format them for environment variables.
|
|
186
|
+
* @param {boolean} [toEnv=true] - Whether to convert the keys to ENV format.
|
|
187
|
+
* @return {string[]} An array of keys from the environment.
|
|
188
|
+
*/
|
|
189
|
+
static keys(toEnv = true) {
|
|
190
|
+
return Environment.instance()
|
|
191
|
+
.keys()
|
|
192
|
+
.map((k) => (toEnv ? toENVFormat(k) : k));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
export const LoggedEnvironment = Environment.accumulate(Object.assign({}, DefaultLoggingConfig, {
|
|
196
|
+
env: (isBrowser() && globalThis[BrowserEnvKey]
|
|
197
|
+
? globalThis[BrowserEnvKey]["NODE_ENV"]
|
|
198
|
+
: globalThis.process.env["NODE_ENV"]) || "development",
|
|
199
|
+
}));
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBZTtBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFjO0FBQ2xDLE9BQU8sRUFDTCxhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLGtCQUFrQixHQUNuQix1QkFBb0I7QUFlckI7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxXQUE4QixTQUFRLGlCQUFvQjtJQUNyRTs7Ozs7O09BTUc7YUFDYyxZQUFPLEdBQ3RCLEdBQXFCLEVBQUUsQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBVTVDO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxPQUFPLENBQUMsQ0FBUztRQUN6QixJQUFJLEdBQTRCLENBQUM7UUFDakMsSUFBSSxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ2hCLEdBQUcsR0FDRCxVQUdELENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDN0IsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNnQixNQUFNLENBQW1CLEtBQVE7UUFDbEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsRUFB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QUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBd0IsQ0FBQztnQkFDeEUsQ0FBQztnQkFDRCxPQUFPLFNBQWdCLENBQUM7WUFDMUIsQ0FBQztTQUNGLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxFQUFTLENBQUM7UUFDekIsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBaUIsSUFBSTtRQUMvQixPQUFPLFdBQVcsQ0FBQyxRQUFRLEVBQUU7YUFDMUIsSUFBSSxFQUFFO2FBQ04sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7O0FBR0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsb0JBQW9CLEVBQUU7SUFDdEMsR0FBRyxFQUNELENBQUMsU0FBUyxFQUFFLElBQUssVUFBa0IsQ0FBQyxhQUFhLENBQUM7UUFDaEQsQ0FBQyxDQUFFLFVBQWtCLENBQUMsYUFBYSxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ2hELENBQUMsQ0FBRSxVQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxhQUFhO0NBQ3BFLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JqZWN0QWNjdW11bGF0b3IgfSBmcm9tIFwidHlwZWQtb2JqZWN0LWFjY3VtdWxhdG9yXCI7XG5pbXBvcnQgeyB0b0VOVkZvcm1hdCB9IGZyb20gXCIuL3RleHRcIjtcbmltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gXCIuL3dlYlwiO1xuaW1wb3J0IHtcbiAgQnJvd3NlckVudktleSxcbiAgRGVmYXVsdExvZ2dpbmdDb25maWcsXG4gIEVOVl9QQVRIX0RFTElNSVRFUixcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZhY3RvcnkgdHlwZSBmb3IgY3JlYXRpbmcgRW52aXJvbm1lbnQgaW5zdGFuY2VzLlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGZ1bmN0aW9uIHR5cGUgdGhhdCBjcmVhdGVzIGFuZCByZXR1cm5zIEVudmlyb25tZW50IGluc3RhbmNlcy5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIG9iamVjdCB0aGUgRW52aXJvbm1lbnQgd2lsbCBhY2N1bXVsYXRlLlxuICogQHRlbXBsYXRlIEUgLSBUaGUgc3BlY2lmaWMgRW52aXJvbm1lbnQgdHlwZSB0byBiZSBjcmVhdGVkLCBleHRlbmRpbmcgRW52aXJvbm1lbnQ8VD4uXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb24oLi4udW5rbm93bltdKTogRX0gRW52aXJvbm1lbnRGYWN0b3J5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnRGYWN0b3J5PFQgZXh0ZW5kcyBvYmplY3QsIEUgZXh0ZW5kcyBFbnZpcm9ubWVudDxUPj4gPSAoXG4gIC4uLmFyZ3M6IHVua25vd25bXVxuKSA9PiBFO1xuXG4vKipcbiAqIEBjbGFzcyBFbnZpcm9ubWVudFxuICogQGV4dGVuZHMge09iamVjdEFjY3VtdWxhdG9yPFQ+fVxuICogQHRlbXBsYXRlIFRcbiAqIEBkZXNjcmlwdGlvbiBBIGNsYXNzIHJlcHJlc2VudGluZyBhbiBlbnZpcm9ubWVudCB3aXRoIGFjY3VtdWxhdGlvbiBjYXBhYmlsaXRpZXMuXG4gKiBAc3VtbWFyeSBNYW5hZ2VzIGVudmlyb25tZW50LXJlbGF0ZWQgZGF0YSBhbmQgcHJvdmlkZXMgbWV0aG9kcyBmb3IgYWNjdW11bGF0aW9uIGFuZCBrZXkgcmV0cmlldmFsLlxuICogQHBhcmFtIHtUfSBbaW5pdGlhbERhdGFdIC0gVGhlIGluaXRpYWwgZGF0YSB0byBwb3B1bGF0ZSB0aGUgZW52aXJvbm1lbnQgd2l0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVudmlyb25tZW50PFQgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgT2JqZWN0QWNjdW11bGF0b3I8VD4ge1xuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBkZXNjcmlwdGlvbiBBIGZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIEVudmlyb25tZW50IGluc3RhbmNlcy5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyBob3cgbmV3IGluc3RhbmNlcyBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3Mgc2hvdWxkIGJlIGNyZWF0ZWQuXG4gICAqIEByZXR1cm4ge0Vudmlyb25tZW50PGFueT59IEEgbmV3IGluc3RhbmNlIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcy5cbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgZmFjdG9yeTogRW52aXJvbm1lbnRGYWN0b3J5PGFueSwgYW55PiA9XG4gICAgKCk6IEVudmlyb25tZW50PGFueT4gPT4gbmV3IEVudmlyb25tZW50KCk7XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQHByaXZhdGVcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKiBAdHlwZSB7RW52aXJvbm1lbnQ8YW55Pn1cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogRW52aXJvbm1lbnQ8YW55PjtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAgICogQHN1bW1hcnkgR2V0cyBhIHZhbHVlIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcywgaGFuZGxpbmcgYnJvd3NlciBhbmQgTm9kZS5qcyBlbnZpcm9ubWVudHMgZGlmZmVyZW50bHlcbiAgICogQHBhcmFtIHtzdHJpbmd9IGsgLSBUaGUga2V5IHRvIHJldHJpZXZlIGZyb20gdGhlIGVudmlyb25tZW50XG4gICAqIEByZXR1cm4ge3Vua25vd259IFRoZSB2YWx1ZSBmcm9tIHRoZSBlbnZpcm9ubWVudCwgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgcHJvdGVjdGVkIGZyb21FbnYoazogc3RyaW5nKSB7XG4gICAgbGV0IGVudjogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKGlzQnJvd3NlcigpKSB7XG4gICAgICBlbnYgPSAoXG4gICAgICAgIGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7XG4gICAgICAgICAgW0Jyb3dzZXJFbnZLZXldOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgICB9XG4gICAgICApW0Jyb3dzZXJFbnZLZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnYgPSBnbG9iYWxUaGlzLnByb2Nlc3MuZW52O1xuICAgICAgayA9IHRvRU5WRm9ybWF0KGspO1xuICAgIH1cbiAgICByZXR1cm4gZW52W2tdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFeHBhbmRzIGFuIG9iamVjdCBpbnRvIHRoZSBlbnZpcm9ubWVudFxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIHByb3BlcnRpZXMgb24gdGhlIGVudmlyb25tZW50IG9iamVjdCB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBhcyBnZXR0ZXJzIGFuZCBzZXR0ZXJzXG4gICAqIEB0ZW1wbGF0ZSBWIC0gVHlwZSBvZiB0aGUgb2JqZWN0IGJlaW5nIGV4cGFuZGVkXG4gICAqIEBwYXJhbSB7Vn0gdmFsdWUgLSBUaGUgb2JqZWN0IHRvIGV4cGFuZCBpbnRvIHRoZSBlbnZpcm9ubWVudFxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGV4cGFuZDxWIGV4dGVuZHMgb2JqZWN0Pih2YWx1ZTogVik6IHZvaWQge1xuICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZyb21FbnYgPSB0aGlzLmZyb21FbnYoayk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBmcm9tRW52ICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZnJvbUVudjtcbiAgICAgICAgICBpZiAodiAmJiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuIEVudmlyb25tZW50LmJ1aWxkRW52UHJveHkodiBhcyBhbnksIFtrXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIElmIHRoZSBtb2RlbCBwcm92aWRlcyBhbiBlbXB0eSBzdHJpbmcsIGV4cG9zZSBhIHByb3h5IHRoYXQgY29tcG9zZXMgRU5WIGtleXNcbiAgICAgICAgICBpZiAodiA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIEVudmlyb25tZW50LmJ1aWxkRW52UHJveHkodW5kZWZpbmVkLCBba10pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiAodmFsOiBWW2tleW9mIFZdKSA9PiB7XG4gICAgICAgICAgdiA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBAc3RhdGljXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgb3IgY3JlYXRlcyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcy5cbiAgICogQHN1bW1hcnkgRW5zdXJlcyBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MgZXhpc3RzLlxuICAgKiBAdGVtcGxhdGUgRVxuICAgKiBAcGFyYW0gey4uLnVua25vd25bXX0gYXJncyAtIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGlmIGEgbmV3IGluc3RhbmNlIGlzIGNyZWF0ZWQuXG4gICAqIEByZXR1cm4ge0V9IFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyBpbnN0YW5jZTxFIGV4dGVuZHMgRW52aXJvbm1lbnQ8YW55Pj4oLi4uYXJnczogdW5rbm93bltdKTogRSB7XG4gICAgaWYgKCFFbnZpcm9ubWVudC5faW5zdGFuY2UpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSBFbnZpcm9ubWVudC5mYWN0b3J5KC4uLmFyZ3MpIGFzIEU7XG4gICAgICBjb25zdCBwcm94aWVkID0gbmV3IFByb3h5KGJhc2UgYXMgYW55LCB7XG4gICAgICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyBBdm9pZCBpbnRlcmZlcmluZyB3aXRoIGxvZ2dpbmcgY29uZmlnIGxvb2t1cHMgZm9yIG9wdGlvbmFsIGZpZWxkcyBsaWtlICdhcHAnXG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJhcHBcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5idWlsZEVudlByb3h5KHVuZGVmaW5lZCwgW3Byb3BdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBFbnZpcm9ubWVudC5faW5zdGFuY2UgPSBwcm94aWVkIGFzIGFueTtcbiAgICB9XG4gICAgcmV0dXJuIEVudmlyb25tZW50Ll9pbnN0YW5jZSBhcyBFO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIEFjY3VtdWxhdGVzIHRoZSBnaXZlbiB2YWx1ZSBpbnRvIHRoZSBlbnZpcm9ubWVudC5cbiAgICogQHN1bW1hcnkgQWRkcyBuZXcgcHJvcGVydGllcyB0byB0aGUgZW52aXJvbm1lbnQgZnJvbSB0aGUgcHJvdmlkZWQgb2JqZWN0LlxuICAgKiBAdGVtcGxhdGUgVlxuICAgKiBAcGFyYW0ge1Z9IHZhbHVlIC0gVGhlIG9iamVjdCB0byBhY2N1bXVsYXRlIGludG8gdGhlIGVudmlyb25tZW50LlxuICAgKiBAcmV0dXJuIHtWfSBUaGUgdXBkYXRlZCBlbnZpcm9ubWVudCBpbnN0YW5jZS5cbiAgICovXG4gIHN0YXRpYyBhY2N1bXVsYXRlPFYgZXh0ZW5kcyBvYmplY3Q+KFxuICAgIHZhbHVlOiBWXG4gICk6IHR5cGVvZiBFbnZpcm9ubWVudC5faW5zdGFuY2UgJlxuICAgIFYgJlxuICAgIE9iamVjdEFjY3VtdWxhdG9yPHR5cGVvZiBFbnZpcm9ubWVudC5faW5zdGFuY2UgJiBWPiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBFbnZpcm9ubWVudC5pbnN0YW5jZSgpO1xuICAgIE9iamVjdC5rZXlzKGluc3RhbmNlIGFzIGFueSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbnN0YW5jZSBhcyBhbnksIGtleSk7XG4gICAgICBpZiAoZGVzYyAmJiBkZXNjLmNvbmZpZ3VyYWJsZSAmJiBkZXNjLmVudW1lcmFibGUpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3RhbmNlIGFzIGFueSwga2V5LCB7XG4gICAgICAgICAgLi4uZGVzYyxcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGluc3RhbmNlLmFjY3VtdWxhdGUodmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBFbnZpcm9ubWVudC5faW5zdGFuY2UuZ2V0KGtleSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBidWlsZEVudlByb3h5KGN1cnJlbnQ6IGFueSwgcGF0aDogc3RyaW5nW10pOiBhbnkge1xuICAgIGNvbnN0IGJ1aWxkS2V5ID0gKHA6IHN0cmluZ1tdKSA9PlxuICAgICAgcC5tYXAoKHNlZykgPT4gdG9FTlZGb3JtYXQoc2VnKSkuam9pbihFTlZfUEFUSF9ERUxJTUlURVIpO1xuXG4gICAgLy8gSGVscGVyIHRvIHJlYWQgZnJvbSB0aGUgYWN0aXZlIGVudmlyb25tZW50IGdpdmVuIGEgY29tcG9zZWQga2V5XG4gICAgY29uc3QgcmVhZEVudiA9IChrZXk6IHN0cmluZyk6IHVua25vd24gPT4ge1xuICAgICAgaWYgKGlzQnJvd3NlcigpKSB7XG4gICAgICAgIGNvbnN0IGVudiA9IChcbiAgICAgICAgICBnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYge1xuICAgICAgICAgICAgW0Jyb3dzZXJFbnZLZXldPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgfVxuICAgICAgICApW0Jyb3dzZXJFbnZLZXldO1xuICAgICAgICByZXR1cm4gZW52ID8gZW52W2tleV0gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gKGdsb2JhbFRoaXMgYXMgYW55KT8ucHJvY2Vzcz8uZW52Py5ba2V5XTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlcjogUHJveHlIYW5kbGVyPGFueT4gPSB7XG4gICAgICBnZXQoX3RhcmdldCwgcHJvcDogc3RyaW5nIHwgc3ltYm9sKSB7XG4gICAgICAgIGlmIChwcm9wID09PSBTeW1ib2wudG9QcmltaXRpdmUpIHtcbiAgICAgICAgICByZXR1cm4gKCkgPT4gYnVpbGRLZXkocGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3AgPT09IFwidG9TdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiAoKSA9PiBidWlsZEtleShwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcCA9PT0gXCJ2YWx1ZU9mXCIpIHtcbiAgICAgICAgICByZXR1cm4gKCkgPT4gYnVpbGRLZXkocGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSBcInN5bWJvbFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IG5leHRNb2RlbCA9XG4gICAgICAgICAgY3VycmVudCAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY3VycmVudCwgcHJvcClcbiAgICAgICAgICAgID8gKGN1cnJlbnQgYXMgYW55KVtwcm9wXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IG5leHRQYXRoID0gWy4uLnBhdGgsIHByb3BdO1xuICAgICAgICBjb25zdCBjb21wb3NlZEtleSA9IGJ1aWxkS2V5KG5leHRQYXRoKTtcblxuICAgICAgICAvLyBJZiBhbiBFTlYgdmFsdWUgZXhpc3RzIGZvciB0aGlzIHBhdGgsIHJldHVybiBpdCBkaXJlY3RseVxuICAgICAgICBjb25zdCBlbnZWYWx1ZSA9IHJlYWRFbnYoY29tcG9zZWRLZXkpO1xuICAgICAgICBpZiAodHlwZW9mIGVudlZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZW52VmFsdWU7XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiB0aGUgbW9kZWwgaGFzIGFuIG9iamVjdCBhdCB0aGlzIHBhdGgsIGtlZXAgZHJpbGxpbmcgd2l0aCBhIHByb3h5XG4gICAgICAgIGNvbnN0IGlzTmV4dE9iamVjdCA9IG5leHRNb2RlbCAmJiB0eXBlb2YgbmV4dE1vZGVsID09PSBcIm9iamVjdFwiO1xuICAgICAgICBpZiAoaXNOZXh0T2JqZWN0KSByZXR1cm4gRW52aXJvbm1lbnQuYnVpbGRFbnZQcm94eShuZXh0TW9kZWwsIG5leHRQYXRoKTtcblxuICAgICAgICAvLyBBbHdheXMgcmV0dXJuIGEgcHJveHkgZm9yIGZ1cnRoZXIgcGF0aCBjb21wb3NpdGlvbiB3aGVuIG5vIEVOViB2YWx1ZTtcbiAgICAgICAgLy8gZG8gbm90IHN1cmZhY2UgcHJpbWl0aXZlIG1vZGVsIGRlZmF1bHRzIGhlcmUgKHRoaXMgQVBJIGlzIGZvciBrZXkgY29tcG9zaXRpb24pLlxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuYnVpbGRFbnZQcm94eSh1bmRlZmluZWQsIG5leHRQYXRoKTtcbiAgICAgIH0sXG4gICAgICBvd25LZXlzKCkge1xuICAgICAgICByZXR1cm4gY3VycmVudCA/IFJlZmxlY3Qub3duS2V5cyhjdXJyZW50KSA6IFtdO1xuICAgICAgfSxcbiAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihfdCwgcCkge1xuICAgICAgICBpZiAoIWN1cnJlbnQpIHJldHVybiB1bmRlZmluZWQgYXMgYW55O1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnJlbnQsIHApKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gYXMgUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQgYXMgYW55O1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFyZ2V0ID0ge30gYXMgYW55O1xuICAgIHJldHVybiBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgdGhlIGtleXMgb2YgdGhlIGVudmlyb25tZW50LCBvcHRpb25hbGx5IGNvbnZlcnRpbmcgdGhlbSB0byBFTlYgZm9ybWF0LlxuICAgKiBAc3VtbWFyeSBHZXRzIGFsbCBrZXlzIGluIHRoZSBlbnZpcm9ubWVudCwgd2l0aCBhbiBvcHRpb24gdG8gZm9ybWF0IHRoZW0gZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbdG9FbnY9dHJ1ZV0gLSBXaGV0aGVyIHRvIGNvbnZlcnQgdGhlIGtleXMgdG8gRU5WIGZvcm1hdC5cbiAgICogQHJldHVybiB7c3RyaW5nW119IEFuIGFycmF5IG9mIGtleXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuXG4gICAqL1xuICBzdGF0aWMga2V5cyh0b0VudjogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIEVudmlyb25tZW50Lmluc3RhbmNlKClcbiAgICAgIC5rZXlzKClcbiAgICAgIC5tYXAoKGspID0+ICh0b0VudiA/IHRvRU5WRm9ybWF0KGspIDogaykpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBMb2dnZWRFbnZpcm9ubWVudCA9IEVudmlyb25tZW50LmFjY3VtdWxhdGUoXG4gIE9iamVjdC5hc3NpZ24oe30sIERlZmF1bHRMb2dnaW5nQ29uZmlnLCB7XG4gICAgZW52OlxuICAgICAgKGlzQnJvd3NlcigpICYmIChnbG9iYWxUaGlzIGFzIGFueSlbQnJvd3NlckVudktleV1cbiAgICAgICAgPyAoZ2xvYmFsVGhpcyBhcyBhbnkpW0Jyb3dzZXJFbnZLZXldW1wiTk9ERV9FTlZcIl1cbiAgICAgICAgOiAoZ2xvYmFsVGhpcyBhcyBhbnkpLnByb2Nlc3MuZW52W1wiTk9ERV9FTlZcIl0pIHx8IFwiZGV2ZWxvcG1lbnRcIixcbiAgfSlcbik7XG4iXX0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Logger, LoggingConfig, LoggingFilter } from "../types";
|
|
2
|
+
import { LoggedClass } from "../LoggedClass";
|
|
3
|
+
export declare abstract class LogFilter extends LoggedClass implements LoggingFilter {
|
|
4
|
+
get log(): Logger;
|
|
5
|
+
abstract filter(config: LoggingConfig, message: string, context: string[]): string;
|
|
6
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { LoggedClass } from "./../LoggedClass.js";
|
|
2
|
+
export class LogFilter extends LoggedClass {
|
|
3
|
+
get log() {
|
|
4
|
+
return super.log.for(this, { filters: [] });
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9nRmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ZpbHRlcnMvTG9nRmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsNEJBQXVCO0FBRTdDLE1BQU0sT0FBZ0IsU0FBVSxTQUFRLFdBQVc7SUFDakQsSUFBYSxHQUFHO1FBQ2QsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBT0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2dnZXIsIExvZ2dpbmdDb25maWcsIExvZ2dpbmdGaWx0ZXIgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IExvZ2dlZENsYXNzIH0gZnJvbSBcIi4uL0xvZ2dlZENsYXNzXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBMb2dGaWx0ZXIgZXh0ZW5kcyBMb2dnZWRDbGFzcyBpbXBsZW1lbnRzIExvZ2dpbmdGaWx0ZXIge1xuICBvdmVycmlkZSBnZXQgbG9nKCk6IExvZ2dlciB7XG4gICAgcmV0dXJuIHN1cGVyLmxvZy5mb3IodGhpcyBhcyBhbnksIHsgZmlsdGVyczogW10gfSk7XG4gIH1cblxuICBhYnN0cmFjdCBmaWx0ZXIoXG4gICAgY29uZmlnOiBMb2dnaW5nQ29uZmlnLFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBjb250ZXh0OiBzdHJpbmdbXVxuICApOiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { LogFilter } from "./LogFilter";
|
|
2
|
+
import { LoggingConfig } from "../types";
|
|
3
|
+
export type ReplacementFunction = (substring: string, ...args: any[]) => string;
|
|
4
|
+
export declare class PatternFilter extends LogFilter {
|
|
5
|
+
protected readonly regexp: RegExp;
|
|
6
|
+
protected readonly replacement: string | ReplacementFunction;
|
|
7
|
+
constructor(regexp: RegExp, replacement: string | ReplacementFunction);
|
|
8
|
+
protected match(message: string): RegExpExecArray | null;
|
|
9
|
+
filter(config: LoggingConfig, message: string, context: string[]): string;
|
|
10
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { LogFilter } from "./LogFilter.js";
|
|
11
|
+
import { final } from "./../decorators.js";
|
|
12
|
+
export class PatternFilter extends LogFilter {
|
|
13
|
+
constructor(regexp, replacement) {
|
|
14
|
+
super();
|
|
15
|
+
this.regexp = regexp;
|
|
16
|
+
this.replacement = replacement;
|
|
17
|
+
}
|
|
18
|
+
match(message) {
|
|
19
|
+
const match = this.regexp.exec(message);
|
|
20
|
+
this.regexp.lastIndex = 0;
|
|
21
|
+
return match;
|
|
22
|
+
}
|
|
23
|
+
filter(config, message, context) {
|
|
24
|
+
const log = this.log.for(this.filter);
|
|
25
|
+
const match = this.match(message);
|
|
26
|
+
if (!match)
|
|
27
|
+
return message;
|
|
28
|
+
try {
|
|
29
|
+
return message.replace(this.regexp, this.replacement);
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
log.error(`PatternFilter replacement error: ${e}`);
|
|
33
|
+
}
|
|
34
|
+
return "";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
__decorate([
|
|
38
|
+
final(),
|
|
39
|
+
__metadata("design:type", Function),
|
|
40
|
+
__metadata("design:paramtypes", [String]),
|
|
41
|
+
__metadata("design:returntype", void 0)
|
|
42
|
+
], PatternFilter.prototype, "match", null);
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF0dGVybkZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9maWx0ZXJzL1BhdHRlcm5GaWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSx1QkFBb0I7QUFFeEMsT0FBTyxFQUFFLEtBQUssRUFBRSwyQkFBc0I7QUFJdEMsTUFBTSxPQUFPLGFBQWMsU0FBUSxTQUFTO0lBQzFDLFlBQ3FCLE1BQWMsRUFDZCxXQUF5QztRQUU1RCxLQUFLLEVBQUUsQ0FBQztRQUhXLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FBOEI7SUFHOUQsQ0FBQztJQUdTLEtBQUssQ0FBQyxPQUFlO1FBQzdCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUMxQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBcUIsRUFBRSxPQUFlLEVBQUUsT0FBaUI7UUFDOUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLE9BQU8sQ0FBQztRQUMzQixJQUFJLENBQUM7WUFDSCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBa0IsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO1lBQ3BCLEdBQUcsQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztDQUNGO0FBakJXO0lBRFQsS0FBSyxFQUFFOzs7OzBDQUtQIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9nRmlsdGVyIH0gZnJvbSBcIi4vTG9nRmlsdGVyXCI7XG5pbXBvcnQgeyBMb2dnaW5nQ29uZmlnIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBmaW5hbCB9IGZyb20gXCIuLi9kZWNvcmF0b3JzXCI7XG5cbmV4cG9ydCB0eXBlIFJlcGxhY2VtZW50RnVuY3Rpb24gPSAoc3Vic3RyaW5nOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSA9PiBzdHJpbmc7XG5cbmV4cG9ydCBjbGFzcyBQYXR0ZXJuRmlsdGVyIGV4dGVuZHMgTG9nRmlsdGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlZ2V4cDogUmVnRXhwLFxuICAgIHByb3RlY3RlZCByZWFkb25seSByZXBsYWNlbWVudDogc3RyaW5nIHwgUmVwbGFjZW1lbnRGdW5jdGlvblxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgQGZpbmFsKClcbiAgcHJvdGVjdGVkIG1hdGNoKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IG1hdGNoID0gdGhpcy5yZWdleHAuZXhlYyhtZXNzYWdlKTtcbiAgICB0aGlzLnJlZ2V4cC5sYXN0SW5kZXggPSAwO1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuXG4gIGZpbHRlcihjb25maWc6IExvZ2dpbmdDb25maWcsIG1lc3NhZ2U6IHN0cmluZywgY29udGV4dDogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmZpbHRlcik7XG4gICAgY29uc3QgbWF0Y2ggPSB0aGlzLm1hdGNoKG1lc3NhZ2UpO1xuICAgIGlmICghbWF0Y2gpIHJldHVybiBtZXNzYWdlO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbWVzc2FnZS5yZXBsYWNlKHRoaXMucmVnZXhwLCB0aGlzLnJlcGxhY2VtZW50IGFzIGFueSk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgbG9nLmVycm9yKGBQYXR0ZXJuRmlsdGVyIHJlcGxhY2VtZW50IGVycm9yOiAke2V9YCk7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from "./LogFilter.js";
|
|
2
|
+
export * from "./PatternFilter.js";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmlsdGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBNEI7QUFDNUIsbUNBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vTG9nRmlsdGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9QYXR0ZXJuRmlsdGVyXCI7XG4iXX0=
|
package/lib/esm/index.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
export * from "./filters";
|
|
1
2
|
export * from "./constants";
|
|
2
3
|
export * from "./decorators";
|
|
4
|
+
export * from "./environment";
|
|
3
5
|
export * from "./LoggedClass";
|
|
4
6
|
export * from "./logging";
|
|
7
|
+
export * from "./text";
|
|
5
8
|
export * from "./types";
|
|
9
|
+
export * from "./web";
|
|
6
10
|
/**
|
|
7
11
|
* @description A logging module for TypeScript applications
|
|
8
12
|
* @summary Provides a comprehensive, flexible logging solution. This module exposes:
|
|
@@ -19,4 +23,4 @@ export * from "./types";
|
|
|
19
23
|
* @const VERSION
|
|
20
24
|
* @memberOf module:Logging
|
|
21
25
|
*/
|
|
22
|
-
export declare const VERSION = "0.3.
|
|
26
|
+
export declare const VERSION = "0.3.9";
|
package/lib/esm/index.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
export * from "./filters/index.js";
|
|
1
2
|
export * from "./constants.js";
|
|
2
3
|
export * from "./decorators.js";
|
|
4
|
+
export * from "./environment.js";
|
|
3
5
|
export * from "./LoggedClass.js";
|
|
4
6
|
export * from "./logging.js";
|
|
7
|
+
export * from "./text.js";
|
|
5
8
|
export * from "./types.js";
|
|
9
|
+
export * from "./web.js";
|
|
6
10
|
/**
|
|
7
11
|
* @description A logging module for TypeScript applications
|
|
8
12
|
* @summary Provides a comprehensive, flexible logging solution. This module exposes:
|
|
@@ -19,5 +23,5 @@ export * from "./types.js";
|
|
|
19
23
|
* @const VERSION
|
|
20
24
|
* @memberOf module:Logging
|
|
21
25
|
*/
|
|
22
|
-
export const VERSION = "0.3.
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
export const VERSION = "0.3.9";
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQTBCO0FBQzFCLCtCQUE0QjtBQUM1QixnQ0FBNkI7QUFDN0IsaUNBQThCO0FBQzlCLGlDQUE4QjtBQUM5Qiw2QkFBMEI7QUFDMUIsMEJBQXVCO0FBQ3ZCLDJCQUF3QjtBQUN4Qix5QkFBc0I7QUFFdEI7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vZmlsdGVyc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lbnZpcm9ubWVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vTG9nZ2VkQ2xhc3NcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xvZ2dpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RleHRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi93ZWJcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBsb2dnaW5nIG1vZHVsZSBmb3IgVHlwZVNjcmlwdCBhcHBsaWNhdGlvbnNcbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSwgZmxleGlibGUgbG9nZ2luZyBzb2x1dGlvbi4gVGhpcyBtb2R1bGUgZXhwb3NlczpcbiAqIC0gQ29yZSBjbGFzc2VzIGxpa2Uge0BsaW5rIExvZ2dpbmd9IGFuZCB7QGxpbmsgTWluaUxvZ2dlcn1cbiAqIC0gRGVjb3JhdG9ycyBzdWNoIGFzIHtAbGluayBsb2d9IGZvciBpbnN0cnVtZW50aW5nIG1ldGhvZHNcbiAqIC0gQ29uZmlndXJhdGlvbiBhbmQgY29uc3RhbnRzIGxpa2Uge0BsaW5rIExvZ0xldmVsfSBhbmQge0BsaW5rIERlZmF1bHRMb2dnaW5nQ29uZmlnfVxuICogLSBUeXBlIGRlZmluaXRpb25zIGluY2x1ZGluZyB7QGxpbmsgTG9nZ2VyfSBhbmQge0BsaW5rIExvZ2dpbmdDb25maWd9XG4gKiBUaGVzZSBleHBvcnRzIGVuYWJsZSBjb25zaXN0ZW50LCBjb250ZXh0LWF3YXJlLCBhbmQgb3B0aW9uYWxseSB0aGVtZWQgbG9nZ2luZyBhY3Jvc3MgcHJvamVjdHMuXG4gKiBAbW9kdWxlIExvZ2dpbmdcbiAqL1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHBhY2thZ2UgdmVyc2lvbiBzdHJpbmdcbiAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgY3VycmVudCBwYWNrYWdlIHZlcnNpb24sIHVzZWQgZm9yIHZlcnNpb24gdHJhY2tpbmcgYW5kIGNvbXBhdGliaWxpdHkgY2hlY2tzXG4gKiBAY29uc3QgVkVSU0lPTlxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIjI1ZFUlNJT04jI1wiO1xuIl19
|
package/lib/esm/logging.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { LoggerFactory, LoggingConfig, LoggingContext, StringLike, Theme, Logger } from "./types";
|
|
2
2
|
import { LogLevel } from "./constants";
|
|
3
|
+
import { LoggedEnvironment } from "./environment";
|
|
3
4
|
/**
|
|
4
5
|
* @description A minimal logger implementation.
|
|
5
6
|
* @summary MiniLogger is a lightweight logging class that implements the Logger interface.
|
|
@@ -31,25 +32,26 @@ export declare class MiniLogger implements Logger {
|
|
|
31
32
|
protected config(key: keyof LoggingConfig): LoggingConfig[keyof LoggingConfig];
|
|
32
33
|
for(method: string | ((...args: any[]) => any)): Logger;
|
|
33
34
|
for(config: Partial<LoggingConfig>): Logger;
|
|
35
|
+
for(method: string | ((...args: any[]) => any) | Partial<LoggingConfig>, config: Partial<LoggingConfig>, ...args: any[]): Logger;
|
|
34
36
|
/**
|
|
35
37
|
* @description Creates a formatted log string
|
|
36
38
|
* @summary Generates a log string with timestamp, colored log level, context, and message
|
|
37
39
|
* @param {LogLevel} level - The log level for this message
|
|
38
40
|
* @param {StringLike | Error} message - The message to log or an Error object
|
|
39
|
-
* @param {string} [
|
|
41
|
+
* @param {string} [error] - Optional error to extract stack trace to include in the log
|
|
40
42
|
* @return {string} A formatted log string with all components
|
|
41
43
|
*/
|
|
42
|
-
protected createLog(level: LogLevel, message: StringLike | Error,
|
|
44
|
+
protected createLog(level: LogLevel, message: StringLike | Error, error?: Error): string;
|
|
43
45
|
/**
|
|
44
46
|
* @description Logs a message with the specified log level
|
|
45
47
|
* @summary Checks if the message should be logged based on the current log level,
|
|
46
48
|
* then uses the appropriate console method to output the formatted log
|
|
47
49
|
* @param {LogLevel} level - The log level of the message
|
|
48
50
|
* @param {StringLike | Error} msg - The message to be logged or an Error object
|
|
49
|
-
* @param {string} [
|
|
51
|
+
* @param {string} [error] - Optional stack trace to include in the log
|
|
50
52
|
* @return {void}
|
|
51
53
|
*/
|
|
52
|
-
protected log(level: LogLevel, msg: StringLike | Error,
|
|
54
|
+
protected log(level: LogLevel, msg: StringLike | Error, error?: Error): void;
|
|
53
55
|
/**
|
|
54
56
|
* @description Logs a message at the silly level
|
|
55
57
|
* @summary Logs a message at the silly level if the current verbosity setting allows it
|
|
@@ -84,9 +86,10 @@ export declare class MiniLogger implements Logger {
|
|
|
84
86
|
* @description Logs a message at the error level
|
|
85
87
|
* @summary Logs a message at the error level for errors and exceptions
|
|
86
88
|
* @param {StringLike | Error} msg - The message to be logged or an Error object
|
|
89
|
+
* @param e
|
|
87
90
|
* @return {void}
|
|
88
91
|
*/
|
|
89
|
-
error(msg: StringLike | Error): void;
|
|
92
|
+
error(msg: StringLike | Error, e?: Error): void;
|
|
90
93
|
/**
|
|
91
94
|
* @description Updates the logger configuration
|
|
92
95
|
* @summary Merges the provided configuration with the existing configuration
|
|
@@ -171,10 +174,6 @@ export declare class Logging {
|
|
|
171
174
|
* @summary A function that creates new Logger instances. By default, it creates a MiniLogger.
|
|
172
175
|
*/
|
|
173
176
|
private static _factory;
|
|
174
|
-
/**
|
|
175
|
-
* @description Configuration for the logging system
|
|
176
|
-
* @summary Stores the global logging configuration including verbosity, log level, styling, and formatting settings
|
|
177
|
-
*/
|
|
178
177
|
private static _config;
|
|
179
178
|
private constructor();
|
|
180
179
|
/**
|
|
@@ -196,7 +195,7 @@ export declare class Logging {
|
|
|
196
195
|
* @summary Returns a copy of the current global logging configuration
|
|
197
196
|
* @return {LoggingConfig} A copy of the current configuration
|
|
198
197
|
*/
|
|
199
|
-
static getConfig():
|
|
198
|
+
static getConfig(): typeof LoggedEnvironment;
|
|
200
199
|
/**
|
|
201
200
|
* @description Retrieves or creates the global logger instance.
|
|
202
201
|
* @summary Returns the existing global logger or creates a new one if it doesn't exist.
|
|
@@ -238,8 +237,9 @@ export declare class Logging {
|
|
|
238
237
|
* @summary Delegates the error logging to the global logger instance.
|
|
239
238
|
*
|
|
240
239
|
* @param msg - The message to be logged.
|
|
240
|
+
* @param e
|
|
241
241
|
*/
|
|
242
|
-
static error(msg: StringLike): void;
|
|
242
|
+
static error(msg: StringLike, e?: Error): void;
|
|
243
243
|
/**
|
|
244
244
|
* @description Creates a logger for a specific object or context
|
|
245
245
|
* @summary Creates a new logger instance for the given object or context using the factory function
|