Asper Header  1.0.16
The header injector extension
Loading...
Searching...
No Matches
logger.ts
Go to the documentation of this file.
1
79import * as vscode from 'vscode';
80import { CodeConfig } from "./processConfiguration";
81import { moduleName } from '../constants';
82
116
144 getCorrectPrefix(info: boolean, warning: boolean, error: boolean, debug: boolean): string {
145 if (info) {
146 return "INFO: ";
147 } else if (warning) {
148 return "WARNING: ";
149 } else if (error) {
150 return "ERROR: ";
151 } else if (debug) {
152 return "DEBUG: ";
153 } else {
154 return "";
155 }
156 }
157
185 getDatetime(): string {
186 let date: Date = new Date();
187 let finalString: string = "[";
188 finalString += date.getDate() + "-";
189 finalString += (date.getMonth() + 1) + "-";
190 finalString += date.getFullYear() + " ";
191 finalString += date.getHours() + ":";
192 finalString += date.getMinutes() + ":";
193 finalString += date.getSeconds() + ".";
194 finalString += date.getMilliseconds();
195 finalString += "]";
196 return finalString;
197 }
198
234 getParentCaller(searchDepth: number = 2): string | undefined {
235 const stack = new Error().stack;
236 if (!stack) {
237 return undefined;
238 }
239
240 const lines = stack.split("\n").map(line => line.trim());
241
242 // Ensure the requested search depth exists in the stack
243 if (lines.length > searchDepth) {
244 const match = lines[searchDepth].match(/at (\w+)/);
245 if (match) {
246 return match[1];
247 }
248 }
249
250 return undefined;
251 }
252
276 debugEnabled(): boolean {
277 return CodeConfig.get("enableDebug");
278 }
279
311 checkIfExtensionInstalled(context: vscode.ExtensionContext | undefined): boolean {
312 if (context === undefined) {
313 return process.env.VSCODE_DEBUG_MODE?.toLocaleLowerCase() === 'true';
314 }
315 if (context.extensionMode === vscode.ExtensionMode.Development) {
316 console.log("Running in debug/development mode");
317 return false;
318 } else if (context.extensionMode === vscode.ExtensionMode.Test) {
319 console.log("Running in test mode");
320 return false;
321 } else {
322 console.log("Running in production (installed) mode");
323 return true;
324 }
325 }
326
327 packageForUnsafe(message: string, info: boolean, warning: boolean, error: boolean, debug: boolean): string {
328 const datetime: string = this.getDatetime();
329 const correctPrefix: string = this.getCorrectPrefix(info, warning, error, debug);
330 return `${datetime} ${moduleName}:initialising ${correctPrefix} '${message}'`;
331 }
332}
333
373class Gui {
375 private LI: LoggerInternals;
376 private fullyLoaded: boolean = false;
377
386 constructor(loggerInternals: LoggerInternals, fullyLoaded: boolean = false) {
387 this.LI = loggerInternals;
388 this.fullyLoaded = fullyLoaded;
389 }
390
409 updateLoadStatus(fullyLoaded: boolean = true): void {
410 this.fullyLoaded = fullyLoaded;
411 }
422 info<T extends string>(message: string, ...items: T[]): Thenable<T | undefined> {
423 if (!this.fullyLoaded) {
424 console.log(this.LI.packageForUnsafe(message, true, false, false, false));
425 return Promise.resolve(undefined);
426 }
427 let final: string = "";
428 final += CodeConfig.get("extensionName") + " ";
429 final += this.LI.getCorrectPrefix(true, false, false, false);
430 final += " '" + message + "'";
431 return vscode.window.showInformationMessage<T>(message, ...items);
432 }
433
444 warning<T extends string>(message: string, ...items: T[]): Thenable<T | undefined> {
445 if (!this.fullyLoaded) {
446 console.warn(this.LI.packageForUnsafe(message, false, true, false, false));
447 return Promise.resolve(undefined);
448 }
449 let final: string = "";
450 final += this.LI.getDatetime() + " ";
451 final += CodeConfig.get("extensionName") + " ";
452 final += this.LI.getCorrectPrefix(false, true, false, false);
453 final += " '" + message + "'";
454 return vscode.window.showWarningMessage<T>(message, ...items);
455 }
456
467 error<T extends string>(message: string, ...items: T[]): Thenable<T | undefined> {
468 if (!this.fullyLoaded) {
469 console.error(this.LI.packageForUnsafe(message, false, false, true, false));
470 return Promise.resolve(undefined);
471 }
472 let final: string = "";
473 final += this.LI.getDatetime() + " ";
474 final += CodeConfig.get("extensionName") + " ";
475 final += this.LI.getCorrectPrefix(false, false, true, false);
476 final += " '" + message + "'";
477 return vscode.window.showErrorMessage<T>(message, ...items);
478 }
479
491 debug<T extends string>(message: string, ...items: T[]): Thenable<T | undefined> {
492 if (!this.fullyLoaded) {
493 return Promise.resolve(undefined);
494 }
495 if (!this.LI.debugEnabled()) {
496 console.log(this.LI.packageForUnsafe(message, false, false, false, true));
497 return Promise.resolve(undefined);
498 }
499 let final: string = "";
500 final += this.LI.getDatetime() + " ";
501 final += CodeConfig.get("extensionName") + " ";
502 final += this.LI.getCorrectPrefix(false, false, false, true);
503 final += " '" + message + "'";
504 return vscode.window.showInformationMessage<T>(final, ...items);
505 }
506}
507
555class Log {
557 private depthSearch: number = 3;
559 private LI: LoggerInternals = new LoggerInternals();
561 public Gui: Gui = new Gui(this.LI);
563 private extensionInstalled: boolean = false;
565 private fullyLoaded: boolean = false;
567 private output: vscode.OutputChannel | undefined = undefined;
568
588 constructor(context: vscode.ExtensionContext | undefined = undefined, fullyLoaded: boolean = false) {
589 this.extensionInstalled = this.LI.checkIfExtensionInstalled(context);
590 this.updateInitialisationStatus(fullyLoaded);
591 }
592
622 updateInitialisationStatus(extensionLoaded: boolean = true): void {
623 if (extensionLoaded) {
624 this.fullyLoaded = extensionLoaded;
625 this.Gui.updateLoadStatus(this.fullyLoaded);
626 this.output = vscode.window.createOutputChannel(CodeConfig.get("moduleName"));
627 if (!this.extensionInstalled) {
628 this.output.show();
629 }
630 } else {
631 this.fullyLoaded = false;
632 this.Gui.updateLoadStatus(this.fullyLoaded);
633 if (this.output) {
634 this.output.dispose();
635 this.output = undefined;
636 }
637 }
638 }
639
661 updateInstallationState(context: vscode.ExtensionContext | undefined) {
662 this.info(`In updateInstallationState`);
663 this.extensionInstalled = this.LI.checkIfExtensionInstalled(context);
664 this.info(`extensionInstalled = ${this.extensionInstalled}`);
665 this.info("Out of updateInstallationState");
666 }
694 info(message: string, searchDepth: number | undefined = undefined) {
695 if (!this.output) {
696 console.log(this.LI.packageForUnsafe(message, true, false, false, false));
697 return;
698 }
699 let final: string = "";
700 final += this.LI.getDatetime() + " ";
701 final += CodeConfig.get("extensionName") + " ";
702 final += this.LI.getCorrectPrefix(true, false, false, false);
703 final += " <" + this.LI.getParentCaller(searchDepth || this.depthSearch) + ">";
704 final += " '" + message + "'";
705 this.output.appendLine(final);
706 if (!this.extensionInstalled) {
707 console.log(final);
708 }
709 }
710
740 warning(message: string, searchDepth: number | undefined = undefined) {
741 if (!this.output) {
742 console.warn(this.LI.packageForUnsafe(message, false, true, false, false));
743 return;
744 }
745 let final: string = "";
746 final += this.LI.getDatetime() + " ";
747 final += CodeConfig.get("extensionName") + " ";
748 final += this.LI.getCorrectPrefix(false, true, false, false);
749 final += " <" + this.LI.getParentCaller(searchDepth || this.depthSearch) + ">";
750 final += " '" + message + "'";
751 this.output.appendLine(final);
752 if (!this.extensionInstalled) {
753 console.warn(final);
754 }
755 }
756
792 error(message: string, searchDepth: number | undefined = undefined) {
793 if (!this.output) {
794 console.error(this.LI.packageForUnsafe(message, false, false, true, false));
795 return;
796 }
797 let final: string = "";
798 final += this.LI.getDatetime() + " ";
799 final += CodeConfig.get("extensionName") + " ";
800 final += this.LI.getCorrectPrefix(false, false, true, false);
801 final += " <" + this.LI.getParentCaller(searchDepth || this.depthSearch) + ">";
802 final += " '" + message + "'";
803 this.output.appendLine(final);
804 if (!this.extensionInstalled) {
805 console.error(final);
806 }
807 }
808
848 debug(message: string, searchDepth: number | undefined = undefined) {
849 if (this.LI.debugEnabled() === false) {
850 return;
851 }
852 if (!this.output) {
853 console.log(this.LI.packageForUnsafe(message, false, false, false, true));
854 return;
855 }
856 let final: string = "";
857 final += this.LI.getDatetime() + " ";
858 final += CodeConfig.get("extensionName") + " ";
859 final += this.LI.getCorrectPrefix(false, false, false, true);
860 final += " <" + this.LI.getParentCaller(searchDepth || this.depthSearch) + ">";
861 final += " '" + message + "'";
862 this.output.appendLine(final);
863 if (!this.extensionInstalled) {
864 console.debug(final);
865 }
866 }
867}
868
870const instance = new Log();
871
910export const logger: Log = instance;
911
940export type LogType = Log;
User-facing notification system for VS Code extension GUI integration.
Definition logger.ts:373
constructor(loggerInternals:LoggerInternals, fullyLoaded:boolean=false)
Constructor for Gui logging class.
Definition logger.ts:386
Primary logging controller with dual-channel output and caller identification.
Definition logger.ts:555
info(message:string, searchDepth:number|undefined=undefined)
Logs informational messages with automatic caller identification.
Definition logger.ts:694
constructor(context:vscode.ExtensionContext|undefined=undefined, fullyLoaded:boolean=false)
Initializes the logging system with environment detection and auto-display.
Definition logger.ts:588
debug(message:string, searchDepth:number|undefined=undefined)
Generates detailed debugging information when debug mode is enabled.
Definition logger.ts:848
error(message:string, searchDepth:number|undefined=undefined)
Records critical errors requiring immediate attention or investigation.
Definition logger.ts:792
updateInitialisationStatus(extensionLoaded:boolean=true)
Updates the initialization status and manages output channel lifecycle.
Definition logger.ts:622
warning(message:string, searchDepth:number|undefined=undefined)
Records warning conditions requiring attention but not blocking execution.
Definition logger.ts:740
Core utility infrastructure for logging operations and formatting.
Definition logger.ts:109
constructor()
Constructor for LoggerInternals.
Definition logger.ts:115
export const moduleName
Module identifier used in package.json and extension marketplace.
Definition constants.ts:59
iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAAG0OVFdAAAAv3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBbEsMgCPznFD2CAho5jknTmd6gx qtNJMEqCKH4h lRj6dADxVZugptTqwzYer65UeIe5DWUctXFzIXEu5EdIHqrWYry UL6xZmlG7UnJa57b oHlEkAAAGEaUNDUElDQyBwcm9maWxlAAB4nH2RPUjDUBSFT1OlKhWHFhFxyFA72UVFHGsVilAh1AqtOpi89A aNCQpLo6Ca8HBn8Wqg4uzrg6ugiD4A IuOCm6SIn3JYUWsT64vI z3jncdx8gNCpMs3rigKbbZjqZELO5VTHwin4MU4UQlZllzElSCl3X1z18fL L8azu9 Ma56LLAM8NmJj1PHCYWix2sdDArmRrxNHFE1XTKF7Ieq5y3OGuVGmv1yV8YzOsry1ynGkMSi1iCBBEKaiijAhsx2nVSLKTpPNHFP r6JXIp5CqDkWMBVWiQXT yerVWYmvSSggmg98VxPsaBwC7QrDvO97HjNE8A zNwpbf91QYw KqFQAN7P6JtyQOgWGFjz5tY6x kDkKFZpW6Ag0MgWqTs9S7v7uuc2793WvP7AZKlcrMQx gGAAANcmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDowOWQ3ODk3OS03YjNiLTRhMTgtODM5ZS1lMDgwOGNjMmUzY2EiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTM2YWE3YmMtN2QzZS00ZDJkLWIxMjItYTFhZjQwMjkzYjI5IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6OTc2ZWEzNTgtNTNlNy00ODZkLWIzMzQtMjhmZWY1N2IyZWIzIgogICBHSU1QOkFQST0iMy4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE3NTg1MzI3OTM2NzA4NzIiCiAgIEdJTVA6VmVyc2lvbj0iMy4wLjQiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjU6MDk6MjJUMTE6MTk6NTArMDI6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI1OjA5OjIyVDExOjE5OjUwKzAyOjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZGE1MDJhZWEtNDM0MS00NjdjLTgwMzEtYjUwMmU2OGFhYjkwIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHSU1QIDMuMC40IChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjUtMDktMjJUMTE6MTk6NTMrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8 QZaInQAAAAZiS0dEAAAAAAAA UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB kJFgkTNb1wNOYAABokSURBVHja7V15dFRF1r9V7 WW7mwsAZJ0SJpElARhUBM0gKNwjsM2gIMw oF Ss4MHy5DmBEB56g4Is6ZIQGRJYownzIalCUzLnj0Cx7GBZhAWISIMGaTYIBgku5Od7 t7vdH8pruTifpzkaAd8 pk8573fWqbv3q3lu3bt1HEPEkAAyAThLf8uNBna2AQhfJW4EkSV2rgOd5SEpKavWF yv QjEZjq58rigLJyclAqfdZZMaMGbX5 fmDAQAIItb2jbnQWVK70KUK8Kp2IWAuYOcrSEpKAkJIwG0GQ5OtXekCBUDabss6qIABEAaEEKitrXVnZ2eLwaSy3w uPI2CLCtAgAMAgLFjx oqKyt59b7a3VZMbJYDzXJBp NAUZoFSWVlJa sKCgoK6NLgSXBSdOnGhseQAiImRnZ0u T21TFiAqmJgYj3PmzHF4ryiK7PuNDipAHDhwICIirly58kJ1daUz8L4XylarFX744YdW45CcnNzcmSvyAMrLy vqXOiKPBgEV4koXGXqmw0YOnQoDB06NKQK9u3bdz6YWdPpBqhGRWjoZsBQBkIxQBD12hA0y1vVBiOEgCIrYVmLXWxAs7z2teE4noPt27fbw7Gyg89PijA02RpETalWZ7N42rJlCzDlSl8kSYKpU6fqAAAEQYCHHnzIuWv3Lsvx48drb7311sGt6vO1zhARGWNotVrRarUiYwzbJwWLiz rSUyMR0QFRVFEH6mNR44caXK73aLH45EREQsKCjy JTMzEyPeiclJQVGjhwZYTQadZRSTpIkGDx4sCAIgtguB1TV0pZ6aY8DiIhlZWVNKjMREQVBUH7 ziBhdaEVB8KtINzva8qo29cH3dEAvKGHQGtA322AIivQG hs1QDGGAwdOhQoR0OSclarFbKysuq7zyZk4dmEiAoQgu16tXoNA1fHKPUrV5kDhBCQJAkYY73VABZQAEpKShyKokB fr49JPM80ESSJRmtVqufW7A9kywhYQhmZd3xk2qSqYYtImJCQkKHNdC2etbsEWABrljFb UkCBLwvB4I4bzM3L17d OpU6caEBFmzZrlfuaZZ wqOIOBlA JiCQnJLkddu0tS7Ytm2brCgKL8uy99Y777xD33vvvUhCCJyvOS lpqUq fv MREBE3btzoREQ8ePCgK3Ct0U4DWEgLE98GFBYWlvvenTRpknP8 PGNKp6C1dnFBiAmJibi7bff lPg9dTUVCmwjtWrVzcsW7bM3o3rAn9yu91gMplAkRU4 e1pXpZl0Ol03vsVFRVcQUGBpV05QCgJw RmV1bIwKCkpMSh1sHxnPfhJ0 etCMiBD682yXhkiVLdOqqWd0tYYzBiBEjotrqTLfoggiTBQAoHD582Hju3Dk3YzJyHIGH uvXrltuucXruAjJKmaMQXJyMlRVVYVsDwRzdQc2dO3atbWzZs1q5R g21KrgQBqiziO83 U16fK Bgc7OFtrgsCvdo9uTjVFiZaA7QGXPX9ght BDQGaAzQGKAx4GpSyEuSr7 Kysru7xDodK ffvOP LII GEEBgyZEj9oUOHYvsUAhDR6zP0vdZ1BjQvWhjKgKgA5Tg PyMi6ZR5r8mAnpIBPcZ7NegSA pSuSFfxTtzTffbLbZbKb09HRp0aJF5mPHjkWkp6db3n777foZM2Y4rxIDWBil60j45JNP6jdv3txYVVVVDwCg1 th vz5sRcvXoTDhw b6 rq3L0kAxjwPA83DU8FURSDOmWuqAraLq8REbZt2ybzvA4o5QGZKvlbj8mAAQN0c fONZ49e9Yv5Pf2228X586d22 hfqX3ieB47j DYcgu3tuN1uZenSpdx export const string
Definition constants.ts:258
import type
import *as vscode from vscode
Definition logger.ts:79
export const logger
Singleton logger instance providing unified logging interface for the entire extension.
Definition logger.ts:910
export type LogType
Type alias for Log class enabling dependency injection and testing.
Definition logger.ts:940
const instance
Singleton logger instance for application-wide use.
Definition logger.ts:870
export const CodeConfig
Exported configuration singleton for extension-wide access @export Primary configuration interface us...