@fylib/logger 0.1.0
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/engine.d.ts +17 -0
- package/dist/engine.js +217 -0
- package/dist/engine.js.map +1 -0
- package/dist/engine.test.d.ts +1 -0
- package/dist/engine.test.js +40 -0
- package/dist/engine.test.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +27 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +21 -0
package/dist/engine.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LoggerConfig } from './types';
|
|
2
|
+
export declare class LoggerEngine {
|
|
3
|
+
private config;
|
|
4
|
+
private consoleSink;
|
|
5
|
+
private localFileSink?;
|
|
6
|
+
private remoteSink?;
|
|
7
|
+
private readonly sensitiveKeys;
|
|
8
|
+
setConfig(config: Partial<LoggerConfig>): void;
|
|
9
|
+
debug(module: string, message: string, data?: any): void;
|
|
10
|
+
info(module: string, message: string, data?: any): void;
|
|
11
|
+
warn(module: string, message: string, data?: any): void;
|
|
12
|
+
error(module: string, message: string, data?: any): void;
|
|
13
|
+
private log;
|
|
14
|
+
private sanitize;
|
|
15
|
+
private shouldLog;
|
|
16
|
+
}
|
|
17
|
+
export declare const logger: LoggerEngine;
|
package/dist/engine.js
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.logger = exports.LoggerEngine = void 0;
|
|
15
|
+
var ConsoleSink = /** @class */ (function () {
|
|
16
|
+
function ConsoleSink() {
|
|
17
|
+
}
|
|
18
|
+
ConsoleSink.prototype.log = function (entry) {
|
|
19
|
+
var timestamp = entry.timestamp, level = entry.level, module = entry.module, message = entry.message, data = entry.data;
|
|
20
|
+
var style = this.getStyle(level);
|
|
21
|
+
var msg = "[".concat(timestamp, "] [").concat(level.toUpperCase(), "] [").concat(module, "] ").concat(message);
|
|
22
|
+
if (data) {
|
|
23
|
+
console.log("%c".concat(msg), style, data);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
console.log("%c".concat(msg), style);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
ConsoleSink.prototype.getStyle = function (level) {
|
|
30
|
+
switch (level) {
|
|
31
|
+
case 'debug': return 'color: #7f8c8d';
|
|
32
|
+
case 'info': return 'color: #3498db';
|
|
33
|
+
case 'warn': return 'color: #f39c12';
|
|
34
|
+
case 'error': return 'color: #e74c3c; font-weight: bold';
|
|
35
|
+
default: return '';
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
return ConsoleSink;
|
|
39
|
+
}());
|
|
40
|
+
var FileSink = /** @class */ (function () {
|
|
41
|
+
function FileSink(directory, pattern) {
|
|
42
|
+
this.directory = directory;
|
|
43
|
+
this.pattern = pattern;
|
|
44
|
+
if (typeof window === 'undefined') {
|
|
45
|
+
try {
|
|
46
|
+
// Usar indirect eval para evitar avisos do bundler (direct-eval)
|
|
47
|
+
// e ocultar 'require' da análise estática em builds do browser
|
|
48
|
+
var nodeRequire = (0, eval)('require');
|
|
49
|
+
this.fs = nodeRequire('fs');
|
|
50
|
+
this.pathModule = nodeRequire('path');
|
|
51
|
+
// Inteligência de detecção de path (relativo vs absoluto)
|
|
52
|
+
var isAbsolute = this.directory.startsWith('/') ||
|
|
53
|
+
/^[a-zA-Z]:\\/.test(this.directory) ||
|
|
54
|
+
/^[a-zA-Z]:\//.test(this.directory);
|
|
55
|
+
if (!isAbsolute) {
|
|
56
|
+
// Se for relativo, resolvemos a partir do CWD (root do projeto em SSR)
|
|
57
|
+
this.directory = this.pathModule.resolve(process.cwd(), this.directory);
|
|
58
|
+
}
|
|
59
|
+
// Garante que o diretório existe
|
|
60
|
+
if (!this.fs.existsSync(this.directory)) {
|
|
61
|
+
this.fs.mkdirSync(this.directory, { recursive: true });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
console.error('[Logger] Erro ao carregar módulos de arquivo no Node:', e);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
FileSink.prototype.log = function (entry) {
|
|
70
|
+
if (!this.fs || !this.pathModule)
|
|
71
|
+
return;
|
|
72
|
+
try {
|
|
73
|
+
var date = new Date().toISOString().split('T')[0];
|
|
74
|
+
var filename = (this.pattern || 'fylib-{date}.log').replace('{date}', date);
|
|
75
|
+
var filePath = this.pathModule.join(this.directory, filename);
|
|
76
|
+
var logLine = JSON.stringify(entry) + '\n';
|
|
77
|
+
this.fs.appendFileSync(filePath, logLine, 'utf8');
|
|
78
|
+
}
|
|
79
|
+
catch (e) {
|
|
80
|
+
// Evita recursão infinita se o erro for no próprio log
|
|
81
|
+
console.error('[Logger] Erro ao gravar log em arquivo:', e);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
return FileSink;
|
|
85
|
+
}());
|
|
86
|
+
var HttpSink = /** @class */ (function () {
|
|
87
|
+
function HttpSink(endpoint) {
|
|
88
|
+
this.endpoint = endpoint;
|
|
89
|
+
}
|
|
90
|
+
HttpSink.prototype.log = function (entry) {
|
|
91
|
+
if (typeof fetch === 'function') {
|
|
92
|
+
fetch(this.endpoint, {
|
|
93
|
+
method: 'POST',
|
|
94
|
+
headers: { 'Content-Type': 'application/json' },
|
|
95
|
+
body: JSON.stringify(entry)
|
|
96
|
+
}).catch(function () { });
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
return HttpSink;
|
|
100
|
+
}());
|
|
101
|
+
var LoggerEngine = /** @class */ (function () {
|
|
102
|
+
function LoggerEngine() {
|
|
103
|
+
this.config = {
|
|
104
|
+
enabled: false,
|
|
105
|
+
level: 'info',
|
|
106
|
+
console: { enabled: false }
|
|
107
|
+
};
|
|
108
|
+
this.consoleSink = new ConsoleSink();
|
|
109
|
+
// Lista de chaves cujos valores devem ser mascarados nos logs
|
|
110
|
+
this.sensitiveKeys = ['secret', 'token', 'password', 'key', 'auth', 'iv', 'tag'];
|
|
111
|
+
}
|
|
112
|
+
LoggerEngine.prototype.setConfig = function (config) {
|
|
113
|
+
var _a, _b;
|
|
114
|
+
this.config = __assign(__assign({}, this.config), config);
|
|
115
|
+
// Gerencia o LocalFileSink (logs locais via path)
|
|
116
|
+
if ((_a = this.config.localFiles) === null || _a === void 0 ? void 0 : _a.enabled) {
|
|
117
|
+
var path = this.config.localFiles.path;
|
|
118
|
+
var pattern = this.config.localFiles.filenamePattern;
|
|
119
|
+
if (typeof window === 'undefined') {
|
|
120
|
+
// Node.js/SSR - Gravação direta
|
|
121
|
+
this.localFileSink = new FileSink(path, pattern);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// Browser - Envio via HTTP
|
|
125
|
+
this.localFileSink = new HttpSink(path);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
this.localFileSink = undefined;
|
|
130
|
+
}
|
|
131
|
+
// Gerencia o RemoteSink (telemetria externa)
|
|
132
|
+
if ((_b = this.config.remote) === null || _b === void 0 ? void 0 : _b.enabled) {
|
|
133
|
+
this.remoteSink = new HttpSink(this.config.remote.endpoint);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
this.remoteSink = undefined;
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
LoggerEngine.prototype.debug = function (module, message, data) {
|
|
140
|
+
this.log('debug', module, message, data);
|
|
141
|
+
};
|
|
142
|
+
LoggerEngine.prototype.info = function (module, message, data) {
|
|
143
|
+
this.log('info', module, message, data);
|
|
144
|
+
};
|
|
145
|
+
LoggerEngine.prototype.warn = function (module, message, data) {
|
|
146
|
+
this.log('warn', module, message, data);
|
|
147
|
+
};
|
|
148
|
+
LoggerEngine.prototype.error = function (module, message, data) {
|
|
149
|
+
this.log('error', module, message, data);
|
|
150
|
+
};
|
|
151
|
+
LoggerEngine.prototype.log = function (level, module, message, data) {
|
|
152
|
+
var _a, _b, _c;
|
|
153
|
+
// Se logs desativados globalmente ou nível insuficiente, não faz nada
|
|
154
|
+
if (!this.config.enabled || !this.shouldLog(level))
|
|
155
|
+
return;
|
|
156
|
+
// Sanitiza os dados antes de logar
|
|
157
|
+
var sanitizedData = data ? this.sanitize(data) : undefined;
|
|
158
|
+
var entry = {
|
|
159
|
+
timestamp: new Date().toISOString(),
|
|
160
|
+
level: level,
|
|
161
|
+
module: module,
|
|
162
|
+
message: message,
|
|
163
|
+
data: sanitizedData
|
|
164
|
+
};
|
|
165
|
+
// Log no console se habilitado
|
|
166
|
+
if ((_a = this.config.console) === null || _a === void 0 ? void 0 : _a.enabled) {
|
|
167
|
+
this.consoleSink.log(entry);
|
|
168
|
+
}
|
|
169
|
+
// Log em arquivos locais se habilitado
|
|
170
|
+
if (((_b = this.config.localFiles) === null || _b === void 0 ? void 0 : _b.enabled) && this.localFileSink) {
|
|
171
|
+
this.localFileSink.log(entry);
|
|
172
|
+
}
|
|
173
|
+
// Log remoto se habilitado
|
|
174
|
+
if (((_c = this.config.remote) === null || _c === void 0 ? void 0 : _c.enabled) && this.remoteSink) {
|
|
175
|
+
this.remoteSink.log(entry);
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
LoggerEngine.prototype.sanitize = function (data) {
|
|
179
|
+
var _this = this;
|
|
180
|
+
if (data === null || typeof data !== 'object')
|
|
181
|
+
return data;
|
|
182
|
+
if (Array.isArray(data)) {
|
|
183
|
+
return data.map(function (item) { return _this.sanitize(item); });
|
|
184
|
+
}
|
|
185
|
+
var sanitized = {};
|
|
186
|
+
var _loop_1 = function (key) {
|
|
187
|
+
if (Object.prototype.hasOwnProperty.call(data, key)) {
|
|
188
|
+
var lowerKey_1 = key.toLowerCase();
|
|
189
|
+
var isSensitive = this_1.sensitiveKeys.some(function (s) { return lowerKey_1.includes(s); });
|
|
190
|
+
if (isSensitive && data[key] !== undefined && data[key] !== null) {
|
|
191
|
+
sanitized[key] = '********';
|
|
192
|
+
}
|
|
193
|
+
else if (typeof data[key] === 'object') {
|
|
194
|
+
sanitized[key] = this_1.sanitize(data[key]);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
sanitized[key] = data[key];
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
var this_1 = this;
|
|
202
|
+
for (var key in data) {
|
|
203
|
+
_loop_1(key);
|
|
204
|
+
}
|
|
205
|
+
return sanitized;
|
|
206
|
+
};
|
|
207
|
+
LoggerEngine.prototype.shouldLog = function (level) {
|
|
208
|
+
var levels = ['debug', 'info', 'warn', 'error'];
|
|
209
|
+
var configIdx = levels.indexOf(this.config.level);
|
|
210
|
+
var entryIdx = levels.indexOf(level);
|
|
211
|
+
return entryIdx >= configIdx;
|
|
212
|
+
};
|
|
213
|
+
return LoggerEngine;
|
|
214
|
+
}());
|
|
215
|
+
exports.LoggerEngine = LoggerEngine;
|
|
216
|
+
exports.logger = new LoggerEngine();
|
|
217
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var vitest_1 = require("vitest");
|
|
4
|
+
var engine_1 = require("../src/engine");
|
|
5
|
+
(0, vitest_1.describe)('LoggerEngine', function () {
|
|
6
|
+
var logger;
|
|
7
|
+
(0, vitest_1.beforeEach)(function () {
|
|
8
|
+
logger = new engine_1.LoggerEngine();
|
|
9
|
+
logger.setConfig({
|
|
10
|
+
enabled: true,
|
|
11
|
+
level: 'debug',
|
|
12
|
+
console: { enabled: true }
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
(0, vitest_1.it)('should log debug messages when level is debug', function () {
|
|
16
|
+
var spy = vitest_1.vi.spyOn(console, 'log');
|
|
17
|
+
logger.debug('Test', 'Debug message');
|
|
18
|
+
(0, vitest_1.expect)(spy).toHaveBeenCalled();
|
|
19
|
+
spy.mockRestore();
|
|
20
|
+
});
|
|
21
|
+
(0, vitest_1.it)('should not log debug messages when level is info', function () {
|
|
22
|
+
logger.setConfig({ level: 'info' });
|
|
23
|
+
var spy = vitest_1.vi.spyOn(console, 'log');
|
|
24
|
+
logger.debug('Test', 'Debug message');
|
|
25
|
+
(0, vitest_1.expect)(spy).not.toHaveBeenCalled();
|
|
26
|
+
spy.mockRestore();
|
|
27
|
+
});
|
|
28
|
+
(0, vitest_1.it)('should sanitize sensitive data', function () {
|
|
29
|
+
var spy = vitest_1.vi.spyOn(console, 'log');
|
|
30
|
+
logger.info('Test', 'Safe message', { password: '123', token: 'abc', safe: 'ok' });
|
|
31
|
+
var lastCall = spy.mock.calls[0][1]; // The data object is usually the second argument in this engine's console.log
|
|
32
|
+
// Note: ConsoleSink in engine.ts uses console.log(`%c${msg}`, style, data);
|
|
33
|
+
var loggedData = spy.mock.calls[0][2];
|
|
34
|
+
(0, vitest_1.expect)(loggedData.password).toBe('********');
|
|
35
|
+
(0, vitest_1.expect)(loggedData.token).toBe('********');
|
|
36
|
+
(0, vitest_1.expect)(loggedData.safe).toBe('ok');
|
|
37
|
+
spy.mockRestore();
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=engine.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.test.js","sourceRoot":"","sources":["../src/engine.test.ts"],"names":[],"mappings":";;AAAA,iCAA8D;AAC9D,wCAA6C;AAE7C,IAAA,iBAAQ,EAAC,cAAc,EAAE;IACvB,IAAI,MAAoB,CAAC;IAEzB,IAAA,mBAAU,EAAC;QACT,MAAM,GAAG,IAAI,qBAAY,EAAE,CAAC;QAC5B,MAAM,CAAC,SAAS,CAAC;YACf,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;SAC3B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,+CAA+C,EAAE;QAClD,IAAM,GAAG,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACtC,IAAA,eAAM,EAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC/B,GAAG,CAAC,WAAW,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,kDAAkD,EAAE;QACrD,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACpC,IAAM,GAAG,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACtC,IAAA,eAAM,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACnC,GAAG,CAAC,WAAW,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,gCAAgC,EAAE;QACnC,IAAM,GAAG,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAEnF,IAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,8EAA8E;QACrH,4EAA4E;QAE5E,IAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,IAAA,eAAM,EAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAA,eAAM,EAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAA,eAAM,EAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnC,GAAG,CAAC,WAAW,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types"), exports);
|
|
18
|
+
__exportStar(require("./engine"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,2CAAyB"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
2
|
+
export interface LogEntry {
|
|
3
|
+
timestamp: string;
|
|
4
|
+
level: LogLevel;
|
|
5
|
+
module: string;
|
|
6
|
+
message: string;
|
|
7
|
+
data?: any;
|
|
8
|
+
}
|
|
9
|
+
export interface LoggerConfig {
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
level: LogLevel;
|
|
12
|
+
console?: {
|
|
13
|
+
enabled: boolean;
|
|
14
|
+
};
|
|
15
|
+
localFiles?: {
|
|
16
|
+
enabled: boolean;
|
|
17
|
+
path: string;
|
|
18
|
+
filenamePattern?: string;
|
|
19
|
+
};
|
|
20
|
+
remote?: {
|
|
21
|
+
enabled: boolean;
|
|
22
|
+
endpoint: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface LogSink {
|
|
26
|
+
log(entry: LogEntry): void;
|
|
27
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@fylib/logger",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"types": "dist/index.d.ts",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"files": ["dist"],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc -p tsconfig.json",
|
|
12
|
+
"test": "vitest run --passWithNoTests"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@fylib/core": "workspace:*"
|
|
16
|
+
},
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"typescript": "catalog:",
|
|
19
|
+
"@types/node": "catalog:"
|
|
20
|
+
}
|
|
21
|
+
}
|