@cenk1cenk2/oclif-common 6.3.30 → 6.4.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.
Files changed (104) hide show
  1. package/dist/commands/base.command.d.ts +43 -0
  2. package/dist/commands/base.command.js +156 -0
  3. package/dist/commands/index.js +1 -0
  4. package/dist/constants/file.constants.d.ts +6 -0
  5. package/dist/constants/file.constants.js +8 -0
  6. package/dist/constants/help-groups.constants.d.ts +6 -0
  7. package/dist/constants/help-groups.constants.js +8 -0
  8. package/dist/hooks/index.js +2 -0
  9. package/dist/hooks/not-found.hook.d.ts +6 -0
  10. package/dist/hooks/not-found.hook.js +18 -0
  11. package/dist/hooks/update-notifier.hook.d.ts +6 -0
  12. package/dist/hooks/update-notifier.hook.js +11 -0
  13. package/dist/index.d.ts +51 -450
  14. package/dist/index.js +42 -1361
  15. package/dist/interfaces/class.interface.d.ts +4 -0
  16. package/dist/interfaces/hooks.interface.d.ts +16 -0
  17. package/dist/interfaces/index.js +1 -0
  18. package/dist/interfaces/oclif.interface.d.ts +9 -0
  19. package/dist/interfaces/oclif.interface.js +3 -0
  20. package/dist/interfaces/type-helper.interface.d.ts +7 -0
  21. package/dist/lib/cli.interface.d.ts +8 -0
  22. package/dist/lib/cli.module.d.ts +11 -0
  23. package/dist/lib/cli.module.js +57 -0
  24. package/dist/lib/config/config.constants.js +12 -0
  25. package/dist/lib/config/config.interface.d.ts +21 -0
  26. package/dist/lib/config/config.module.d.ts +4 -0
  27. package/dist/lib/config/config.module.js +15 -0
  28. package/dist/lib/config/config.service.d.ts +32 -0
  29. package/dist/lib/config/config.service.js +152 -0
  30. package/dist/lib/config/index.js +2 -0
  31. package/dist/lib/fs/filesystem.interface.d.ts +2 -0
  32. package/dist/lib/fs/filesystem.module.d.ts +4 -0
  33. package/dist/lib/fs/filesystem.module.js +13 -0
  34. package/dist/lib/fs/filesystem.service.d.ts +31 -0
  35. package/dist/lib/fs/filesystem.service.js +141 -0
  36. package/dist/lib/fs/index.js +2 -0
  37. package/dist/lib/index.js +32 -0
  38. package/dist/lib/locker/index.js +2 -0
  39. package/dist/lib/locker/locker.interface.d.ts +28 -0
  40. package/dist/lib/locker/locker.module.d.ts +9 -0
  41. package/dist/lib/locker/locker.module.js +33 -0
  42. package/dist/lib/locker/locker.service.d.ts +41 -0
  43. package/dist/lib/locker/locker.service.js +170 -0
  44. package/dist/lib/logger/index.js +6 -0
  45. package/dist/lib/logger/logger.constants.d.ts +21 -0
  46. package/dist/lib/logger/logger.constants.js +24 -0
  47. package/dist/lib/logger/logger.interface.d.ts +13 -0
  48. package/dist/lib/logger/logger.module.d.ts +4 -0
  49. package/dist/lib/logger/logger.module.js +17 -0
  50. package/dist/lib/logger/logger.service.d.ts +31 -0
  51. package/dist/lib/logger/logger.service.js +70 -0
  52. package/dist/lib/logger/pipe/pipe-process-to-listr.d.ts +7 -0
  53. package/dist/lib/logger/pipe/pipe-process-to-listr.js +9 -0
  54. package/dist/lib/logger/pipe/pipe-process-to-logger.d.ts +12 -0
  55. package/dist/lib/logger/pipe/pipe-process-to-logger.interface.d.ts +19 -0
  56. package/dist/lib/logger/pipe/pipe-process-to-logger.js +54 -0
  57. package/dist/lib/logger/winston.service.d.ts +15 -0
  58. package/dist/lib/logger/winston.service.js +91 -0
  59. package/dist/lib/logo/index.js +3 -0
  60. package/dist/lib/logo/logo.constants.d.ts +6 -0
  61. package/dist/lib/logo/logo.constants.js +5 -0
  62. package/dist/lib/logo/logo.interface.d.ts +6 -0
  63. package/dist/lib/logo/logo.module.d.ts +4 -0
  64. package/dist/lib/logo/logo.module.js +13 -0
  65. package/dist/lib/logo/logo.service.d.ts +17 -0
  66. package/dist/lib/logo/logo.service.js +42 -0
  67. package/dist/lib/parser/fts/env-parser.service.d.ts +16 -0
  68. package/dist/lib/parser/fts/env-parser.service.js +42 -0
  69. package/dist/lib/parser/fts/index.js +3 -0
  70. package/dist/lib/parser/fts/json-parser.service.d.ts +15 -0
  71. package/dist/lib/parser/fts/json-parser.service.js +32 -0
  72. package/dist/lib/parser/fts/yaml-parser.service.d.ts +15 -0
  73. package/dist/lib/parser/fts/yaml-parser.service.js +33 -0
  74. package/dist/lib/parser/index.js +6 -0
  75. package/dist/lib/parser/parser.interface.d.ts +8 -0
  76. package/dist/lib/parser/parser.module.d.ts +4 -0
  77. package/dist/lib/parser/parser.module.js +16 -0
  78. package/dist/lib/parser/parser.service.d.ts +29 -0
  79. package/dist/lib/parser/parser.service.js +76 -0
  80. package/dist/lib/setup.d.ts +4 -0
  81. package/dist/lib/setup.js +16 -0
  82. package/dist/lib/validator/index.js +3 -0
  83. package/dist/lib/validator/validator.constants.d.ts +6 -0
  84. package/dist/lib/validator/validator.constants.js +5 -0
  85. package/dist/lib/validator/validator.interface.d.ts +10 -0
  86. package/dist/lib/validator/validator.module.d.ts +4 -0
  87. package/dist/lib/validator/validator.module.js +13 -0
  88. package/dist/lib/validator/validator.service.d.ts +19 -0
  89. package/dist/lib/validator/validator.service.js +76 -0
  90. package/dist/utils/defaults.d.ts +12 -0
  91. package/dist/utils/defaults.js +16 -0
  92. package/dist/utils/environment.d.ts +8 -0
  93. package/dist/utils/environment.js +16 -0
  94. package/dist/utils/guards.d.ts +9 -0
  95. package/dist/utils/guards.js +13 -0
  96. package/dist/utils/index.d.ts +7 -0
  97. package/dist/utils/index.js +8 -0
  98. package/dist/utils/merge.constants.d.ts +7 -0
  99. package/dist/utils/merge.constants.js +9 -0
  100. package/dist/utils/merge.d.ts +9 -0
  101. package/dist/utils/merge.js +15 -0
  102. package/package.json +26 -22
  103. package/dist/chunk-DzC9Nte8.js +0 -31
  104. package/dist/source-map-support-CuBekda-.js +0 -2435
