@powerlines/core 0.44.1 → 0.44.3
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/constants/api.cjs +1 -0
- package/dist/constants/commands.cjs +3 -2
- package/dist/constants/environments.cjs +1 -0
- package/dist/constants/fs.cjs +1 -0
- package/dist/constants/hooks.cjs +1 -0
- package/dist/constants/index.cjs +34 -34
- package/dist/constants/index.mjs +1 -1
- package/dist/constants/log-level.cjs +3 -2
- package/dist/constants/log-level.d.cts +2 -2
- package/dist/constants/log-level.d.mts +2 -2
- package/dist/constants/log-level.mjs +2 -2
- package/dist/constants/log-level.mjs.map +1 -1
- package/dist/constants/meta.cjs +1 -0
- package/dist/constants/plugin.cjs +3 -2
- package/dist/constants/virtual-modules.cjs +1 -0
- package/dist/lib/unplugin/helpers.cjs +2 -2
- package/dist/lib/unplugin/module-resolution.cjs +10 -9
- package/dist/lib/unplugin/module-resolution.mjs +1 -0
- package/dist/lib/unplugin/module-resolution.mjs.map +1 -1
- package/dist/lib/unplugin/plugin.cjs +3 -2
- package/dist/lib/unplugin/plugin.mjs +1 -0
- package/dist/lib/unplugin/plugin.mjs.map +1 -1
- package/dist/plugin-utils/helpers.cjs +5 -5
- package/dist/plugin-utils/logging.cjs +107 -11
- package/dist/plugin-utils/logging.d.cts.map +1 -1
- package/dist/plugin-utils/logging.d.mts.map +1 -1
- package/dist/plugin-utils/logging.mjs +103 -7
- package/dist/plugin-utils/logging.mjs.map +1 -1
- package/dist/plugin-utils/paths.cjs +1 -1
- package/dist/plugin-utils/paths.mjs +1 -1
- package/dist/plugin-utils/paths.mjs.map +1 -1
- package/dist/types/logging.d.cts +2 -1
- package/dist/types/logging.d.cts.map +1 -1
- package/dist/types/logging.d.mts +2 -1
- package/dist/types/logging.d.mts.map +1 -1
- package/dist/types/logging.mjs.map +1 -1
- package/package.json +38 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
const require_constants_environments = require('../constants/environments.cjs');
|
|
4
|
+
const require_constants_log_level = require('../constants/log-level.cjs');
|
|
3
5
|
const require_logging = require('../types/logging.cjs');
|
|
4
|
-
const require_environments = require('../constants/environments.cjs');
|
|
5
|
-
const require_log_level = require('../constants/log-level.cjs');
|
|
6
6
|
let _stryke_type_checks_is_set_object = require("@stryke/type-checks/is-set-object");
|
|
7
7
|
let defu = require("defu");
|
|
8
8
|
let _stryke_type_checks_is_set_string = require("@stryke/type-checks/is-set-string");
|
|
@@ -59,9 +59,9 @@ function resolveLogLevel(logLevel, mode) {
|
|
|
59
59
|
babel: "silent"
|
|
60
60
|
};
|
|
61
61
|
let defaultLogLevel;
|
|
62
|
-
if (mode === "development") defaultLogLevel =
|
|
63
|
-
else if (mode === "test") defaultLogLevel =
|
|
64
|
-
else defaultLogLevel =
|
|
62
|
+
if (mode === "development") defaultLogLevel = require_constants_log_level.DEFAULT_DEVELOPMENT_LOG_LEVEL;
|
|
63
|
+
else if (mode === "test") defaultLogLevel = require_constants_log_level.DEFAULT_TEST_LOG_LEVEL;
|
|
64
|
+
else defaultLogLevel = require_constants_log_level.DEFAULT_PRODUCTION_LOG_LEVEL;
|
|
65
65
|
if ((0, _stryke_type_checks_is_set_string.isSetString)(logLevel)) return {
|
|
66
66
|
general: logLevel,
|
|
67
67
|
fs: defaultLogLevel.fs,
|
|
@@ -131,7 +131,7 @@ const colorBackground = (text) => {
|
|
|
131
131
|
const title = (0, _stryke_string_format_title_case.titleCase)(text);
|
|
132
132
|
return chalk.default.inverse.hex(getTextColor(title))(` ${title} `);
|
|
133
133
|
};
|
|
134
|
-
const consoleLog = (meta, ...args) => (0, _storm_software_config_tools_logger.getLogFn)((0, _storm_software_config_tools_logger.getLogLevel)(meta.type), { logLevel: "trace" })(`${meta.name ? chalk.default.bold.hex(BRAND_COLOR)((0, _stryke_string_format_kebab_case.kebabCase)(meta.name)) : ""}${meta.command ? chalk.default.hex(BRAND_COLOR)(` (${meta.command})`) : ""}${meta.name ? chalk.default.grey(" > ") : ""}${(meta.source || meta.plugin) && (!meta.name || (0, _stryke_string_format_kebab_case.kebabCase)(meta.source || meta.plugin) !== (0, _stryke_string_format_kebab_case.kebabCase)(meta.name)) ? `${chalk.default.bold.hex(BRAND_COLOR)((0, _stryke_string_format_kebab_case.kebabCase)(meta.source || meta.plugin))}${chalk.default.grey(" > ")}` : ""}${meta.environment && (0, _stryke_string_format_kebab_case.kebabCase)(meta.environment) !== "default" ? `${chalk.default.bold.hex(BRAND_COLOR)((0, _stryke_string_format_kebab_case.kebabCase)(meta.environment))}${chalk.default.grey(" > ")}` : ""}${meta.category && meta.category !== require_logging.LogCategories.GENERAL ?
|
|
134
|
+
const consoleLog = (meta, ...args) => (0, _storm_software_config_tools_logger.getLogFn)((0, _storm_software_config_tools_logger.getLogLevel)(meta.type), { logLevel: "trace" })(`${meta.name ? chalk.default.bold.hex(BRAND_COLOR)((0, _stryke_string_format_kebab_case.kebabCase)(meta.name)) : ""}${meta.command ? chalk.default.hex(BRAND_COLOR)(` (${meta.command})`) : ""}${meta.name ? chalk.default.grey(" > ") : ""}${(meta.source || meta.plugin) && (!meta.name || (0, _stryke_string_format_kebab_case.kebabCase)(meta.source || meta.plugin) !== (0, _stryke_string_format_kebab_case.kebabCase)(meta.name)) ? `${chalk.default.bold.hex(BRAND_COLOR)((0, _stryke_string_format_kebab_case.kebabCase)(meta.source || meta.plugin))}${chalk.default.grey(" > ")}` : ""}${meta.environment && (0, _stryke_string_format_kebab_case.kebabCase)(meta.environment) !== "default" ? `${chalk.default.bold.hex(BRAND_COLOR)((0, _stryke_string_format_kebab_case.kebabCase)(meta.environment))}${chalk.default.grey(" > ")}` : ""}${meta.category && meta.category !== require_logging.LogCategories.GENERAL ? `${colorBackground((0, _stryke_string_format_kebab_case.kebabCase)(meta.category))} ` : ""}${args.join(" ")} `.trim());
|
|
135
135
|
function isValidLogLevel(logLevel, type) {
|
|
136
136
|
if (logLevel === require_logging.LogLevels.SILENT) return false;
|
|
137
137
|
return require_logging.LOG_LEVELS.indexOf(logLevel) >= require_logging.LOG_LEVELS.indexOf(type);
|
|
@@ -248,7 +248,7 @@ const withLogger = (logger, secondaryLogger) => {
|
|
|
248
248
|
...secondaryLogger.options,
|
|
249
249
|
...logger.options
|
|
250
250
|
};
|
|
251
|
-
|
|
251
|
+
const result = {
|
|
252
252
|
options,
|
|
253
253
|
error: validateLogger("error", options.name, options, (message) => {
|
|
254
254
|
logger.error?.(message);
|
|
@@ -271,6 +271,30 @@ const withLogger = (logger, secondaryLogger) => {
|
|
|
271
271
|
secondaryLogger.trace?.(message);
|
|
272
272
|
})
|
|
273
273
|
};
|
|
274
|
+
result.log = (type, message) => {
|
|
275
|
+
switch (type) {
|
|
276
|
+
case "error":
|
|
277
|
+
result.error(message);
|
|
278
|
+
break;
|
|
279
|
+
case "warn":
|
|
280
|
+
result.warn(message);
|
|
281
|
+
break;
|
|
282
|
+
case "info":
|
|
283
|
+
result.info(message);
|
|
284
|
+
break;
|
|
285
|
+
case "debug":
|
|
286
|
+
result.debug(message);
|
|
287
|
+
break;
|
|
288
|
+
case "trace":
|
|
289
|
+
result.trace(message);
|
|
290
|
+
break;
|
|
291
|
+
case "silent": break;
|
|
292
|
+
default:
|
|
293
|
+
result.info(message);
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
return result;
|
|
274
298
|
};
|
|
275
299
|
/**
|
|
276
300
|
* Create a logging function with a specific name and options.
|
|
@@ -280,7 +304,7 @@ const withLogger = (logger, secondaryLogger) => {
|
|
|
280
304
|
* @returns A new logger that combines the original logger's options with the custom logger's methods, allowing for customized logging behavior while still maintaining the original logger's configuration.
|
|
281
305
|
*/
|
|
282
306
|
const withCustomLogger = (logger, customLogger) => {
|
|
283
|
-
|
|
307
|
+
const result = {
|
|
284
308
|
options: logger.options,
|
|
285
309
|
error: validateCustomLogger("error", logger.options.name, logger.options, logger.error.bind(logger), customLogger.error?.bind(customLogger)),
|
|
286
310
|
warn: validateCustomLogger("warn", logger.options.name, logger.options, logger.warn.bind(logger), customLogger.warn?.bind(customLogger)),
|
|
@@ -288,6 +312,30 @@ const withCustomLogger = (logger, customLogger) => {
|
|
|
288
312
|
debug: validateCustomLogger("debug", logger.options.name, logger.options, logger.debug.bind(logger), customLogger.debug?.bind(customLogger)),
|
|
289
313
|
trace: validateCustomLogger("trace", logger.options.name, logger.options, logger.trace.bind(logger), customLogger.trace?.bind(customLogger))
|
|
290
314
|
};
|
|
315
|
+
result.log = (type, message) => {
|
|
316
|
+
switch (type) {
|
|
317
|
+
case "error":
|
|
318
|
+
result.error(message);
|
|
319
|
+
break;
|
|
320
|
+
case "warn":
|
|
321
|
+
result.warn(message);
|
|
322
|
+
break;
|
|
323
|
+
case "info":
|
|
324
|
+
result.info(message);
|
|
325
|
+
break;
|
|
326
|
+
case "debug":
|
|
327
|
+
result.debug(message);
|
|
328
|
+
break;
|
|
329
|
+
case "trace":
|
|
330
|
+
result.trace(message);
|
|
331
|
+
break;
|
|
332
|
+
case "silent": break;
|
|
333
|
+
default:
|
|
334
|
+
result.info(message);
|
|
335
|
+
break;
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
return result;
|
|
291
339
|
};
|
|
292
340
|
const consoleLogger = (type, message) => consoleLog((0, _stryke_type_checks_is_set_string.isSetString)(message) ? {
|
|
293
341
|
type,
|
|
@@ -299,7 +347,7 @@ const consoleLogger = (type, message) => consoleLog((0, _stryke_type_checks_is_s
|
|
|
299
347
|
category: require_logging.LogCategories.GENERAL,
|
|
300
348
|
logId: (0, _stryke_unique_id_uuid.uuid)(),
|
|
301
349
|
timestamp: Date.now(),
|
|
302
|
-
...message
|
|
350
|
+
...message.meta
|
|
303
351
|
}, (0, _stryke_type_checks_is_set_string.isSetString)(message) ? message : message.message);
|
|
304
352
|
/**
|
|
305
353
|
* Create a logging function with a specific name and options.
|
|
@@ -309,7 +357,7 @@ const consoleLogger = (type, message) => consoleLog((0, _stryke_type_checks_is_s
|
|
|
309
357
|
* @returns A logging function.
|
|
310
358
|
*/
|
|
311
359
|
const createLogger = (name, options, callback = consoleLogger) => {
|
|
312
|
-
|
|
360
|
+
const result = {
|
|
313
361
|
options: {
|
|
314
362
|
...options,
|
|
315
363
|
name
|
|
@@ -335,6 +383,30 @@ const createLogger = (name, options, callback = consoleLogger) => {
|
|
|
335
383
|
name
|
|
336
384
|
}, (message) => callback("trace", message))
|
|
337
385
|
};
|
|
386
|
+
result.log = (type, message) => {
|
|
387
|
+
switch (type) {
|
|
388
|
+
case "error":
|
|
389
|
+
result.error(message);
|
|
390
|
+
break;
|
|
391
|
+
case "warn":
|
|
392
|
+
result.warn(message);
|
|
393
|
+
break;
|
|
394
|
+
case "info":
|
|
395
|
+
result.info(message);
|
|
396
|
+
break;
|
|
397
|
+
case "debug":
|
|
398
|
+
result.debug(message);
|
|
399
|
+
break;
|
|
400
|
+
case "trace":
|
|
401
|
+
result.trace(message);
|
|
402
|
+
break;
|
|
403
|
+
case "silent": break;
|
|
404
|
+
default:
|
|
405
|
+
result.info(message);
|
|
406
|
+
break;
|
|
407
|
+
}
|
|
408
|
+
};
|
|
409
|
+
return result;
|
|
338
410
|
};
|
|
339
411
|
/**
|
|
340
412
|
* Extend a logging function with a specific name, adding a colored badge to the log output.
|
|
@@ -364,7 +436,7 @@ const extendLogger = (logger, options) => {
|
|
|
364
436
|
...logger.options,
|
|
365
437
|
...options
|
|
366
438
|
};
|
|
367
|
-
|
|
439
|
+
const result = {
|
|
368
440
|
options: opts,
|
|
369
441
|
error: validateLogger("error", opts.name, opts, logger.error.bind(logger)),
|
|
370
442
|
warn: validateLogger("warn", opts.name, opts, logger.warn.bind(logger)),
|
|
@@ -372,6 +444,30 @@ const extendLogger = (logger, options) => {
|
|
|
372
444
|
debug: validateLogger("debug", opts.name, opts, logger.debug.bind(logger)),
|
|
373
445
|
trace: validateLogger("trace", opts.name, opts, logger.trace.bind(logger))
|
|
374
446
|
};
|
|
447
|
+
result.log = (type, message) => {
|
|
448
|
+
switch (type) {
|
|
449
|
+
case "error":
|
|
450
|
+
result.error(message);
|
|
451
|
+
break;
|
|
452
|
+
case "warn":
|
|
453
|
+
result.warn(message);
|
|
454
|
+
break;
|
|
455
|
+
case "info":
|
|
456
|
+
result.info(message);
|
|
457
|
+
break;
|
|
458
|
+
case "debug":
|
|
459
|
+
result.debug(message);
|
|
460
|
+
break;
|
|
461
|
+
case "trace":
|
|
462
|
+
result.trace(message);
|
|
463
|
+
break;
|
|
464
|
+
case "silent": break;
|
|
465
|
+
default:
|
|
466
|
+
result.info(message);
|
|
467
|
+
break;
|
|
468
|
+
}
|
|
469
|
+
};
|
|
470
|
+
return result;
|
|
375
471
|
};
|
|
376
472
|
|
|
377
473
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.d.cts","names":[],"sources":["../../src/plugin-utils/logging.ts"],"mappings":";;;;;;AA2DA;;;;;iBAAgB,SAAA,CAAU,QAAA;;;;;AAiC1B;;iBAzBgB,SAAA,CAAU,OAAA,EAAS,iBAAA;;;;;;;;iBAyBnB,eAAA,CACd,QAAA,GAAW,kBAAA,EACX,IAAA,GAAO,IAAA,GACN,sBAAA;;;;;AA2FH;;cAAa,YAAA,GAAgB,IAAA;;;AAiB7B;;;;cAAa,SAAA,GAAa,IAAA;AAY1B;;;;;AAMA;AANA,cAAa,eAAA,GAAmB,IAAA;AAAA,cAMnB,UAAA,GAAc,IAAA,EAAM,OAAA,KAAY,IAAA;AAAA,iBA2B7B,eAAA,CAAgB,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,QAAA;AAAA,iBAQ1C,qBAAA,CACd,IAAA,EAAM,QAAA,EACN,QAAA,EAAU,sBAAA,EACV,QAAA,GAAU,WAAA;;;;;AAXZ;;;cAuBa,WAAA,GAAe,IAAA,UAAc,OAAA,EAAS,YAAA,KAAe,KAAA;;;;;;;AAflE;cAoJa,UAAA,GAAc,MAAA,EAAQ,MAAA,EAAQ,eAAA,EAAiB,MAAA,KAAS,MAAA;;;;;;;;
|
|
1
|
+
{"version":3,"file":"logging.d.cts","names":[],"sources":["../../src/plugin-utils/logging.ts"],"mappings":";;;;;;AA2DA;;;;;iBAAgB,SAAA,CAAU,QAAA;;;;;AAiC1B;;iBAzBgB,SAAA,CAAU,OAAA,EAAS,iBAAA;;;;;;;;iBAyBnB,eAAA,CACd,QAAA,GAAW,kBAAA,EACX,IAAA,GAAO,IAAA,GACN,sBAAA;;;;;AA2FH;;cAAa,YAAA,GAAgB,IAAA;;;AAiB7B;;;;cAAa,SAAA,GAAa,IAAA;AAY1B;;;;;AAMA;AANA,cAAa,eAAA,GAAmB,IAAA;AAAA,cAMnB,UAAA,GAAc,IAAA,EAAM,OAAA,KAAY,IAAA;AAAA,iBA2B7B,eAAA,CAAgB,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,QAAA;AAAA,iBAQ1C,qBAAA,CACd,IAAA,EAAM,QAAA,EACN,QAAA,EAAU,sBAAA,EACV,QAAA,GAAU,WAAA;;;;;AAXZ;;;cAuBa,WAAA,GAAe,IAAA,UAAc,OAAA,EAAS,YAAA,KAAe,KAAA;;;;;;;AAflE;cAoJa,UAAA,GAAc,MAAA,EAAQ,MAAA,EAAQ,eAAA,EAAiB,MAAA,KAAS,MAAA;;;;;;;;cAuFxD,gBAAA,GACX,MAAA,EAAQ,MAAA,EACR,YAAA,EAAc,YAAA,KACb,MAAA;AAAA,cAoEU,aAAA,GACX,IAAA,EAAM,QAAA,EACN,OAAA,WAAkB,aAAA;;;;;;AArSpB;;cAgUa,YAAA,GACX,IAAA,UACA,OAAA,EAAS,aAAA,EACT,QAAA,IACE,IAAA,EAAM,QAAA,EACN,OAAA,WAAkB,aAAA,cAEnB,MAAA;;;;;;;;cAuDU,WAAA,GAAe,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,YAAA,KAAe,KAAA;;;;;;;;cAsBrD,YAAA,GACX,MAAA,EAAQ,MAAA,EACR,OAAA,EAAS,aAAA,KACR,MAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.d.mts","names":[],"sources":["../../src/plugin-utils/logging.ts"],"mappings":";;;;;;AA2DA;;;;;iBAAgB,SAAA,CAAU,QAAA;;;;;AAiC1B;;iBAzBgB,SAAA,CAAU,OAAA,EAAS,iBAAA;;;;;;;;iBAyBnB,eAAA,CACd,QAAA,GAAW,kBAAA,EACX,IAAA,GAAO,IAAA,GACN,sBAAA;;;;;AA2FH;;cAAa,YAAA,GAAgB,IAAA;;;AAiB7B;;;;cAAa,SAAA,GAAa,IAAA;AAY1B;;;;;AAMA;AANA,cAAa,eAAA,GAAmB,IAAA;AAAA,cAMnB,UAAA,GAAc,IAAA,EAAM,OAAA,KAAY,IAAA;AAAA,iBA2B7B,eAAA,CAAgB,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,QAAA;AAAA,iBAQ1C,qBAAA,CACd,IAAA,EAAM,QAAA,EACN,QAAA,EAAU,sBAAA,EACV,QAAA,GAAU,WAAA;;;;;AAXZ;;;cAuBa,WAAA,GAAe,IAAA,UAAc,OAAA,EAAS,YAAA,KAAe,KAAA;;;;;;;AAflE;cAoJa,UAAA,GAAc,MAAA,EAAQ,MAAA,EAAQ,eAAA,EAAiB,MAAA,KAAS,MAAA;;;;;;;;
|
|
1
|
+
{"version":3,"file":"logging.d.mts","names":[],"sources":["../../src/plugin-utils/logging.ts"],"mappings":";;;;;;AA2DA;;;;;iBAAgB,SAAA,CAAU,QAAA;;;;;AAiC1B;;iBAzBgB,SAAA,CAAU,OAAA,EAAS,iBAAA;;;;;;;;iBAyBnB,eAAA,CACd,QAAA,GAAW,kBAAA,EACX,IAAA,GAAO,IAAA,GACN,sBAAA;;;;;AA2FH;;cAAa,YAAA,GAAgB,IAAA;;;AAiB7B;;;;cAAa,SAAA,GAAa,IAAA;AAY1B;;;;;AAMA;AANA,cAAa,eAAA,GAAmB,IAAA;AAAA,cAMnB,UAAA,GAAc,IAAA,EAAM,OAAA,KAAY,IAAA;AAAA,iBA2B7B,eAAA,CAAgB,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,QAAA;AAAA,iBAQ1C,qBAAA,CACd,IAAA,EAAM,QAAA,EACN,QAAA,EAAU,sBAAA,EACV,QAAA,GAAU,WAAA;;;;;AAXZ;;;cAuBa,WAAA,GAAe,IAAA,UAAc,OAAA,EAAS,YAAA,KAAe,KAAA;;;;;;;AAflE;cAoJa,UAAA,GAAc,MAAA,EAAQ,MAAA,EAAQ,eAAA,EAAiB,MAAA,KAAS,MAAA;;;;;;;;cAuFxD,gBAAA,GACX,MAAA,EAAQ,MAAA,EACR,YAAA,EAAc,YAAA,KACb,MAAA;AAAA,cAoEU,aAAA,GACX,IAAA,EAAM,QAAA,EACN,OAAA,WAAkB,aAAA;;;;;;AArSpB;;cAgUa,YAAA,GACX,IAAA,UACA,OAAA,EAAS,aAAA,EACT,QAAA,IACE,IAAA,EAAM,QAAA,EACN,OAAA,WAAkB,aAAA,cAEnB,MAAA;;;;;;;;cAuDU,WAAA,GAAe,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,YAAA,KAAe,KAAA;;;;;;;;cAsBrD,YAAA,GACX,MAAA,EAAQ,MAAA,EACR,OAAA,EAAS,aAAA,KACR,MAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { LOG_LEVELS, LogCategories, LogLevels } from "../types/logging.mjs";
|
|
2
1
|
import { DEFAULT_ENVIRONMENT } from "../constants/environments.mjs";
|
|
3
2
|
import { DEFAULT_DEVELOPMENT_LOG_LEVEL, DEFAULT_PRODUCTION_LOG_LEVEL, DEFAULT_TEST_LOG_LEVEL } from "../constants/log-level.mjs";
|
|
3
|
+
import { LOG_LEVELS, LogCategories, LogLevels } from "../types/logging.mjs";
|
|
4
4
|
import { isSetObject } from "@stryke/type-checks/is-set-object";
|
|
5
5
|
import { defu as defu$1 } from "defu";
|
|
6
6
|
import { isSetString } from "@stryke/type-checks/is-set-string";
|
|
@@ -128,7 +128,7 @@ const colorBackground = (text) => {
|
|
|
128
128
|
const title = titleCase(text);
|
|
129
129
|
return chalk.inverse.hex(getTextColor(title))(` ${title} `);
|
|
130
130
|
};
|
|
131
|
-
const consoleLog = (meta, ...args) => getLogFn(getLogLevel(meta.type), { logLevel: "trace" })(`${meta.name ? chalk.bold.hex(BRAND_COLOR)(kebabCase(meta.name)) : ""}${meta.command ? chalk.hex(BRAND_COLOR)(` (${meta.command})`) : ""}${meta.name ? chalk.grey(" > ") : ""}${(meta.source || meta.plugin) && (!meta.name || kebabCase(meta.source || meta.plugin) !== kebabCase(meta.name)) ? `${chalk.bold.hex(BRAND_COLOR)(kebabCase(meta.source || meta.plugin))}${chalk.grey(" > ")}` : ""}${meta.environment && kebabCase(meta.environment) !== "default" ? `${chalk.bold.hex(BRAND_COLOR)(kebabCase(meta.environment))}${chalk.grey(" > ")}` : ""}${meta.category && meta.category !== LogCategories.GENERAL ?
|
|
131
|
+
const consoleLog = (meta, ...args) => getLogFn(getLogLevel(meta.type), { logLevel: "trace" })(`${meta.name ? chalk.bold.hex(BRAND_COLOR)(kebabCase(meta.name)) : ""}${meta.command ? chalk.hex(BRAND_COLOR)(` (${meta.command})`) : ""}${meta.name ? chalk.grey(" > ") : ""}${(meta.source || meta.plugin) && (!meta.name || kebabCase(meta.source || meta.plugin) !== kebabCase(meta.name)) ? `${chalk.bold.hex(BRAND_COLOR)(kebabCase(meta.source || meta.plugin))}${chalk.grey(" > ")}` : ""}${meta.environment && kebabCase(meta.environment) !== "default" ? `${chalk.bold.hex(BRAND_COLOR)(kebabCase(meta.environment))}${chalk.grey(" > ")}` : ""}${meta.category && meta.category !== LogCategories.GENERAL ? `${colorBackground(kebabCase(meta.category))} ` : ""}${args.join(" ")} `.trim());
|
|
132
132
|
function isValidLogLevel(logLevel, type) {
|
|
133
133
|
if (logLevel === LogLevels.SILENT) return false;
|
|
134
134
|
return LOG_LEVELS.indexOf(logLevel) >= LOG_LEVELS.indexOf(type);
|
|
@@ -245,7 +245,7 @@ const withLogger = (logger, secondaryLogger) => {
|
|
|
245
245
|
...secondaryLogger.options,
|
|
246
246
|
...logger.options
|
|
247
247
|
};
|
|
248
|
-
|
|
248
|
+
const result = {
|
|
249
249
|
options,
|
|
250
250
|
error: validateLogger("error", options.name, options, (message) => {
|
|
251
251
|
logger.error?.(message);
|
|
@@ -268,6 +268,30 @@ const withLogger = (logger, secondaryLogger) => {
|
|
|
268
268
|
secondaryLogger.trace?.(message);
|
|
269
269
|
})
|
|
270
270
|
};
|
|
271
|
+
result.log = (type, message) => {
|
|
272
|
+
switch (type) {
|
|
273
|
+
case "error":
|
|
274
|
+
result.error(message);
|
|
275
|
+
break;
|
|
276
|
+
case "warn":
|
|
277
|
+
result.warn(message);
|
|
278
|
+
break;
|
|
279
|
+
case "info":
|
|
280
|
+
result.info(message);
|
|
281
|
+
break;
|
|
282
|
+
case "debug":
|
|
283
|
+
result.debug(message);
|
|
284
|
+
break;
|
|
285
|
+
case "trace":
|
|
286
|
+
result.trace(message);
|
|
287
|
+
break;
|
|
288
|
+
case "silent": break;
|
|
289
|
+
default:
|
|
290
|
+
result.info(message);
|
|
291
|
+
break;
|
|
292
|
+
}
|
|
293
|
+
};
|
|
294
|
+
return result;
|
|
271
295
|
};
|
|
272
296
|
/**
|
|
273
297
|
* Create a logging function with a specific name and options.
|
|
@@ -277,7 +301,7 @@ const withLogger = (logger, secondaryLogger) => {
|
|
|
277
301
|
* @returns A new logger that combines the original logger's options with the custom logger's methods, allowing for customized logging behavior while still maintaining the original logger's configuration.
|
|
278
302
|
*/
|
|
279
303
|
const withCustomLogger = (logger, customLogger) => {
|
|
280
|
-
|
|
304
|
+
const result = {
|
|
281
305
|
options: logger.options,
|
|
282
306
|
error: validateCustomLogger("error", logger.options.name, logger.options, logger.error.bind(logger), customLogger.error?.bind(customLogger)),
|
|
283
307
|
warn: validateCustomLogger("warn", logger.options.name, logger.options, logger.warn.bind(logger), customLogger.warn?.bind(customLogger)),
|
|
@@ -285,6 +309,30 @@ const withCustomLogger = (logger, customLogger) => {
|
|
|
285
309
|
debug: validateCustomLogger("debug", logger.options.name, logger.options, logger.debug.bind(logger), customLogger.debug?.bind(customLogger)),
|
|
286
310
|
trace: validateCustomLogger("trace", logger.options.name, logger.options, logger.trace.bind(logger), customLogger.trace?.bind(customLogger))
|
|
287
311
|
};
|
|
312
|
+
result.log = (type, message) => {
|
|
313
|
+
switch (type) {
|
|
314
|
+
case "error":
|
|
315
|
+
result.error(message);
|
|
316
|
+
break;
|
|
317
|
+
case "warn":
|
|
318
|
+
result.warn(message);
|
|
319
|
+
break;
|
|
320
|
+
case "info":
|
|
321
|
+
result.info(message);
|
|
322
|
+
break;
|
|
323
|
+
case "debug":
|
|
324
|
+
result.debug(message);
|
|
325
|
+
break;
|
|
326
|
+
case "trace":
|
|
327
|
+
result.trace(message);
|
|
328
|
+
break;
|
|
329
|
+
case "silent": break;
|
|
330
|
+
default:
|
|
331
|
+
result.info(message);
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
return result;
|
|
288
336
|
};
|
|
289
337
|
const consoleLogger = (type, message) => consoleLog(isSetString(message) ? {
|
|
290
338
|
type,
|
|
@@ -296,7 +344,7 @@ const consoleLogger = (type, message) => consoleLog(isSetString(message) ? {
|
|
|
296
344
|
category: LogCategories.GENERAL,
|
|
297
345
|
logId: uuid(),
|
|
298
346
|
timestamp: Date.now(),
|
|
299
|
-
...message
|
|
347
|
+
...message.meta
|
|
300
348
|
}, isSetString(message) ? message : message.message);
|
|
301
349
|
/**
|
|
302
350
|
* Create a logging function with a specific name and options.
|
|
@@ -306,7 +354,7 @@ const consoleLogger = (type, message) => consoleLog(isSetString(message) ? {
|
|
|
306
354
|
* @returns A logging function.
|
|
307
355
|
*/
|
|
308
356
|
const createLogger = (name, options, callback = consoleLogger) => {
|
|
309
|
-
|
|
357
|
+
const result = {
|
|
310
358
|
options: {
|
|
311
359
|
...options,
|
|
312
360
|
name
|
|
@@ -332,6 +380,30 @@ const createLogger = (name, options, callback = consoleLogger) => {
|
|
|
332
380
|
name
|
|
333
381
|
}, (message) => callback("trace", message))
|
|
334
382
|
};
|
|
383
|
+
result.log = (type, message) => {
|
|
384
|
+
switch (type) {
|
|
385
|
+
case "error":
|
|
386
|
+
result.error(message);
|
|
387
|
+
break;
|
|
388
|
+
case "warn":
|
|
389
|
+
result.warn(message);
|
|
390
|
+
break;
|
|
391
|
+
case "info":
|
|
392
|
+
result.info(message);
|
|
393
|
+
break;
|
|
394
|
+
case "debug":
|
|
395
|
+
result.debug(message);
|
|
396
|
+
break;
|
|
397
|
+
case "trace":
|
|
398
|
+
result.trace(message);
|
|
399
|
+
break;
|
|
400
|
+
case "silent": break;
|
|
401
|
+
default:
|
|
402
|
+
result.info(message);
|
|
403
|
+
break;
|
|
404
|
+
}
|
|
405
|
+
};
|
|
406
|
+
return result;
|
|
335
407
|
};
|
|
336
408
|
/**
|
|
337
409
|
* Extend a logging function with a specific name, adding a colored badge to the log output.
|
|
@@ -361,7 +433,7 @@ const extendLogger = (logger, options) => {
|
|
|
361
433
|
...logger.options,
|
|
362
434
|
...options
|
|
363
435
|
};
|
|
364
|
-
|
|
436
|
+
const result = {
|
|
365
437
|
options: opts,
|
|
366
438
|
error: validateLogger("error", opts.name, opts, logger.error.bind(logger)),
|
|
367
439
|
warn: validateLogger("warn", opts.name, opts, logger.warn.bind(logger)),
|
|
@@ -369,6 +441,30 @@ const extendLogger = (logger, options) => {
|
|
|
369
441
|
debug: validateLogger("debug", opts.name, opts, logger.debug.bind(logger)),
|
|
370
442
|
trace: validateLogger("trace", opts.name, opts, logger.trace.bind(logger))
|
|
371
443
|
};
|
|
444
|
+
result.log = (type, message) => {
|
|
445
|
+
switch (type) {
|
|
446
|
+
case "error":
|
|
447
|
+
result.error(message);
|
|
448
|
+
break;
|
|
449
|
+
case "warn":
|
|
450
|
+
result.warn(message);
|
|
451
|
+
break;
|
|
452
|
+
case "info":
|
|
453
|
+
result.info(message);
|
|
454
|
+
break;
|
|
455
|
+
case "debug":
|
|
456
|
+
result.debug(message);
|
|
457
|
+
break;
|
|
458
|
+
case "trace":
|
|
459
|
+
result.trace(message);
|
|
460
|
+
break;
|
|
461
|
+
case "silent": break;
|
|
462
|
+
default:
|
|
463
|
+
result.info(message);
|
|
464
|
+
break;
|
|
465
|
+
}
|
|
466
|
+
};
|
|
467
|
+
return result;
|
|
372
468
|
};
|
|
373
469
|
|
|
374
470
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.mjs","names":["defu"],"sources":["../../src/plugin-utils/logging.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { getLogFn, getLogLevel } from \"@storm-software/config-tools/logger\";\nimport { getColor } from \"@storm-software/config-tools/utilities/colors\";\nimport { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { titleCase } from \"@stryke/string-format/title-case\";\nimport { isSetObject } from \"@stryke/type-checks/is-set-object\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport { isString } from \"@stryke/type-checks/is-string\";\nimport { RequiredKeys } from \"@stryke/types/base\";\nimport { uuid } from \"@stryke/unique-id/uuid\";\nimport chalk from \"chalk\";\nimport { defu } from \"defu\";\nimport { DEFAULT_ENVIRONMENT } from \"../constants/environments\";\nimport {\n DEFAULT_DEVELOPMENT_LOG_LEVEL,\n DEFAULT_PRODUCTION_LOG_LEVEL,\n DEFAULT_TEST_LOG_LEVEL\n} from \"../constants/log-level\";\nimport { Mode } from \"../types/config\";\nimport { UnresolvedContext } from \"../types/context\";\nimport type {\n CustomLogger,\n CustomLoggerMessage,\n LogCategory,\n LogFn,\n LogFnMeta,\n LogFnOptions,\n LoggerMessage,\n LoggerOptions,\n LogLevel,\n LogLevelResolvedConfig,\n LogLevelUserConfig,\n LogMeta\n} from \"../types/logging\";\nimport { LOG_LEVELS, LogCategories, Logger, LogLevels } from \"../types/logging\";\n\n/**\n * Determines if the provided log level is considered verbose (debug or trace).\n *\n * @param logLevel - The log level to check, which can be a string or an UnresolvedContext containing the log level in its config.\n * @returns True if the log level is \"debug\" or \"trace\", false otherwise.\n */\nexport function isVerbose(logLevel: string): boolean;\n\n/**\n * Determines if the provided context is considered verbose (debug or trace).\n *\n * @param context - The context to check, which contains the log level in its config.\n * @returns True if the log level is \"debug\" or \"trace\", false otherwise.\n */\nexport function isVerbose(context: UnresolvedContext): boolean;\n\n/**\n * Determines if the provided log level is considered verbose (debug or trace).\n *\n * @param logLevelOrContext - The log level to check, which can be a string or an UnresolvedContext containing the log level in its config.\n * @returns True if the log level is \"debug\" or \"trace\", false otherwise.\n */\nexport function isVerbose(\n logLevelOrContext: string | UnresolvedContext\n): boolean {\n const level = isString(logLevelOrContext)\n ? logLevelOrContext\n : logLevelOrContext.config.logLevel;\n\n return level === \"debug\" || level === \"trace\";\n}\n\n/**\n * Resolves the log level configuration based on the provided log level and mode, returning a complete LogLevelResolvedConfig object that specifies the log level for each log category.\n *\n * @param logLevel - The user-provided log level configuration, which can be a string or an object specifying log levels for each category.\n * @param mode - The current mode of the application (e.g., \"development\", \"test\", \"production\"), which determines the default log levels.\n * @returns A LogLevelResolvedConfig object specifying the log level for each log category.\n */\nexport function resolveLogLevel(\n logLevel?: LogLevelUserConfig,\n mode?: Mode\n): LogLevelResolvedConfig {\n if (logLevel === \"trace\") {\n return {\n general: \"trace\",\n fs: \"trace\",\n performance: \"trace\",\n network: \"trace\",\n plugins: \"trace\",\n hooks: \"trace\",\n env: \"trace\",\n ipc: \"trace\",\n config: \"trace\",\n babel: \"trace\"\n };\n } else if (logLevel === \"silent\") {\n return {\n general: \"silent\",\n fs: \"silent\",\n performance: \"silent\",\n network: \"silent\",\n plugins: \"silent\",\n hooks: \"silent\",\n env: \"silent\",\n ipc: \"silent\",\n config: \"silent\",\n babel: \"silent\"\n };\n }\n\n let defaultLogLevel: LogLevelResolvedConfig;\n if (mode === \"development\") {\n defaultLogLevel = DEFAULT_DEVELOPMENT_LOG_LEVEL;\n } else if (mode === \"test\") {\n defaultLogLevel = DEFAULT_TEST_LOG_LEVEL;\n } else {\n defaultLogLevel = DEFAULT_PRODUCTION_LOG_LEVEL;\n }\n\n if (isSetString(logLevel)) {\n return {\n general: logLevel,\n fs: defaultLogLevel.fs,\n performance: logLevel,\n network: defaultLogLevel.network,\n plugins: logLevel,\n hooks: logLevel,\n env: defaultLogLevel.env,\n ipc: defaultLogLevel.ipc,\n config: defaultLogLevel.config,\n babel: logLevel\n };\n } else if (isSetObject(logLevel)) {\n return defu(logLevel, defaultLogLevel) as LogLevelResolvedConfig;\n }\n\n return defaultLogLevel;\n}\n\nconst BADGE_COLORS = [\n \"#00A0DD\",\n \"#6FCE4E\",\n \"#FBBF24\",\n \"#F43F5E\",\n \"#3B82F6\",\n \"#A855F7\",\n \"#469592\",\n \"#288EDF\",\n \"#D8B4FE\",\n \"#10B981\",\n \"#EF4444\",\n \"#F0EC56\",\n \"#F472B6\",\n \"#22D3EE\",\n \"#EAB308\",\n \"#84CC16\",\n \"#F87171\",\n \"#0EA5E9\",\n \"#D946EF\",\n \"#FACC15\",\n \"#34D399\",\n \"#8B5CF6\"\n] as const;\n\nconst BRAND_COLOR = getColor(\"brand\");\n\n/**\n * Generate a consistent color based on the input text.\n *\n * @param text - The input text to generate the color from.\n * @return A hexadecimal color string.\n */\nexport const getTextColor = (text: string): string => {\n return (\n BADGE_COLORS[\n text\n .split(\"\")\n .map(char => char.charCodeAt(0))\n .reduce((ret, charCode) => ret + charCode, 0) % BADGE_COLORS.length\n ] || BADGE_COLORS[0]\n );\n};\n\n/**\n * Generate a consistent color based on the input text.\n *\n * @param text - The input text to generate the color from.\n * @return A hexadecimal color string.\n */\nexport const colorText = (text: string): string => {\n const title = titleCase(text);\n\n return chalk.hex(getTextColor(title))(title);\n};\n\n/**\n * Generate a consistent color based on the input text.\n *\n * @param text - The input text to generate the color from.\n * @return A hexadecimal color string.\n */\nexport const colorBackground = (text: string): string => {\n const title = titleCase(text);\n\n return chalk.inverse.hex(getTextColor(title))(` ${title} `);\n};\n\nexport const consoleLog = (meta: LogMeta, ...args: string[]) =>\n getLogFn(getLogLevel(meta.type), {\n logLevel: \"trace\"\n })(\n `${meta.name ? chalk.bold.hex(BRAND_COLOR)(kebabCase(meta.name)) : \"\"}${\n meta.command ? chalk.hex(BRAND_COLOR)(` (${meta.command})`) : \"\"\n }${meta.name ? chalk.grey(\" > \") : \"\"}${\n (meta.source || meta.plugin) &&\n (!meta.name ||\n kebabCase(meta.source || meta.plugin) !== kebabCase(meta.name))\n ? `${chalk.bold.hex(BRAND_COLOR)(\n kebabCase(meta.source || meta.plugin)\n )}${chalk.grey(\" > \")}`\n : \"\"\n }${\n meta.environment && kebabCase(meta.environment) !== DEFAULT_ENVIRONMENT\n ? `${chalk.bold.hex(BRAND_COLOR)(\n kebabCase(meta.environment)\n )}${chalk.grey(\" > \")}`\n : \"\"\n }${\n meta.category && meta.category !== LogCategories.GENERAL\n ? ` ${colorBackground(kebabCase(meta.category))} `\n : \"\"\n }${args.join(\" \")} `.trim()\n );\n\nexport function isValidLogLevel(logLevel: LogLevel, type: LogLevel): boolean {\n if (logLevel === LogLevels.SILENT) {\n return false;\n }\n\n return LOG_LEVELS.indexOf(logLevel) >= LOG_LEVELS.indexOf(type);\n}\n\nexport function isValidLogLevelConfig(\n type: LogLevel,\n logLevel: LogLevelResolvedConfig,\n category: LogCategory = LogCategories.GENERAL\n): boolean {\n return isValidLogLevel(logLevel[category], type);\n}\n\n/**\n * Create a logging function with a specific name and options.\n *\n * @param name - The name of the logging function.\n * @param options - The options to configure the logging function, including the source, command, environment, plugin, log level, custom logger, and colors. These options can be used to customize the appearance and behavior of the log messages generated by the logging function.\n * @returns A logging function.\n */\nexport const createLogFn = (name: string, options: LogFnOptions): LogFn => {\n const logLevel = resolveLogLevel(options.logLevel, options.mode);\n\n return (meta: LogFnMeta | LogLevel, ...args: string[]) => {\n const logMeta = isSetObject(meta)\n ? {\n logId: uuid(),\n timestamp: Date.now(),\n category: LogCategories.GENERAL,\n ...options,\n ...meta,\n name\n }\n : {\n logId: uuid(),\n timestamp: Date.now(),\n category: LogCategories.GENERAL,\n ...options,\n type: meta,\n name\n };\n\n if (\n isValidLogLevelConfig(\n logMeta.type,\n logLevel,\n logMeta.category ? logMeta.category : LogCategories.GENERAL\n )\n ) {\n consoleLog(logMeta, ...args);\n }\n };\n};\n\nconst validateLogger = (\n type: LogLevel,\n name: string,\n options: LoggerOptions,\n callback: (message: string | LoggerMessage) => void\n) => {\n const logLevel = resolveLogLevel(options.logLevel, options.mode);\n\n return (message: string | LoggerMessage) => {\n const params = isSetString(message)\n ? {\n name,\n plugin: options.plugin,\n meta: {\n type,\n name,\n category: LogCategories.GENERAL,\n logId: uuid(),\n timestamp: Date.now(),\n ...options\n },\n message\n }\n : {\n name,\n plugin: options.plugin,\n ...message,\n meta: {\n type,\n name,\n category: LogCategories.GENERAL,\n logId: uuid(),\n timestamp: Date.now(),\n plugin: message.plugin,\n ...options,\n ...message.meta\n }\n };\n\n if (isValidLogLevelConfig(type, logLevel, params.meta.category)) {\n callback(params);\n }\n };\n};\n\nconst validateCustomLogger = (\n type: LogLevel,\n name: string,\n options: LoggerOptions,\n callback?: (message: string | LoggerMessage) => void,\n customCallback?: (message: CustomLoggerMessage) => void\n) => {\n const logLevel = resolveLogLevel(options.logLevel, options.mode);\n\n return (message: string | LoggerMessage) => {\n const params = isSetString(message)\n ? {\n name,\n plugin: options.plugin,\n meta: {\n type,\n name,\n category: LogCategories.GENERAL,\n logId: uuid(),\n timestamp: Date.now(),\n ...options\n },\n message\n }\n : {\n name,\n plugin: options.plugin,\n ...message,\n meta: {\n type,\n name,\n category: LogCategories.GENERAL,\n logId: uuid(),\n timestamp: Date.now(),\n plugin: message.plugin,\n ...options,\n ...message.meta\n }\n };\n\n if (isValidLogLevelConfig(type, logLevel, params.meta.category)) {\n callback?.(params);\n customCallback?.(params);\n }\n };\n};\n\n/**\n * Create a logging function with a specific name and options.\n *\n * @param logger - The original logger to wrap with the custom logger.\n * @param secondaryLogger - The custom logger to use for logging messages, which can be used to override the default logging behavior of the original logger.\n * @returns A new logger that combines the original logger's options with the custom logger's methods, allowing for customized logging behavior while still maintaining the original logger's configuration.\n */\nexport const withLogger = (logger: Logger, secondaryLogger: Logger): Logger => {\n const options = { ...secondaryLogger.options, ...logger.options };\n\n return {\n options,\n error: validateLogger(\n \"error\",\n options.name!,\n options,\n (message: string | LoggerMessage) => {\n logger.error?.(message);\n secondaryLogger.error?.(message);\n }\n ),\n warn: validateLogger(\n \"warn\",\n options.name!,\n options,\n (message: string | LoggerMessage) => {\n logger.warn?.(message);\n secondaryLogger.warn?.(message);\n }\n ),\n info: validateLogger(\n \"info\",\n options.name!,\n options,\n (message: string | LoggerMessage) => {\n logger.info?.(message);\n secondaryLogger.info?.(message);\n }\n ),\n debug: validateLogger(\n \"debug\",\n options.name!,\n options,\n (message: string | LoggerMessage) => {\n logger.debug?.(message);\n secondaryLogger.debug?.(message);\n }\n ),\n trace: validateLogger(\n \"trace\",\n options.name!,\n options,\n (message: string | LoggerMessage) => {\n logger.trace?.(message);\n secondaryLogger.trace?.(message);\n }\n )\n };\n};\n\n/**\n * Create a logging function with a specific name and options.\n *\n * @param logger - The original logger to wrap with the custom logger.\n * @param customLogger - The custom logger to use for logging messages, which can be used to override the default logging behavior of the original logger.\n * @returns A new logger that combines the original logger's options with the custom logger's methods, allowing for customized logging behavior while still maintaining the original logger's configuration.\n */\nexport const withCustomLogger = (\n logger: Logger,\n customLogger: CustomLogger\n): Logger => {\n return {\n options: logger.options,\n error: validateCustomLogger(\n \"error\",\n logger.options.name!,\n logger.options,\n logger.error.bind(logger),\n customLogger.error?.bind(customLogger)\n ),\n warn: validateCustomLogger(\n \"warn\",\n logger.options.name!,\n logger.options,\n logger.warn.bind(logger),\n customLogger.warn?.bind(customLogger)\n ),\n info: validateCustomLogger(\n \"info\",\n logger.options.name!,\n logger.options,\n logger.info.bind(logger),\n customLogger.info?.bind(customLogger)\n ),\n debug: validateCustomLogger(\n \"debug\",\n logger.options.name!,\n logger.options,\n logger.debug.bind(logger),\n customLogger.debug?.bind(customLogger)\n ),\n trace: validateCustomLogger(\n \"trace\",\n logger.options.name!,\n logger.options,\n logger.trace.bind(logger),\n customLogger.trace?.bind(customLogger)\n )\n };\n};\n\nexport const consoleLogger = (\n type: LogLevel,\n message: string | LoggerMessage\n) =>\n consoleLog(\n isSetString(message)\n ? {\n type,\n category: LogCategories.GENERAL,\n logId: uuid(),\n timestamp: Date.now()\n }\n : {\n type,\n category: LogCategories.GENERAL,\n logId: uuid(),\n timestamp: Date.now(),\n ...message\n },\n isSetString(message) ? message : message.message\n );\n\n/**\n * Create a logging function with a specific name and options.\n *\n * @param name - The name of the logging function.\n * @param options - The options to configure the logging function, including the source, command, environment, plugin, log level, custom logger, and colors. These options can be used to customize the appearance and behavior of the log messages generated by the logging function.\n * @returns A logging function.\n */\nexport const createLogger = (\n name: string,\n options: LoggerOptions,\n callback: (\n type: LogLevel,\n message: string | LoggerMessage\n ) => void = consoleLogger\n): Logger => {\n return {\n options: { ...options, name },\n error: validateLogger(\"error\", name, { ...options, name }, message =>\n callback(\"error\", message)\n ),\n warn: validateLogger(\"warn\", name, { ...options, name }, message =>\n callback(\"warn\", message)\n ),\n info: validateLogger(\"info\", name, { ...options, name }, message =>\n callback(\"info\", message)\n ),\n debug: validateLogger(\"debug\", name, { ...options, name }, message =>\n callback(\"debug\", message)\n ),\n trace: validateLogger(\"trace\", name, { ...options, name }, message =>\n callback(\"trace\", message)\n )\n };\n};\n\n/**\n * Extend a logging function with a specific name, adding a colored badge to the log output.\n *\n * @param logFn - The original logging function to extend.\n * @param options - The overlay metadata to use for the badge in the log output.\n * @returns A new logging function that includes the badge in its output.\n */\nexport const extendLogFn = (logFn: LogFn, options: LogFnOptions): LogFn => {\n return (meta, ...args) =>\n options.source || options.category\n ? logFn(\n isSetObject(meta)\n ? { ...options, ...meta }\n : { ...options, type: meta },\n `${colorBackground(String(options.source || options.category))} ${args\n .filter(Boolean)\n .map(arg => String(arg).trim())\n .join(\" \")} `\n )\n : logFn(meta, ...args);\n};\n\n/**\n * Extend a logger with a specific name and options, adding a colored badge to the log output for each log message generated by the logger.\n *\n * @param logger - The original logger to extend.\n * @param options - The options to configure the logging function, including the source, command, environment, plugin, log level, custom logger, and colors. These options can be used to customize the appearance and behavior of the log messages generated by the extended logger.\n * @returns A new logger that includes the badge in its output for each log message.\n */\nexport const extendLogger = (\n logger: Logger,\n options: LoggerOptions\n): Logger => {\n const opts = { ...logger.options, ...options } as RequiredKeys<\n LoggerOptions,\n \"name\"\n >;\n\n return {\n options: opts,\n error: validateLogger(\"error\", opts.name, opts, logger.error.bind(logger)),\n warn: validateLogger(\"warn\", opts.name, opts, logger.warn.bind(logger)),\n info: validateLogger(\"info\", opts.name, opts, logger.info.bind(logger)),\n debug: validateLogger(\"debug\", opts.name, opts, logger.debug.bind(logger)),\n trace: validateLogger(\"trace\", opts.name, opts, logger.trace.bind(logger))\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"logging.mjs","names":["defu"],"sources":["../../src/plugin-utils/logging.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { getLogFn, getLogLevel } from \"@storm-software/config-tools/logger\";\nimport { getColor } from \"@storm-software/config-tools/utilities/colors\";\nimport { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { titleCase } from \"@stryke/string-format/title-case\";\nimport { isSetObject } from \"@stryke/type-checks/is-set-object\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport { isString } from \"@stryke/type-checks/is-string\";\nimport { RequiredKeys } from \"@stryke/types/base\";\nimport { uuid } from \"@stryke/unique-id/uuid\";\nimport chalk from \"chalk\";\nimport { defu } from \"defu\";\nimport { DEFAULT_ENVIRONMENT } from \"../constants/environments\";\nimport {\n DEFAULT_DEVELOPMENT_LOG_LEVEL,\n DEFAULT_PRODUCTION_LOG_LEVEL,\n DEFAULT_TEST_LOG_LEVEL\n} from \"../constants/log-level\";\nimport { Mode } from \"../types/config\";\nimport { UnresolvedContext } from \"../types/context\";\nimport type {\n CustomLogger,\n CustomLoggerMessage,\n LogCategory,\n LogFn,\n LogFnMeta,\n LogFnOptions,\n LoggerMessage,\n LoggerOptions,\n LogLevel,\n LogLevelResolvedConfig,\n LogLevelUserConfig,\n LogMeta\n} from \"../types/logging\";\nimport { LOG_LEVELS, LogCategories, Logger, LogLevels } from \"../types/logging\";\n\n/**\n * Determines if the provided log level is considered verbose (debug or trace).\n *\n * @param logLevel - The log level to check, which can be a string or an UnresolvedContext containing the log level in its config.\n * @returns True if the log level is \"debug\" or \"trace\", false otherwise.\n */\nexport function isVerbose(logLevel: string): boolean;\n\n/**\n * Determines if the provided context is considered verbose (debug or trace).\n *\n * @param context - The context to check, which contains the log level in its config.\n * @returns True if the log level is \"debug\" or \"trace\", false otherwise.\n */\nexport function isVerbose(context: UnresolvedContext): boolean;\n\n/**\n * Determines if the provided log level is considered verbose (debug or trace).\n *\n * @param logLevelOrContext - The log level to check, which can be a string or an UnresolvedContext containing the log level in its config.\n * @returns True if the log level is \"debug\" or \"trace\", false otherwise.\n */\nexport function isVerbose(\n logLevelOrContext: string | UnresolvedContext\n): boolean {\n const level = isString(logLevelOrContext)\n ? logLevelOrContext\n : logLevelOrContext.config.logLevel;\n\n return level === \"debug\" || level === \"trace\";\n}\n\n/**\n * Resolves the log level configuration based on the provided log level and mode, returning a complete LogLevelResolvedConfig object that specifies the log level for each log category.\n *\n * @param logLevel - The user-provided log level configuration, which can be a string or an object specifying log levels for each category.\n * @param mode - The current mode of the application (e.g., \"development\", \"test\", \"production\"), which determines the default log levels.\n * @returns A LogLevelResolvedConfig object specifying the log level for each log category.\n */\nexport function resolveLogLevel(\n logLevel?: LogLevelUserConfig,\n mode?: Mode\n): LogLevelResolvedConfig {\n if (logLevel === \"trace\") {\n return {\n general: \"trace\",\n fs: \"trace\",\n performance: \"trace\",\n network: \"trace\",\n plugins: \"trace\",\n hooks: \"trace\",\n env: \"trace\",\n ipc: \"trace\",\n config: \"trace\",\n babel: \"trace\"\n };\n } else if (logLevel === \"silent\") {\n return {\n general: \"silent\",\n fs: \"silent\",\n performance: \"silent\",\n network: \"silent\",\n plugins: \"silent\",\n hooks: \"silent\",\n env: \"silent\",\n ipc: \"silent\",\n config: \"silent\",\n babel: \"silent\"\n };\n }\n\n let defaultLogLevel: LogLevelResolvedConfig;\n if (mode === \"development\") {\n defaultLogLevel = DEFAULT_DEVELOPMENT_LOG_LEVEL;\n } else if (mode === \"test\") {\n defaultLogLevel = DEFAULT_TEST_LOG_LEVEL;\n } else {\n defaultLogLevel = DEFAULT_PRODUCTION_LOG_LEVEL;\n }\n\n if (isSetString(logLevel)) {\n return {\n general: logLevel,\n fs: defaultLogLevel.fs,\n performance: logLevel,\n network: defaultLogLevel.network,\n plugins: logLevel,\n hooks: logLevel,\n env: defaultLogLevel.env,\n ipc: defaultLogLevel.ipc,\n config: defaultLogLevel.config,\n babel: logLevel\n };\n } else if (isSetObject(logLevel)) {\n return defu(logLevel, defaultLogLevel) as LogLevelResolvedConfig;\n }\n\n return defaultLogLevel;\n}\n\nconst BADGE_COLORS = [\n \"#00A0DD\",\n \"#6FCE4E\",\n \"#FBBF24\",\n \"#F43F5E\",\n \"#3B82F6\",\n \"#A855F7\",\n \"#469592\",\n \"#288EDF\",\n \"#D8B4FE\",\n \"#10B981\",\n \"#EF4444\",\n \"#F0EC56\",\n \"#F472B6\",\n \"#22D3EE\",\n \"#EAB308\",\n \"#84CC16\",\n \"#F87171\",\n \"#0EA5E9\",\n \"#D946EF\",\n \"#FACC15\",\n \"#34D399\",\n \"#8B5CF6\"\n] as const;\n\nconst BRAND_COLOR = getColor(\"brand\");\n\n/**\n * Generate a consistent color based on the input text.\n *\n * @param text - The input text to generate the color from.\n * @return A hexadecimal color string.\n */\nexport const getTextColor = (text: string): string => {\n return (\n BADGE_COLORS[\n text\n .split(\"\")\n .map(char => char.charCodeAt(0))\n .reduce((ret, charCode) => ret + charCode, 0) % BADGE_COLORS.length\n ] || BADGE_COLORS[0]\n );\n};\n\n/**\n * Generate a consistent color based on the input text.\n *\n * @param text - The input text to generate the color from.\n * @return A hexadecimal color string.\n */\nexport const colorText = (text: string): string => {\n const title = titleCase(text);\n\n return chalk.hex(getTextColor(title))(title);\n};\n\n/**\n * Generate a consistent color based on the input text.\n *\n * @param text - The input text to generate the color from.\n * @return A hexadecimal color string.\n */\nexport const colorBackground = (text: string): string => {\n const title = titleCase(text);\n\n return chalk.inverse.hex(getTextColor(title))(` ${title} `);\n};\n\nexport const consoleLog = (meta: LogMeta, ...args: string[]) =>\n getLogFn(getLogLevel(meta.type), {\n logLevel: \"trace\"\n })(\n `${meta.name ? chalk.bold.hex(BRAND_COLOR)(kebabCase(meta.name)) : \"\"}${\n meta.command ? chalk.hex(BRAND_COLOR)(` (${meta.command})`) : \"\"\n }${meta.name ? chalk.grey(\" > \") : \"\"}${\n (meta.source || meta.plugin) &&\n (!meta.name ||\n kebabCase(meta.source || meta.plugin) !== kebabCase(meta.name))\n ? `${chalk.bold.hex(BRAND_COLOR)(\n kebabCase(meta.source || meta.plugin)\n )}${chalk.grey(\" > \")}`\n : \"\"\n }${\n meta.environment && kebabCase(meta.environment) !== DEFAULT_ENVIRONMENT\n ? `${chalk.bold.hex(BRAND_COLOR)(\n kebabCase(meta.environment)\n )}${chalk.grey(\" > \")}`\n : \"\"\n }${\n meta.category && meta.category !== LogCategories.GENERAL\n ? `${colorBackground(kebabCase(meta.category))} `\n : \"\"\n }${args.join(\" \")} `.trim()\n );\n\nexport function isValidLogLevel(logLevel: LogLevel, type: LogLevel): boolean {\n if (logLevel === LogLevels.SILENT) {\n return false;\n }\n\n return LOG_LEVELS.indexOf(logLevel) >= LOG_LEVELS.indexOf(type);\n}\n\nexport function isValidLogLevelConfig(\n type: LogLevel,\n logLevel: LogLevelResolvedConfig,\n category: LogCategory = LogCategories.GENERAL\n): boolean {\n return isValidLogLevel(logLevel[category], type);\n}\n\n/**\n * Create a logging function with a specific name and options.\n *\n * @param name - The name of the logging function.\n * @param options - The options to configure the logging function, including the source, command, environment, plugin, log level, custom logger, and colors. These options can be used to customize the appearance and behavior of the log messages generated by the logging function.\n * @returns A logging function.\n */\nexport const createLogFn = (name: string, options: LogFnOptions): LogFn => {\n const logLevel = resolveLogLevel(options.logLevel, options.mode);\n\n return (meta: LogFnMeta | LogLevel, ...args: string[]) => {\n const logMeta = isSetObject(meta)\n ? {\n logId: uuid(),\n timestamp: Date.now(),\n category: LogCategories.GENERAL,\n ...options,\n ...meta,\n name\n }\n : {\n logId: uuid(),\n timestamp: Date.now(),\n category: LogCategories.GENERAL,\n ...options,\n type: meta,\n name\n };\n\n if (\n isValidLogLevelConfig(\n logMeta.type,\n logLevel,\n logMeta.category ? logMeta.category : LogCategories.GENERAL\n )\n ) {\n consoleLog(logMeta, ...args);\n }\n };\n};\n\nconst validateLogger = (\n type: LogLevel,\n name: string,\n options: LoggerOptions,\n callback: (message: string | LoggerMessage) => void\n) => {\n const logLevel = resolveLogLevel(options.logLevel, options.mode);\n\n return (message: string | LoggerMessage) => {\n const params = isSetString(message)\n ? {\n name,\n plugin: options.plugin,\n meta: {\n type,\n name,\n category: LogCategories.GENERAL,\n logId: uuid(),\n timestamp: Date.now(),\n ...options\n },\n message\n }\n : {\n name,\n plugin: options.plugin,\n ...message,\n meta: {\n type,\n name,\n category: LogCategories.GENERAL,\n logId: uuid(),\n timestamp: Date.now(),\n plugin: message.plugin,\n ...options,\n ...message.meta\n }\n };\n\n if (isValidLogLevelConfig(type, logLevel, params.meta.category)) {\n callback(params);\n }\n };\n};\n\nconst validateCustomLogger = (\n type: LogLevel,\n name: string,\n options: LoggerOptions,\n callback?: (message: string | LoggerMessage) => void,\n customCallback?: (message: CustomLoggerMessage) => void\n) => {\n const logLevel = resolveLogLevel(options.logLevel, options.mode);\n\n return (message: string | LoggerMessage) => {\n const params = isSetString(message)\n ? {\n name,\n plugin: options.plugin,\n meta: {\n type,\n name,\n category: LogCategories.GENERAL,\n logId: uuid(),\n timestamp: Date.now(),\n ...options\n },\n message\n }\n : {\n name,\n plugin: options.plugin,\n ...message,\n meta: {\n type,\n name,\n category: LogCategories.GENERAL,\n logId: uuid(),\n timestamp: Date.now(),\n plugin: message.plugin,\n ...options,\n ...message.meta\n }\n };\n\n if (isValidLogLevelConfig(type, logLevel, params.meta.category)) {\n callback?.(params);\n customCallback?.(params);\n }\n };\n};\n\n/**\n * Create a logging function with a specific name and options.\n *\n * @param logger - The original logger to wrap with the custom logger.\n * @param secondaryLogger - The custom logger to use for logging messages, which can be used to override the default logging behavior of the original logger.\n * @returns A new logger that combines the original logger's options with the custom logger's methods, allowing for customized logging behavior while still maintaining the original logger's configuration.\n */\nexport const withLogger = (logger: Logger, secondaryLogger: Logger): Logger => {\n const options = { ...secondaryLogger.options, ...logger.options };\n\n const result = {\n options,\n error: validateLogger(\n \"error\",\n options.name!,\n options,\n (message: string | LoggerMessage) => {\n logger.error?.(message);\n secondaryLogger.error?.(message);\n }\n ),\n warn: validateLogger(\n \"warn\",\n options.name!,\n options,\n (message: string | LoggerMessage) => {\n logger.warn?.(message);\n secondaryLogger.warn?.(message);\n }\n ),\n info: validateLogger(\n \"info\",\n options.name!,\n options,\n (message: string | LoggerMessage) => {\n logger.info?.(message);\n secondaryLogger.info?.(message);\n }\n ),\n debug: validateLogger(\n \"debug\",\n options.name!,\n options,\n (message: string | LoggerMessage) => {\n logger.debug?.(message);\n secondaryLogger.debug?.(message);\n }\n ),\n trace: validateLogger(\n \"trace\",\n options.name!,\n options,\n (message: string | LoggerMessage) => {\n logger.trace?.(message);\n secondaryLogger.trace?.(message);\n }\n )\n } as Logger;\n\n result.log = (type: LogLevel, message: string | LoggerMessage) => {\n switch (type) {\n case \"error\":\n result.error(message);\n break;\n case \"warn\":\n result.warn(message);\n break;\n case \"info\":\n result.info(message);\n break;\n case \"debug\":\n result.debug(message);\n break;\n case \"trace\":\n result.trace(message);\n break;\n case \"silent\":\n break;\n default:\n result.info(message);\n break;\n }\n };\n\n return result;\n};\n\n/**\n * Create a logging function with a specific name and options.\n *\n * @param logger - The original logger to wrap with the custom logger.\n * @param customLogger - The custom logger to use for logging messages, which can be used to override the default logging behavior of the original logger.\n * @returns A new logger that combines the original logger's options with the custom logger's methods, allowing for customized logging behavior while still maintaining the original logger's configuration.\n */\nexport const withCustomLogger = (\n logger: Logger,\n customLogger: CustomLogger\n): Logger => {\n const result = {\n options: logger.options,\n error: validateCustomLogger(\n \"error\",\n logger.options.name!,\n logger.options,\n logger.error.bind(logger),\n customLogger.error?.bind(customLogger)\n ),\n warn: validateCustomLogger(\n \"warn\",\n logger.options.name!,\n logger.options,\n logger.warn.bind(logger),\n customLogger.warn?.bind(customLogger)\n ),\n info: validateCustomLogger(\n \"info\",\n logger.options.name!,\n logger.options,\n logger.info.bind(logger),\n customLogger.info?.bind(customLogger)\n ),\n debug: validateCustomLogger(\n \"debug\",\n logger.options.name!,\n logger.options,\n logger.debug.bind(logger),\n customLogger.debug?.bind(customLogger)\n ),\n trace: validateCustomLogger(\n \"trace\",\n logger.options.name!,\n logger.options,\n logger.trace.bind(logger),\n customLogger.trace?.bind(customLogger)\n )\n } as Logger;\n\n result.log = (type: LogLevel, message: string | LoggerMessage) => {\n switch (type) {\n case \"error\":\n result.error(message);\n break;\n case \"warn\":\n result.warn(message);\n break;\n case \"info\":\n result.info(message);\n break;\n case \"debug\":\n result.debug(message);\n break;\n case \"trace\":\n result.trace(message);\n break;\n case \"silent\":\n break;\n default:\n result.info(message);\n break;\n }\n };\n\n return result;\n};\n\nexport const consoleLogger = (\n type: LogLevel,\n message: string | LoggerMessage\n) =>\n consoleLog(\n isSetString(message)\n ? {\n type,\n category: LogCategories.GENERAL,\n logId: uuid(),\n timestamp: Date.now()\n }\n : {\n type,\n category: LogCategories.GENERAL,\n logId: uuid(),\n timestamp: Date.now(),\n ...message.meta\n },\n isSetString(message) ? message : message.message\n );\n\n/**\n * Create a logging function with a specific name and options.\n *\n * @param name - The name of the logging function.\n * @param options - The options to configure the logging function, including the source, command, environment, plugin, log level, custom logger, and colors. These options can be used to customize the appearance and behavior of the log messages generated by the logging function.\n * @returns A logging function.\n */\nexport const createLogger = (\n name: string,\n options: LoggerOptions,\n callback: (\n type: LogLevel,\n message: string | LoggerMessage\n ) => void = consoleLogger\n): Logger => {\n const result = {\n options: { ...options, name },\n error: validateLogger(\"error\", name, { ...options, name }, message =>\n callback(\"error\", message)\n ),\n warn: validateLogger(\"warn\", name, { ...options, name }, message =>\n callback(\"warn\", message)\n ),\n info: validateLogger(\"info\", name, { ...options, name }, message =>\n callback(\"info\", message)\n ),\n debug: validateLogger(\"debug\", name, { ...options, name }, message =>\n callback(\"debug\", message)\n ),\n trace: validateLogger(\"trace\", name, { ...options, name }, message =>\n callback(\"trace\", message)\n )\n } as Logger;\n\n result.log = (type: LogLevel, message: string | LoggerMessage) => {\n switch (type) {\n case \"error\":\n result.error(message);\n break;\n case \"warn\":\n result.warn(message);\n break;\n case \"info\":\n result.info(message);\n break;\n case \"debug\":\n result.debug(message);\n break;\n case \"trace\":\n result.trace(message);\n break;\n case \"silent\":\n break;\n default:\n result.info(message);\n break;\n }\n };\n\n return result;\n};\n\n/**\n * Extend a logging function with a specific name, adding a colored badge to the log output.\n *\n * @param logFn - The original logging function to extend.\n * @param options - The overlay metadata to use for the badge in the log output.\n * @returns A new logging function that includes the badge in its output.\n */\nexport const extendLogFn = (logFn: LogFn, options: LogFnOptions): LogFn => {\n return (meta, ...args) =>\n options.source || options.category\n ? logFn(\n isSetObject(meta)\n ? { ...options, ...meta }\n : { ...options, type: meta },\n `${colorBackground(String(options.source || options.category))} ${args\n .filter(Boolean)\n .map(arg => String(arg).trim())\n .join(\" \")} `\n )\n : logFn(meta, ...args);\n};\n\n/**\n * Extend a logger with a specific name and options, adding a colored badge to the log output for each log message generated by the logger.\n *\n * @param logger - The original logger to extend.\n * @param options - The options to configure the logging function, including the source, command, environment, plugin, log level, custom logger, and colors. These options can be used to customize the appearance and behavior of the log messages generated by the extended logger.\n * @returns A new logger that includes the badge in its output for each log message.\n */\nexport const extendLogger = (\n logger: Logger,\n options: LoggerOptions\n): Logger => {\n const opts = { ...logger.options, ...options } as RequiredKeys<\n LoggerOptions,\n \"name\"\n >;\n\n const result = {\n options: opts,\n error: validateLogger(\"error\", opts.name, opts, logger.error.bind(logger)),\n warn: validateLogger(\"warn\", opts.name, opts, logger.warn.bind(logger)),\n info: validateLogger(\"info\", opts.name, opts, logger.info.bind(logger)),\n debug: validateLogger(\"debug\", opts.name, opts, logger.debug.bind(logger)),\n trace: validateLogger(\"trace\", opts.name, opts, logger.trace.bind(logger))\n } as Logger;\n\n result.log = (type: LogLevel, message: string | LoggerMessage) => {\n switch (type) {\n case \"error\":\n result.error(message);\n break;\n case \"warn\":\n result.warn(message);\n break;\n case \"info\":\n result.info(message);\n break;\n case \"debug\":\n result.debug(message);\n break;\n case \"trace\":\n result.trace(message);\n break;\n case \"silent\":\n break;\n default:\n result.info(message);\n break;\n }\n };\n\n return result;\n};\n"],"mappings":"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"}
|
|
@@ -44,7 +44,7 @@ let _stryke_path_join = require("@stryke/path/join");
|
|
|
44
44
|
*/
|
|
45
45
|
function replacePathTokens(context, path) {
|
|
46
46
|
if (!path) return path;
|
|
47
|
-
const result = path.replaceAll("{cwd}", context.config.cwd || process.cwd()
|
|
47
|
+
const result = path.replaceAll("{cwd}", context.config.cwd || process.cwd()).replaceAll("{workspaceRoot}", context.config.cwd || process.cwd()).replaceAll("{root}", context.config.root).replaceAll("{projectRoot}", context.config.root).replaceAll("{sourceRoot}", (0, _stryke_path_join.joinPaths)(context.config.root, "src")).replaceAll("{powerlinesPath}", context.powerlinesPath).replaceAll("{cachePath}", context.cachePath).replaceAll("{dataPath}", context.dataPath).replaceAll("{logPath}", context.envPaths.log).replaceAll("{tempPath}", context.envPaths.temp).replaceAll("{configPath}", context.envPaths.config).replaceAll("{outputPath}", context.config.output.path).replaceAll("{output}", context.config.output.path).replaceAll("{artifactsPath}", (0, _stryke_path_replace.replacePath)(context.artifactsPath, context.config.cwd)).replaceAll("{builtinPath}", (0, _stryke_path_replace.replacePath)(context.builtinsPath, context.config.cwd)).replaceAll("{builtinsPath}", (0, _stryke_path_replace.replacePath)(context.builtinsPath, context.config.cwd)).replaceAll("{entryPath}", (0, _stryke_path_replace.replacePath)(context.entryPath, context.config.cwd));
|
|
48
48
|
return context.config.output.copy && (0, _stryke_type_checks_is_set_string.isSetString)(context.config.output.copy.path) ? result.replaceAll("{copyPath}", context.config.output.copy.path).replaceAll("{copy}", context.config.output.copy.path) : result;
|
|
49
49
|
}
|
|
50
50
|
|
|
@@ -42,7 +42,7 @@ import { joinPaths } from "@stryke/path/join";
|
|
|
42
42
|
*/
|
|
43
43
|
function replacePathTokens(context, path) {
|
|
44
44
|
if (!path) return path;
|
|
45
|
-
const result = path.replaceAll("{cwd}", context.config.cwd || process.cwd()
|
|
45
|
+
const result = path.replaceAll("{cwd}", context.config.cwd || process.cwd()).replaceAll("{workspaceRoot}", context.config.cwd || process.cwd()).replaceAll("{root}", context.config.root).replaceAll("{projectRoot}", context.config.root).replaceAll("{sourceRoot}", joinPaths(context.config.root, "src")).replaceAll("{powerlinesPath}", context.powerlinesPath).replaceAll("{cachePath}", context.cachePath).replaceAll("{dataPath}", context.dataPath).replaceAll("{logPath}", context.envPaths.log).replaceAll("{tempPath}", context.envPaths.temp).replaceAll("{configPath}", context.envPaths.config).replaceAll("{outputPath}", context.config.output.path).replaceAll("{output}", context.config.output.path).replaceAll("{artifactsPath}", replacePath(context.artifactsPath, context.config.cwd)).replaceAll("{builtinPath}", replacePath(context.builtinsPath, context.config.cwd)).replaceAll("{builtinsPath}", replacePath(context.builtinsPath, context.config.cwd)).replaceAll("{entryPath}", replacePath(context.entryPath, context.config.cwd));
|
|
46
46
|
return context.config.output.copy && isSetString(context.config.output.copy.path) ? result.replaceAll("{copyPath}", context.config.output.copy.path).replaceAll("{copy}", context.config.output.copy.path) : result;
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.mjs","names":[],"sources":["../../src/plugin-utils/paths.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { joinPaths } from \"@stryke/path/join\";\nimport { replacePath } from \"@stryke/path/replace\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport { IsUndefined } from \"@stryke/types/base\";\nimport { UnresolvedContext } from \"../types/context\";\n\n/**\n * Replaces tokens in the given path string with their corresponding values from the context.\n *\n * @remarks\n * The following tokens are supported:\n * - `{cwd}` - The current working directory.\n * - `{workspaceRoot}` - The current working directory (same as `{cwd}`).\n * - `{root}` - The root directory of the project (same as `{projectRoot}`).\n * - `{projectRoot}` - The root directory of the project (same as `{root}`).\n * - `{sourceRoot}` - The source root directory of the project (usually `{root}/src`).\n * - `{powerlinesPath}` - The directory where Powerlines is installed.\n * - `{cachePath}` - The environment's directory for cached files.\n * - `{dataPath}` - The environment's directory for data files.\n * - `{logPath}` - The environment's directory for log files.\n * - `{tempPath}` - The environment's directory for temporary files.\n * - `{configPath}` - The environment's directory for configuration files.\n * - `{output}` - The configured output directory for the project.\n * - `{outputPath}` - The configured output directory for the project.\n * - `{copy}` - The configured final/copied distribution directory for the project.\n * - `{copyPath}` - The configured final/copied distribution directory for the project.\n * - `{artifactsPath}` - The configured directory for build artifacts.\n * - `{builtinPath}` - The configured directory for generated built-in plugins.\n * - `{entryPath}` - The configured directory for generated entry files.\n *\n * @example\n * ```ts\n * const path = replacePathTokens(context, \"{root}/dist\");\n * // If context.config.root is \"/home/user/project\", this will return \"/home/user/project/dist\"\n *\n * const pathWithCopy = replacePathTokens(context, \"{copy}\");\n * // If context.config.output.copy.path is \"/home/user/project/dist-copy\", this will return \"/home/user/project/dist-copy\"\n * ```\n *\n * @param context - The context containing the values for the path tokens.\n * @param path - The path string with tokens to replace.\n * @returns The path string with tokens replaced by their corresponding values from the context.\n */\nexport function replacePathTokens(\n context: UnresolvedContext,\n path?: string\n): IsUndefined<typeof path> extends true ? undefined : string {\n if (!path) {\n return path as IsUndefined<typeof path> extends true ? undefined : string;\n }\n\n const result = path\n .replaceAll(\"{cwd}\", context.config.cwd || process.cwd()
|
|
1
|
+
{"version":3,"file":"paths.mjs","names":[],"sources":["../../src/plugin-utils/paths.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { joinPaths } from \"@stryke/path/join\";\nimport { replacePath } from \"@stryke/path/replace\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport { IsUndefined } from \"@stryke/types/base\";\nimport { UnresolvedContext } from \"../types/context\";\n\n/**\n * Replaces tokens in the given path string with their corresponding values from the context.\n *\n * @remarks\n * The following tokens are supported:\n * - `{cwd}` - The current working directory.\n * - `{workspaceRoot}` - The current working directory (same as `{cwd}`).\n * - `{root}` - The root directory of the project (same as `{projectRoot}`).\n * - `{projectRoot}` - The root directory of the project (same as `{root}`).\n * - `{sourceRoot}` - The source root directory of the project (usually `{root}/src`).\n * - `{powerlinesPath}` - The directory where Powerlines is installed.\n * - `{cachePath}` - The environment's directory for cached files.\n * - `{dataPath}` - The environment's directory for data files.\n * - `{logPath}` - The environment's directory for log files.\n * - `{tempPath}` - The environment's directory for temporary files.\n * - `{configPath}` - The environment's directory for configuration files.\n * - `{output}` - The configured output directory for the project.\n * - `{outputPath}` - The configured output directory for the project.\n * - `{copy}` - The configured final/copied distribution directory for the project.\n * - `{copyPath}` - The configured final/copied distribution directory for the project.\n * - `{artifactsPath}` - The configured directory for build artifacts.\n * - `{builtinPath}` - The configured directory for generated built-in plugins.\n * - `{entryPath}` - The configured directory for generated entry files.\n *\n * @example\n * ```ts\n * const path = replacePathTokens(context, \"{root}/dist\");\n * // If context.config.root is \"/home/user/project\", this will return \"/home/user/project/dist\"\n *\n * const pathWithCopy = replacePathTokens(context, \"{copy}\");\n * // If context.config.output.copy.path is \"/home/user/project/dist-copy\", this will return \"/home/user/project/dist-copy\"\n * ```\n *\n * @param context - The context containing the values for the path tokens.\n * @param path - The path string with tokens to replace.\n * @returns The path string with tokens replaced by their corresponding values from the context.\n */\nexport function replacePathTokens(\n context: UnresolvedContext,\n path?: string\n): IsUndefined<typeof path> extends true ? undefined : string {\n if (!path) {\n return path as IsUndefined<typeof path> extends true ? undefined : string;\n }\n\n const result = path\n .replaceAll(\"{cwd}\", context.config.cwd || process.cwd())\n .replaceAll(\"{workspaceRoot}\", context.config.cwd || process.cwd())\n .replaceAll(\"{root}\", context.config.root)\n .replaceAll(\"{projectRoot}\", context.config.root)\n .replaceAll(\"{sourceRoot}\", joinPaths(context.config.root, \"src\"))\n .replaceAll(\"{powerlinesPath}\", context.powerlinesPath)\n .replaceAll(\"{cachePath}\", context.cachePath)\n .replaceAll(\"{dataPath}\", context.dataPath)\n .replaceAll(\"{logPath}\", context.envPaths.log)\n .replaceAll(\"{tempPath}\", context.envPaths.temp)\n .replaceAll(\"{configPath}\", context.envPaths.config)\n .replaceAll(\"{outputPath}\", context.config.output.path)\n .replaceAll(\"{output}\", context.config.output.path)\n .replaceAll(\n \"{artifactsPath}\",\n replacePath(context.artifactsPath, context.config.cwd)\n )\n .replaceAll(\n \"{builtinPath}\",\n replacePath(context.builtinsPath, context.config.cwd)\n )\n .replaceAll(\n \"{builtinsPath}\",\n replacePath(context.builtinsPath, context.config.cwd)\n )\n .replaceAll(\n \"{entryPath}\",\n replacePath(context.entryPath, context.config.cwd)\n );\n\n return context.config.output.copy &&\n isSetString(context.config.output.copy.path)\n ? result\n .replaceAll(\"{copyPath}\", context.config.output.copy.path)\n .replaceAll(\"{copy}\", context.config.output.copy.path)\n : result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DA,SAAgB,kBACd,SACA,MAC4D;AAC5D,KAAI,CAAC,KACH,QAAO;CAGT,MAAM,SAAS,KACZ,WAAW,SAAS,QAAQ,OAAO,OAAO,QAAQ,KAAK,CAAC,CACxD,WAAW,mBAAmB,QAAQ,OAAO,OAAO,QAAQ,KAAK,CAAC,CAClE,WAAW,UAAU,QAAQ,OAAO,KAAK,CACzC,WAAW,iBAAiB,QAAQ,OAAO,KAAK,CAChD,WAAW,gBAAgB,UAAU,QAAQ,OAAO,MAAM,MAAM,CAAC,CACjE,WAAW,oBAAoB,QAAQ,eAAe,CACtD,WAAW,eAAe,QAAQ,UAAU,CAC5C,WAAW,cAAc,QAAQ,SAAS,CAC1C,WAAW,aAAa,QAAQ,SAAS,IAAI,CAC7C,WAAW,cAAc,QAAQ,SAAS,KAAK,CAC/C,WAAW,gBAAgB,QAAQ,SAAS,OAAO,CACnD,WAAW,gBAAgB,QAAQ,OAAO,OAAO,KAAK,CACtD,WAAW,YAAY,QAAQ,OAAO,OAAO,KAAK,CAClD,WACC,mBACA,YAAY,QAAQ,eAAe,QAAQ,OAAO,IAAI,CACvD,CACA,WACC,iBACA,YAAY,QAAQ,cAAc,QAAQ,OAAO,IAAI,CACtD,CACA,WACC,kBACA,YAAY,QAAQ,cAAc,QAAQ,OAAO,IAAI,CACtD,CACA,WACC,eACA,YAAY,QAAQ,WAAW,QAAQ,OAAO,IAAI,CACnD;AAEH,QAAO,QAAQ,OAAO,OAAO,QAC3B,YAAY,QAAQ,OAAO,OAAO,KAAK,KAAK,GAC1C,OACG,WAAW,cAAc,QAAQ,OAAO,OAAO,KAAK,KAAK,CACzD,WAAW,UAAU,QAAQ,OAAO,OAAO,KAAK,KAAK,GACxD"}
|
package/dist/types/logging.d.cts
CHANGED
|
@@ -106,6 +106,7 @@ interface Logger {
|
|
|
106
106
|
info: (message: string | LoggerMessage) => void;
|
|
107
107
|
debug: (message: string | LoggerMessage) => void;
|
|
108
108
|
trace: (message: string | LoggerMessage) => void;
|
|
109
|
+
log: (type: LogLevel, message: string | LoggerMessage) => void;
|
|
109
110
|
}
|
|
110
111
|
/**
|
|
111
112
|
* A type representing a log message that can be passed to a custom logger, which includes the log metadata and message content. This type is used as the parameter for the logging methods defined in the {@link CustomLogger} interface, allowing users to log messages with rich metadata that can be used for filtering, formatting, or other purposes in their custom logging implementation.
|
|
@@ -151,7 +152,7 @@ interface CustomLogger {
|
|
|
151
152
|
*/
|
|
152
153
|
trace?: (message: CustomLoggerMessage) => void;
|
|
153
154
|
}
|
|
154
|
-
type LogLevelUserConfig = LogLevel | RequiredKeys<Record<LogCategory, LogLevel | boolean | undefined
|
|
155
|
+
type LogLevelUserConfig = LogLevel | RequiredKeys<Partial<Record<LogCategory, LogLevel | boolean | undefined>>, "general">;
|
|
155
156
|
type LogLevelResolvedConfig = Record<LogCategory, LogLevel>;
|
|
156
157
|
declare type __ΩLogLevel = any[];
|
|
157
158
|
declare type __ΩLogCategory = any[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.d.cts","names":[],"sources":["../../src/types/logging.ts"],"mappings":";;;;;cAsBa,SAAA;EAAA;;;;;;;cASA,UAAA;AAAA,KASD,QAAA,WAAmB,UAAA;AAAA,cAElB,aAAA;EAAA;;;;;;;;;;;cAaA,cAAA;AAAA,KAaD,WAAA,WAAsB,cAAA;AAAA,UAEjB,OAAA;EAjBP;;;EAqBR,KAAA;;;;EAIA,IAAA,EAAM,QAAA;;;;EAIN,QAAA,EAAU,WAAA;;;;EAIV,SAAA;EApBQ;;;EAwBR,IAAA;EAtBU;;;EA0BV,WAAA;EA1B8C;AAEhD;;EA4BE,cAAA;EAhBqB;;;EAoBrB,OAAA;EApBA;;;EAwBA,IAAA;EAZA;;;EAgBA,WAAA;EAAA;;;EAIA,MAAA;EAIM;AAGR;;EAHE,MAAA;AAAA;AAAA,KAGU,YAAA,GAAe,IAAA,CACzB,OAAA,CAAQ,OAAA;EAGR,IAAA,GAAO,IAAA;EACP,QAAA,GAAW,kBAAA;AAAA;AAAA,KAGD,SAAA,GACR,QAAA,GACA,WAAA,CAAY,OAAA;AAAA,KAEJ,KAAA,IAAS,IAAA,EAAM,SAAA,KAAc,IAAA;AAAA,KAE7B,UAAA,GAAa,WAAA,CACvB,IAAA,CAAK,OAAA;AAAA,KAIK,aAAA,GAAgB,IAAA,CAAK,UAAA;EAC/B,IAAA,GAAO,IAAA;EACP,QAAA,GAAW,kBAAA;AAAA;AAAA,UAGI,iBAAA,gBAAiC,eAAA;EAChD,IAAA,EAAM,KAAA;AAAA;AAAA,KAGI,UAAA,GAAa,iBAAA,CAAkB,OAAA,CAAQ,OAAA;AApBnD;;;AAAA,KAyBY,aAAA,GAAgB,iBAAA,CAAkB,UAAA;;;;UAK7B,MAAA;EACf,OAAA,EAAS,aAAA;EACT,KAAA,GAAQ,OAAA,WAAkB,aAAA;EAC1B,IAAA,GAAO,OAAA,WAAkB,aAAA;EACzB,IAAA,GAAO,OAAA,WAAkB,aAAA;EACzB,KAAA,GAAQ,OAAA,WAAkB,aAAA;EAC1B,KAAA,GAAQ,OAAA,WAAkB,aAAA;AAAA;;;;
|
|
1
|
+
{"version":3,"file":"logging.d.cts","names":[],"sources":["../../src/types/logging.ts"],"mappings":";;;;;cAsBa,SAAA;EAAA;;;;;;;cASA,UAAA;AAAA,KASD,QAAA,WAAmB,UAAA;AAAA,cAElB,aAAA;EAAA;;;;;;;;;;;cAaA,cAAA;AAAA,KAaD,WAAA,WAAsB,cAAA;AAAA,UAEjB,OAAA;EAjBP;;;EAqBR,KAAA;;;;EAIA,IAAA,EAAM,QAAA;;;;EAIN,QAAA,EAAU,WAAA;;;;EAIV,SAAA;EApBQ;;;EAwBR,IAAA;EAtBU;;;EA0BV,WAAA;EA1B8C;AAEhD;;EA4BE,cAAA;EAhBqB;;;EAoBrB,OAAA;EApBA;;;EAwBA,IAAA;EAZA;;;EAgBA,WAAA;EAAA;;;EAIA,MAAA;EAIM;AAGR;;EAHE,MAAA;AAAA;AAAA,KAGU,YAAA,GAAe,IAAA,CACzB,OAAA,CAAQ,OAAA;EAGR,IAAA,GAAO,IAAA;EACP,QAAA,GAAW,kBAAA;AAAA;AAAA,KAGD,SAAA,GACR,QAAA,GACA,WAAA,CAAY,OAAA;AAAA,KAEJ,KAAA,IAAS,IAAA,EAAM,SAAA,KAAc,IAAA;AAAA,KAE7B,UAAA,GAAa,WAAA,CACvB,IAAA,CAAK,OAAA;AAAA,KAIK,aAAA,GAAgB,IAAA,CAAK,UAAA;EAC/B,IAAA,GAAO,IAAA;EACP,QAAA,GAAW,kBAAA;AAAA;AAAA,UAGI,iBAAA,gBAAiC,eAAA;EAChD,IAAA,EAAM,KAAA;AAAA;AAAA,KAGI,UAAA,GAAa,iBAAA,CAAkB,OAAA,CAAQ,OAAA;AApBnD;;;AAAA,KAyBY,aAAA,GAAgB,iBAAA,CAAkB,UAAA;;;;UAK7B,MAAA;EACf,OAAA,EAAS,aAAA;EACT,KAAA,GAAQ,OAAA,WAAkB,aAAA;EAC1B,IAAA,GAAO,OAAA,WAAkB,aAAA;EACzB,IAAA,GAAO,OAAA,WAAkB,aAAA;EACzB,KAAA,GAAQ,OAAA,WAAkB,aAAA;EAC1B,KAAA,GAAQ,OAAA,WAAkB,aAAA;EAC1B,GAAA,GAAM,IAAA,EAAM,QAAA,EAAU,OAAA,WAAkB,aAAA;AAAA;;;;KAM9B,mBAAA,GAAsB,iBAAA,CAAkB,IAAA,CAAK,OAAA;;;AArCzD;UA0CiB,YAAA;;;;;;;EAOf,KAAA,IAAS,OAAA,EAAS,mBAAA;EAhDlB;;;;AAIF;;EAmDE,IAAA,IAAQ,OAAA,EAAS,mBAAA;EAnDc;;;;;;EA0D/B,IAAA,IAAQ,OAAA,EAAS,mBAAA;EA1Dc;;;;;;EAiE/B,KAAA,IAAS,OAAA,EAAS,mBAAA;EA5DH;;;;;;EAmEf,KAAA,IAAS,OAAA,EAAS,mBAAA;AAAA;AAAA,KAGR,kBAAA,GACR,QAAA,GACA,YAAA,CACE,OAAA,CAAQ,MAAA,CAAO,WAAA,EAAa,QAAA;AAAA,KAItB,sBAAA,GAAyB,MAAA,CAAO,WAAA,EAAa,QAAA;AAAA"}
|