@@ -0,0 +1,33 @@
1
+ import { LoggerService } from "../logger/logger.service.js";
2
+ import "../logger/index.js";
3
+ import { FileSystemService } from "../fs/filesystem.service.js";
4
+ import "../fs/index.js";
5
+ import { ParserService } from "../parser/parser.service.js";
6
+ import "../parser/index.js";
7
+ import { LockerService } from "./locker.service.js";
8
+ import { Module } from "@nestjs/common";
9
+ import _decorate from "@oxc-project/runtime/helpers/decorate";
10
+
11
+ //#region src/lib/locker/locker.module.ts
12
+ var _LockerModule;
13
+ let LockerModule = _LockerModule = class LockerModule$1 {
14
+ static forFeature(options) {
15
+ const token = options.token ?? LockerService;
16
+ return {
17
+ module: _LockerModule,
18
+ providers: [{
19
+ provide: token,
20
+ useFactory: (logger, fs, parser) => new LockerService(logger, fs, parser, options),
21
+ inject: [
22
+ LoggerService,
23
+ FileSystemService,
24
+ ParserService
25
+ ]
26
+ }]
27
+ };
28
+ }
29
+ };
30
+ LockerModule = _LockerModule = _decorate([Module({})], LockerModule);
31
+
32
+ //#endregion
33
+ export { LockerModule };
@@ -0,0 +1,41 @@
1
+ import { LoggerService } from "../logger/logger.service.js";
2
+ import { FileSystemService } from "../fs/filesystem.service.js";
3
+ import { ParserService } from "../parser/parser.service.js";
4
+ import { LockData, LockableData, LockerServiceOptions, UnlockData } from "./locker.interface.js";
5
+ import { OnModuleInit } from "@nestjs/common";
6
+ import op from "object-path-immutable";
7
+
8
+ //#region src/lib/locker/locker.service.d.ts
9
+ declare class LockerService<LockFile extends LockableData = LockableData> implements OnModuleInit {
10
+ private readonly logger;
11
+ private readonly fs;
12
+ private readonly parser;
13
+ private readonly options;
14
+ readonly op: typeof op;
15
+ private toLock;
16
+ private toUnlock;
17
+ constructor(logger: LoggerService, fs: FileSystemService, parser: ParserService, options: LockerServiceOptions);
18
+ onModuleInit(): Promise<void>;
19
+ hasLock(): boolean;
20
+ hasUnlock(): boolean;
21
+ addLock<T extends LockableData = LockFile>(...data: LockData<T>[]): void;
22
+ addUnlock(...data: UnlockData[]): void;
23
+ applyLockAll(lock: LockFile): Promise<LockFile>;
24
+ lockAll(): Promise<void>;
25
+ applyUnlockAll(lock: LockFile): Promise<LockFile>;
26
+ unlockAll(): Promise<void>;
27
+ all(): Promise<void>;
28
+ applyAll(lock: LockFile): Promise<LockFile>;
29
+ applyLock<T extends LockableData = LockFile>(lock: LockFile, ...data: LockData<T>[]): Promise<LockFile>;
30
+ lock<T extends LockableData = LockFile>(...data: LockData<T>[]): Promise<LockFile>;
31
+ applyUnlock(lock: LockFile, ...data: UnlockData[]): Promise<LockFile>;
32
+ unlock(...data: UnlockData[]): Promise<LockFile | undefined>;
33
+ read(): Promise<LockFile>;
34
+ tryRead(): Promise<LockFile | undefined>;
35
+ tryRemove(): Promise<void>;
36
+ write(data: LockFile): Promise<void>;
37
+ private buildPath;
38
+ private normalizePath;
39
+ }
40
+ //#endregion
41
+ export { LockerService };
@@ -0,0 +1,170 @@
1
+ import { LoggerService } from "../logger/logger.service.js";
2
+ import "../logger/index.js";
3
+ import { FileSystemService } from "../fs/filesystem.service.js";
4
+ import "../fs/index.js";
5
+ import { ParserService } from "../parser/parser.service.js";
6
+ import { merge } from "../../utils/merge.js";
7
+ import "../../utils/index.js";
8
+ import "../parser/index.js";
9
+ import { Injectable } from "@nestjs/common";
10
+ import op from "object-path-immutable";
11
+ import _decorateMetadata from "@oxc-project/runtime/helpers/decorateMetadata";
12
+ import _decorate from "@oxc-project/runtime/helpers/decorate";
13
+
14
+ //#region src/lib/locker/locker.service.ts
15
+ var _ref, _ref2, _ref3;
16
+ let LockerService = class LockerService$1 {
17
+ constructor(logger, fs, parser, options) {
18
+ this.logger = logger;
19
+ this.fs = fs;
20
+ this.parser = parser;
21
+ this.options = options;
22
+ this.op = op;
23
+ this.toLock = [];
24
+ this.toUnlock = [];
25
+ }
26
+ async onModuleInit() {
27
+ this.logger.setup(this.constructor.name);
28
+ }
29
+ hasLock() {
30
+ return this.toLock.length > 0;
31
+ }
32
+ hasUnlock() {
33
+ return this.toUnlock.length > 0;
34
+ }
35
+ addLock(...data) {
36
+ this.toLock.push(...data);
37
+ }
38
+ addUnlock(...data) {
39
+ this.toUnlock.push(...data);
40
+ }
41
+ async applyLockAll(lock) {
42
+ if (this.hasLock()) return this.applyLock(lock, ...this.toLock);
43
+ return lock;
44
+ }
45
+ async lockAll() {
46
+ if (this.hasLock()) {
47
+ await this.lock(...this.toLock);
48
+ this.toLock = [];
49
+ }
50
+ }
51
+ async applyUnlockAll(lock) {
52
+ if (this.hasUnlock()) return this.applyUnlock(lock, ...this.toUnlock);
53
+ return lock;
54
+ }
55
+ async unlockAll() {
56
+ if (this.hasUnlock()) {
57
+ await this.unlock(...this.toUnlock);
58
+ this.toUnlock = [];
59
+ }
60
+ }
61
+ async all() {
62
+ await this.unlockAll();
63
+ await this.lockAll();
64
+ }
65
+ async applyAll(lock) {
66
+ lock = await this.applyUnlockAll(lock);
67
+ lock = await this.applyLockAll(lock);
68
+ return lock;
69
+ }
70
+ async applyLock(lock, ...data) {
71
+ data.forEach((d) => {
72
+ if (d?.enabled === false) return;
73
+ else if (!d?.data || Array.isArray(d?.data) && d.data.length === 0 || typeof d?.data === "object" && Object.keys(d.data).length === 0) return;
74
+ const path = this.buildPath(d);
75
+ if (d?.merge) {
76
+ let parsed;
77
+ if (typeof d.data === "object") parsed = merge(d.merge, this.op.get(lock, path, Array.isArray(d.data) ? [] : {}), d.data);
78
+ else {
79
+ this.logger.warn("\"%s\" path with type \"%s\" is not mergeable.", path, typeof d.data);
80
+ parsed = d.data;
81
+ }
82
+ lock = this.op.set(lock, path, parsed);
83
+ this.logger.verbose("Merge lock: %s -> %o", path, d.data);
84
+ return;
85
+ }
86
+ lock = this.op.set(lock, path, d.data);
87
+ this.logger.verbose("Override lock: %s -> %o", path, d.data);
88
+ });
89
+ return lock;
90
+ }
91
+ async lock(...data) {
92
+ const lock = await this.applyLock(await this.tryRead() ?? {}, ...data);
93
+ await this.write(lock);
94
+ return lock;
95
+ }
96
+ async applyUnlock(lock, ...data) {
97
+ if (data.length > 0) {
98
+ data.forEach((d) => {
99
+ if (d?.enabled === false) return;
100
+ const path = this.buildPath(d);
101
+ lock = op.del(lock, path);
102
+ this.logger.verbose("Unlocked: %s", path);
103
+ for (let i = path.length - 1; i >= 0; i--) {
104
+ const parentPath = path.slice(0, i);
105
+ const parent = this.op.get(lock, parentPath);
106
+ if (!parent || Array.isArray(parent) && parent.length === 0 || typeof parent === "object" && Object.keys(parent).length === 0) {
107
+ this.logger.verbose("Unlocked parent: %s -> %s", path, parentPath);
108
+ lock = op.del(lock, parentPath);
109
+ } else break;
110
+ }
111
+ });
112
+ return lock;
113
+ }
114
+ lock = op.del(lock, this.options.root);
115
+ this.logger.verbose("Unlocked module: %s", this.options.root);
116
+ return lock;
117
+ }
118
+ async unlock(...data) {
119
+ const state = await this.tryRead();
120
+ if (!state) {
121
+ this.logger.verbose("Lock file not found. Nothing to unlock.");
122
+ return;
123
+ }
124
+ const lock = await this.applyUnlock(state, ...data);
125
+ await this.write(lock);
126
+ return lock;
127
+ }
128
+ async read() {
129
+ return this.parser.fetch(this.options.parser).parse(await this.fs.read(this.options.file));
130
+ }
131
+ async tryRead() {
132
+ const lock = await this.fs.read(this.options.file).catch((err) => {
133
+ this.logger.trace("Can not read lockfile: %s -> %s", this.options.file, err.message);
134
+ });
135
+ if (!lock) return;
136
+ return this.parser.fetch(this.options.parser).parse(lock);
137
+ }
138
+ async tryRemove() {
139
+ return this.fs.remove(this.options.file).then(() => {
140
+ this.logger.trace("Removed lockfile: %s", this.options.file);
141
+ }).catch((err) => {
142
+ this.logger.trace("Can not remove lockfile: %s -> %s", this.options.file, err.message);
143
+ });
144
+ }
145
+ async write(data) {
146
+ if (!data || Array.isArray(data) && data.length === 0 || typeof data === "object" && Object.keys(data).length === 0) {
147
+ this.logger.trace("Trying to write empty lock file, deleting it instead: %s", this.options.file);
148
+ return this.fs.remove(this.options.file);
149
+ }
150
+ return this.fs.write(this.options.file, this.parser.fetch(this.options.parser).stringify(data));
151
+ }
152
+ buildPath(d) {
153
+ if (d?.root !== true && this.options.root?.length) return [...this.options.root, ...this.normalizePath(d.path)];
154
+ return this.normalizePath(d.path);
155
+ }
156
+ normalizePath(path) {
157
+ if (Array.isArray(path)) return path.map((p) => p.toString());
158
+ else if (typeof path === "string") return path.split(".");
159
+ return [];
160
+ }
161
+ };
162
+ LockerService = _decorate([Injectable(), _decorateMetadata("design:paramtypes", [
163
+ typeof (_ref = typeof LoggerService !== "undefined" && LoggerService) === "function" ? _ref : Object,
164
+ typeof (_ref2 = typeof FileSystemService !== "undefined" && FileSystemService) === "function" ? _ref2 : Object,
165
+ typeof (_ref3 = typeof ParserService !== "undefined" && ParserService) === "function" ? _ref3 : Object,
166
+ Object
167
+ ])], LockerService);
168
+
169
+ //#endregion
170
+ export { LockerService };
@@ -0,0 +1,6 @@
1
+ import { pipeProcessThroughListr } from "./pipe/pipe-process-to-listr.js";
2
+ import { LogFieldStatus, LogLevels } from "./logger.constants.js";
3
+ import { pipeProcessToLogger } from "./pipe/pipe-process-to-logger.js";
4
+ import { WinstonService } from "./winston.service.js";
5
+ import { LoggerService } from "./logger.service.js";
6
+ import { LoggerModule } from "./logger.module.js";
@@ -0,0 +1,21 @@
1
+ //#region src/lib/logger/logger.constants.d.ts
2
+ declare enum LogLevels {
3
+ SILENT = "SILENT",
4
+ DIRECT = "DIRECT",
5
+ FATAL = "FATAL",
6
+ ERROR = "ERROR",
7
+ WARN = "WARN",
8
+ INFO = "INFO",
9
+ VERBOSE = "VERBOSE",
10
+ DEBUG = "DEBUG",
11
+ TRACE = "TRACE",
12
+ }
13
+ declare enum LogFieldStatus {
14
+ RUN = "run",
15
+ END = "end",
16
+ STAGE = "stage",
17
+ EXIT = "exit",
18
+ TERMINATE = "terminate",
19
+ }
20
+ //#endregion
21
+ export { LogFieldStatus, LogLevels };
@@ -0,0 +1,24 @@
1
+ //#region src/lib/logger/logger.constants.ts
2
+ let LogLevels = /* @__PURE__ */ function(LogLevels$1) {
3
+ LogLevels$1["SILENT"] = "SILENT";
4
+ LogLevels$1["DIRECT"] = "DIRECT";
5
+ LogLevels$1["FATAL"] = "FATAL";
6
+ LogLevels$1["ERROR"] = "ERROR";
7
+ LogLevels$1["WARN"] = "WARN";
8
+ LogLevels$1["INFO"] = "INFO";
9
+ LogLevels$1["VERBOSE"] = "VERBOSE";
10
+ LogLevels$1["DEBUG"] = "DEBUG";
11
+ LogLevels$1["TRACE"] = "TRACE";
12
+ return LogLevels$1;
13
+ }({});
14
+ let LogFieldStatus = /* @__PURE__ */ function(LogFieldStatus$1) {
15
+ LogFieldStatus$1["RUN"] = "run";
16
+ LogFieldStatus$1["END"] = "end";
17
+ LogFieldStatus$1["STAGE"] = "stage";
18
+ LogFieldStatus$1["EXIT"] = "exit";
19
+ LogFieldStatus$1["TERMINATE"] = "terminate";
20
+ return LogFieldStatus$1;
21
+ }({});
22
+
23
+ //#endregion
24
+ export { LogFieldStatus, LogLevels };
@@ -0,0 +1,13 @@
1
+ import { LogLevels } from "./logger.constants.js";
2
+ import { LeveledLogMethod, Logger } from "winston";
3
+
4
+ //#region src/lib/logger/logger.interface.d.ts
5
+ interface LoggerFormat {
6
+ level: LogLevels;
7
+ message: string;
8
+ context: string;
9
+ status: string;
10
+ }
11
+ type Winston = Logger & Record<keyof typeof LogLevels, LeveledLogMethod>;
12
+ //#endregion
13
+ export { LoggerFormat, Winston };
@@ -0,0 +1,4 @@
1
+ //#region src/lib/logger/logger.module.d.ts
2
+ declare class LoggerModule {}
3
+ //#endregion
4
+ export { LoggerModule };
@@ -0,0 +1,17 @@
1
+ import { WinstonService } from "./winston.service.js";
2
+ import { LoggerService } from "./logger.service.js";
3
+ import { ConfigModule } from "../config/config.module.js";
4
+ import "../config/index.js";
5
+ import { Global, Module } from "@nestjs/common";
6
+ import _decorate from "@oxc-project/runtime/helpers/decorate";
7
+
8
+ //#region src/lib/logger/logger.module.ts
9
+ let LoggerModule = class LoggerModule$1 {};
10
+ LoggerModule = _decorate([Global(), Module({
11
+ imports: [ConfigModule],
12
+ providers: [WinstonService, LoggerService],
13
+ exports: [LoggerService]
14
+ })], LoggerModule);
15
+
16
+ //#endregion
17
+ export { LoggerModule };
@@ -0,0 +1,31 @@
1
+ import { LogLevels } from "./logger.constants.js";
2
+ import { WinstonService } from "./winston.service.js";
3
+ import { splat } from "listr2";
4
+
5
+ //#region src/lib/logger/logger.service.d.ts
6
+
7
+ /**
8
+ * A general logger for the the CLI applications.
9
+ */
10
+ declare class LoggerService {
11
+ private readonly winston;
12
+ context: string;
13
+ constructor(winston: WinstonService);
14
+ setup(context: string): LoggerService;
15
+ log(level: LogLevels, data: string | Buffer, ...args: any): void;
16
+ direct(data: string | Buffer, ...args: any): void;
17
+ fatal(data: string | Buffer, ...args: any): void;
18
+ error(data: string | Buffer, ...args: any): void;
19
+ warn(data: string | Buffer, ...args: any): void;
20
+ info(data: string | Buffer, ...args: any): void;
21
+ verbose(data: string | Buffer, ...args: any): void;
22
+ debug(data: string | Buffer, ...args: any): void;
23
+ trace(data: string | Buffer, ...args: any): void;
24
+ run(data: string | Buffer, ...args: any): void;
25
+ end(data: string | Buffer, ...args: any): void;
26
+ stage(data: string | Buffer, ...args: any): void;
27
+ splat(...args: Parameters<typeof splat>): ReturnType<typeof splat>;
28
+ private parseMessage;
29
+ }
30
+ //#endregion
31
+ export { LoggerService };
@@ -0,0 +1,70 @@
1
+ import { LogFieldStatus, LogLevels } from "./logger.constants.js";
2
+ import { WinstonService } from "./winston.service.js";
3
+ import { Injectable, Scope } from "@nestjs/common";
4
+ import { splat } from "listr2";
5
+ import _decorateMetadata from "@oxc-project/runtime/helpers/decorateMetadata";
6
+ import _decorate from "@oxc-project/runtime/helpers/decorate";
7
+
8
+ //#region src/lib/logger/logger.service.ts
9
+ var _ref;
10
+ let LoggerService = class LoggerService$1 {
11
+ constructor(winston) {
12
+ this.winston = winston;
13
+ }
14
+ setup(context) {
15
+ this.context = context;
16
+ return this;
17
+ }
18
+ log(level, data, ...args) {
19
+ return this.parseMessage(level, data, args);
20
+ }
21
+ direct(data, ...args) {
22
+ return this.parseMessage(LogLevels.DIRECT, data, args);
23
+ }
24
+ fatal(data, ...args) {
25
+ return this.parseMessage(LogLevels.FATAL, data, args);
26
+ }
27
+ error(data, ...args) {
28
+ return this.parseMessage(LogLevels.ERROR, data, args);
29
+ }
30
+ warn(data, ...args) {
31
+ return this.parseMessage(LogLevels.WARN, data, args);
32
+ }
33
+ info(data, ...args) {
34
+ return this.parseMessage(LogLevels.INFO, data, args);
35
+ }
36
+ verbose(data, ...args) {
37
+ return this.parseMessage(LogLevels.VERBOSE, data, args);
38
+ }
39
+ debug(data, ...args) {
40
+ return this.parseMessage(LogLevels.DEBUG, data, args);
41
+ }
42
+ trace(data, ...args) {
43
+ return this.parseMessage(LogLevels.TRACE, data, args);
44
+ }
45
+ run(data, ...args) {
46
+ return this.parseMessage(LogLevels.INFO, data, args, { status: LogFieldStatus.RUN });
47
+ }
48
+ end(data, ...args) {
49
+ return this.parseMessage(LogLevels.INFO, data, args, { status: LogFieldStatus.END });
50
+ }
51
+ stage(data, ...args) {
52
+ return this.parseMessage(LogLevels.TRACE, data, args, { status: LogFieldStatus.STAGE });
53
+ }
54
+ splat(...args) {
55
+ const message = args.shift();
56
+ if (typeof message === "undefined") return "";
57
+ if (args.length === 0) return message;
58
+ return splat(message, args);
59
+ }
60
+ parseMessage(level, data, args, format) {
61
+ this.winston.instance.log(level, data.toString(), ...args ?? [], {
62
+ context: this.context,
63
+ ...format ?? {}
64
+ });
65
+ }
66
+ };
67
+ LoggerService = _decorate([Injectable({ scope: Scope.TRANSIENT }), _decorateMetadata("design:paramtypes", [typeof (_ref = typeof WinstonService !== "undefined" && WinstonService) === "function" ? _ref : Object])], LoggerService);
68
+
69
+ //#endregion
70
+ export { LoggerService };
@@ -0,0 +1,7 @@
1
+ import { ListrTaskWrapper } from "listr2";
2
+ import { ChildProcess } from "child_process";
3
+
4
+ //#region src/lib/logger/pipe/pipe-process-to-listr.d.ts
5
+ declare function pipeProcessThroughListr(task: ListrTaskWrapper<any, any, any>, instance: ChildProcess): ChildProcess;
6
+ //#endregion
7
+ export { pipeProcessThroughListr };
@@ -0,0 +1,9 @@
1
+ //#region src/lib/logger/pipe/pipe-process-to-listr.ts
2
+ function pipeProcessThroughListr(task, instance) {
3
+ instance.stdout.pipe(task.stdout());
4
+ instance.stderr.pipe(task.stdout());
5
+ return instance;
6
+ }
7
+
8
+ //#endregion
9
+ export { pipeProcessThroughListr };
@@ -0,0 +1,12 @@
1
+ import { PipeProcessToLoggerOptions } from "./pipe-process-to-logger.interface.js";
2
+ import { LoggerService } from "../logger.service.js";
3
+ import { ChildProcess } from "child_process";
4
+
5
+ //#region src/lib/logger/pipe/pipe-process-to-logger.d.ts
6
+
7
+ /**
8
+ * Given the instance it will pipe process output through the logger to append prefixes such as the application name.
9
+ */
10
+ declare function pipeProcessToLogger(logger: LoggerService, instance: ChildProcess, options?: PipeProcessToLoggerOptions): ChildProcess;
11
+ //#endregion
12
+ export { pipeProcessToLogger };
@@ -0,0 +1,19 @@
1
+ import { LogLevels } from "../logger.constants.js";
2
+
3
+ //#region src/lib/logger/pipe/pipe-process-to-logger.interface.d.ts
4
+ interface PipeProcessToLoggerOptions {
5
+ /** Will log the command when the process starts. */
6
+ start?: LogLevels;
7
+ /** Will log the command when the process ends. */
8
+ end?: LogLevels;
9
+ /** enable/disable stdout */
10
+ stdout?: LogLevels;
11
+ /** enable/disable stderrr */
12
+ stderr?: LogLevels;
13
+ /** will callback on error in the instance */
14
+ callback?: (error?: Error) => void;
15
+ /** context for logger */
16
+ context?: string;
17
+ }
18
+ //#endregion
19
+ export { PipeProcessToLoggerOptions };
@@ -0,0 +1,54 @@
1
+ import { LogLevels } from "../logger.constants.js";
2
+ import { Writable } from "stream";
3
+
4
+ //#region src/lib/logger/pipe/pipe-process-to-logger.ts
5
+ /**
6
+ * Given the instance it will pipe process output through the logger to append prefixes such as the application name.
7
+ */
8
+ function pipeProcessToLogger(logger, instance, options) {
9
+ options = {
10
+ start: LogLevels.INFO,
11
+ end: LogLevels.INFO,
12
+ stdout: LogLevels.INFO,
13
+ stderr: LogLevels.WARN,
14
+ ...options
15
+ };
16
+ if (options.start) logger.run(instance.spawnargs.join(" "), {
17
+ level: options.start,
18
+ context: options.context
19
+ });
20
+ if (instance.stdout) {
21
+ const writable = new Writable();
22
+ writable.write = (chunk) => {
23
+ logger.log(options.stdout, chunk, { context: options.context });
24
+ return true;
25
+ };
26
+ instance.stdout.pipe(writable);
27
+ }
28
+ if (instance.stderr) {
29
+ const writable = new Writable();
30
+ writable.write = (chunk) => {
31
+ logger.log(options.stderr, chunk, { context: options.context });
32
+ return true;
33
+ };
34
+ instance.stderr.pipe(writable);
35
+ }
36
+ instance.on("exit", (code, signal) => {
37
+ const message = `Process ended with code ${code}${signal ? ` and signal ${signal}` : ""}.`;
38
+ logger.debug(message, { context: options.context });
39
+ if (options.end) logger.end(instance.spawnargs.join(" "), {
40
+ level: options.end,
41
+ context: options.context
42
+ });
43
+ if (options?.callback) options.callback();
44
+ });
45
+ instance.on("error", (error) => {
46
+ logger.fatal(error.message, { context: options.context });
47
+ logger.debug(error.stack, { context: options.context });
48
+ if (options?.callback) options.callback(error);
49
+ });
50
+ return instance;
51
+ }
52
+
53
+ //#endregion
54
+ export { pipeProcessToLogger };
@@ -0,0 +1,15 @@
1
+ import { ConfigModuleOptions } from "../config/config.interface.js";
2
+ import { Winston } from "./logger.interface.js";
3
+ import { OnModuleInit } from "@nestjs/common";
4
+
5
+ //#region src/lib/logger/winston.service.d.ts
6
+ declare class WinstonService implements OnModuleInit {
7
+ private readonly options;
8
+ instance: Winston;
9
+ constructor(options: ConfigModuleOptions);
10
+ onModuleInit(): void;
11
+ private initiateLogger;
12
+ private logColoring;
13
+ }
14
+ //#endregion
15
+ export { WinstonService };
@@ -0,0 +1,91 @@
1
+ import { TOKEN_CONFIG_MODULE_OPTIONS } from "../config/config.constants.js";
2
+ import { LogLevels } from "./logger.constants.js";
3
+ import { Inject, Injectable } from "@nestjs/common";
4
+ import { color, figures } from "listr2";
5
+ import { EOL } from "os";
6
+ import winston, { format, transports } from "winston";
7
+ import _decorateMetadata from "@oxc-project/runtime/helpers/decorateMetadata";
8
+ import _decorateParam from "@oxc-project/runtime/helpers/decorateParam";
9
+ import _decorate from "@oxc-project/runtime/helpers/decorate";
10
+
11
+ //#region src/lib/logger/winston.service.ts
12
+ let WinstonService = class WinstonService$1 {
13
+ constructor(options) {
14
+ this.options = options;
15
+ }
16
+ onModuleInit() {
17
+ this.instance = this.initiateLogger();
18
+ }
19
+ initiateLogger() {
20
+ const logFormat = format.printf((({ level, message, context, status }) => {
21
+ return message.split(EOL).filter((msg) => !msg || msg.trim() !== "").map((msg) => {
22
+ return this.logColoring({
23
+ level,
24
+ message: msg,
25
+ context,
26
+ status
27
+ });
28
+ }).join(EOL);
29
+ }));
30
+ const logger = winston.createLogger({
31
+ level: this.options.config.logLevel,
32
+ format: format.combine(format.splat(), format.json({ space: 2 }), format.prettyPrint(), logFormat),
33
+ levels: Object.fromEntries(Object.values(LogLevels).map((level, i) => {
34
+ return [level, i];
35
+ })),
36
+ silent: this.options.config.logLevel === LogLevels.SILENT || this.options.config.isJson,
37
+ transports: [new transports.Console({ stderrLevels: [LogLevels.FATAL, LogLevels.ERROR] })]
38
+ });
39
+ logger.log(LogLevels.TRACE, "Initiated new winston with level: %s", this.options.config.logLevel, { context: this.constructor.name });
40
+ return logger;
41
+ }
42
+ logColoring({ level, message, context, status }) {
43
+ let icon;
44
+ let coloring = (input) => {
45
+ return input;
46
+ };
47
+ let msgColoring = (input) => {
48
+ return input;
49
+ };
50
+ switch (level) {
51
+ case LogLevels.DIRECT: return message;
52
+ case LogLevels.FATAL:
53
+ coloring = color.red;
54
+ msgColoring = color.red;
55
+ break;
56
+ case LogLevels.ERROR:
57
+ coloring = color.red;
58
+ icon = figures.cross;
59
+ break;
60
+ case LogLevels.WARN:
61
+ coloring = color.yellow;
62
+ icon = figures.warning;
63
+ break;
64
+ case LogLevels.INFO:
65
+ coloring = color.green;
66
+ icon = figures.pointerSmall;
67
+ break;
68
+ case LogLevels.VERBOSE:
69
+ coloring = color.dim;
70
+ break;
71
+ case LogLevels.DEBUG:
72
+ coloring = color.cyan;
73
+ msgColoring = color.dim;
74
+ break;
75
+ case LogLevels.TRACE:
76
+ coloring = color.magenta;
77
+ msgColoring = color.dim;
78
+ break;
79
+ }
80
+ if (!icon) icon = `[${level.at(0).toUpperCase()}]`;
81
+ return `${coloring(icon)}${context ? " " + coloring(`[${context}]`) : ""}${status ? " " + coloring(`[${status}]`) : ""} ${msgColoring(message)}`;
82
+ }
83
+ };
84
+ WinstonService = _decorate([
85
+ Injectable(),
86
+ _decorateMetadata("design:paramtypes", [Object]),
87
+ _decorateParam(0, Inject(TOKEN_CONFIG_MODULE_OPTIONS))
88
+ ], WinstonService);
89
+
90
+ //#endregion
91
+ export { WinstonService };
@@ -0,0 +1,3 @@
1
+ import { TOKEN_LOGO_GENERATOR } from "./logo.constants.js";
2
+ import { LogoService } from "./logo.service.js";
3
+ import { LogoModule } from "./logo.module.js";
@@ -0,0 +1,6 @@
1
+ import { InjectionToken } from "@nestjs/common";
2
+
3
+ //#region src/lib/logo/logo.constants.d.ts
4
+ declare const TOKEN_LOGO_GENERATOR: InjectionToken;
5
+ //#endregion
6
+ export { TOKEN_LOGO_GENERATOR };
@@ -0,0 +1,5 @@
1
+ //#region src/lib/logo/logo.constants.ts
2
+ const TOKEN_LOGO_GENERATOR = Symbol("TOKEN_LOGO_GENERATOR");
3
+
4
+ //#endregion
5
+ export { TOKEN_LOGO_GENERATOR };