@democratize-quality/qualitylens-core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/config.d.mts +26 -0
- package/dist/core/config.d.ts +26 -0
- package/dist/core/config.js +139 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/config.mjs +104 -0
- package/dist/core/config.mjs.map +1 -0
- package/dist/core/detector.d.mts +43 -0
- package/dist/core/detector.d.ts +43 -0
- package/dist/core/detector.js +431 -0
- package/dist/core/detector.js.map +1 -0
- package/dist/core/detector.mjs +395 -0
- package/dist/core/detector.mjs.map +1 -0
- package/dist/core/engine.d.mts +29 -0
- package/dist/core/engine.d.ts +29 -0
- package/dist/core/engine.js +151 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/engine.mjs +126 -0
- package/dist/core/engine.mjs.map +1 -0
- package/dist/core/types.d.mts +109 -0
- package/dist/core/types.d.ts +109 -0
- package/dist/core/types.js +19 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/types.mjs +1 -0
- package/dist/core/types.mjs.map +1 -0
- package/dist/matchers/area.matcher.d.mts +38 -0
- package/dist/matchers/area.matcher.d.ts +38 -0
- package/dist/matchers/area.matcher.js +102 -0
- package/dist/matchers/area.matcher.js.map +1 -0
- package/dist/matchers/area.matcher.mjs +77 -0
- package/dist/matchers/area.matcher.mjs.map +1 -0
- package/dist/matchers/fuzzy.matcher.d.mts +83 -0
- package/dist/matchers/fuzzy.matcher.d.ts +83 -0
- package/dist/matchers/fuzzy.matcher.js +161 -0
- package/dist/matchers/fuzzy.matcher.js.map +1 -0
- package/dist/matchers/fuzzy.matcher.mjs +136 -0
- package/dist/matchers/fuzzy.matcher.mjs.map +1 -0
- package/dist/reporters/base.reporter.d.mts +19 -0
- package/dist/reporters/base.reporter.d.ts +19 -0
- package/dist/reporters/base.reporter.js +32 -0
- package/dist/reporters/base.reporter.js.map +1 -0
- package/dist/reporters/base.reporter.mjs +7 -0
- package/dist/reporters/base.reporter.mjs.map +1 -0
- package/dist/reporters/console.reporter.d.mts +16 -0
- package/dist/reporters/console.reporter.d.ts +16 -0
- package/dist/reporters/console.reporter.js +130 -0
- package/dist/reporters/console.reporter.js.map +1 -0
- package/dist/reporters/console.reporter.mjs +95 -0
- package/dist/reporters/console.reporter.mjs.map +1 -0
- package/dist/sources/base.source.d.mts +22 -0
- package/dist/sources/base.source.d.ts +22 -0
- package/dist/sources/base.source.js +130 -0
- package/dist/sources/base.source.js.map +1 -0
- package/dist/sources/base.source.mjs +93 -0
- package/dist/sources/base.source.mjs.map +1 -0
- package/dist/sources/playwright.source.d.mts +34 -0
- package/dist/sources/playwright.source.d.ts +34 -0
- package/dist/sources/playwright.source.js +209 -0
- package/dist/sources/playwright.source.js.map +1 -0
- package/dist/sources/playwright.source.mjs +172 -0
- package/dist/sources/playwright.source.mjs.map +1 -0
- package/dist/sources/routes.source.d.mts +58 -0
- package/dist/sources/routes.source.d.ts +58 -0
- package/dist/sources/routes.source.js +288 -0
- package/dist/sources/routes.source.js.map +1 -0
- package/dist/sources/routes.source.mjs +251 -0
- package/dist/sources/routes.source.mjs.map +1 -0
- package/dist/sources/yaml.source.d.mts +16 -0
- package/dist/sources/yaml.source.d.ts +16 -0
- package/dist/sources/yaml.source.js +160 -0
- package/dist/sources/yaml.source.js.map +1 -0
- package/dist/sources/yaml.source.mjs +123 -0
- package/dist/sources/yaml.source.mjs.map +1 -0
- package/dist/utils/http.d.mts +7 -0
- package/dist/utils/http.d.ts +7 -0
- package/dist/utils/http.js +37 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/http.mjs +12 -0
- package/dist/utils/http.mjs.map +1 -0
- package/dist/utils/logger.d.mts +35 -0
- package/dist/utils/logger.d.ts +35 -0
- package/dist/utils/logger.js +114 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/logger.mjs +79 -0
- package/dist/utils/logger.mjs.map +1 -0
- package/package.json +115 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// src/utils/logger.ts
|
|
2
|
+
import * as fs from "fs";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
var Logger = class {
|
|
5
|
+
logPath = null;
|
|
6
|
+
fd = null;
|
|
7
|
+
/**
|
|
8
|
+
* Open (or create) qualitylens.log in the given directory.
|
|
9
|
+
* Appends to an existing log so multiple runs accumulate history.
|
|
10
|
+
* Call once at the start of each command.
|
|
11
|
+
*/
|
|
12
|
+
configure(outputDir) {
|
|
13
|
+
try {
|
|
14
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
15
|
+
this.logPath = path.join(outputDir, "qualitylens.log");
|
|
16
|
+
this.fd = fs.openSync(this.logPath, "a");
|
|
17
|
+
this.write("INFO", `--- qualitylens session started (pid ${process.pid}) ---`);
|
|
18
|
+
} catch {
|
|
19
|
+
this.logPath = null;
|
|
20
|
+
this.fd = null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Path to the current log file, or null if not configured. */
|
|
24
|
+
get filePath() {
|
|
25
|
+
return this.logPath;
|
|
26
|
+
}
|
|
27
|
+
info(msg, detail) {
|
|
28
|
+
this.write("INFO", msg, detail);
|
|
29
|
+
}
|
|
30
|
+
warn(msg, detail) {
|
|
31
|
+
this.write("WARN", msg, detail);
|
|
32
|
+
}
|
|
33
|
+
/** Logs full detail (stack trace, raw error) to file only. */
|
|
34
|
+
error(msg, detail) {
|
|
35
|
+
this.write("ERROR", msg, detail);
|
|
36
|
+
}
|
|
37
|
+
debug(msg, detail) {
|
|
38
|
+
this.write("DEBUG", msg, detail);
|
|
39
|
+
}
|
|
40
|
+
close() {
|
|
41
|
+
if (this.fd !== null) {
|
|
42
|
+
try {
|
|
43
|
+
fs.closeSync(this.fd);
|
|
44
|
+
} catch {
|
|
45
|
+
}
|
|
46
|
+
this.fd = null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
write(level, msg, detail) {
|
|
50
|
+
if (this.fd === null) return;
|
|
51
|
+
const ts = (/* @__PURE__ */ new Date()).toISOString();
|
|
52
|
+
let line = `[${ts}] ${level.padEnd(5)} ${msg}`;
|
|
53
|
+
if (detail !== void 0) {
|
|
54
|
+
if (detail instanceof Error) {
|
|
55
|
+
line += `
|
|
56
|
+
${detail.message}`;
|
|
57
|
+
if (detail.stack) {
|
|
58
|
+
line += "\n" + detail.stack.split("\n").map((l) => " " + l).join("\n");
|
|
59
|
+
}
|
|
60
|
+
} else if (typeof detail === "string" && detail.trim()) {
|
|
61
|
+
line += "\n" + detail.split("\n").map((l) => " " + l).join("\n");
|
|
62
|
+
} else if (typeof detail === "object") {
|
|
63
|
+
try {
|
|
64
|
+
line += "\n " + JSON.stringify(detail, null, 2).replace(/\n/g, "\n ");
|
|
65
|
+
} catch {
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
fs.writeSync(this.fd, line + "\n");
|
|
71
|
+
} catch {
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
var logger = new Logger();
|
|
76
|
+
export {
|
|
77
|
+
logger
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=logger.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/logger.ts"],"sourcesContent":["/**\n * src/utils/logger.ts\n *\n * Module-level singleton logger.\n * - Always writes to a log file (qualitylens.log) with timestamps and full detail.\n * - Console output is handled separately by each command — the logger only writes the file.\n *\n * Usage:\n * import { logger } from './utils/logger'\n * logger.configure('./reports') // call once at startup\n * logger.info('scan started', { config: opts.config })\n * logger.error('route discovery failed', err)\n */\n\nimport * as fs from 'fs'\nimport * as path from 'path'\n\ntype LogLevel = 'INFO' | 'WARN' | 'ERROR' | 'DEBUG'\n\nclass Logger {\n private logPath: string | null = null\n private fd: number | null = null\n\n /**\n * Open (or create) qualitylens.log in the given directory.\n * Appends to an existing log so multiple runs accumulate history.\n * Call once at the start of each command.\n */\n configure(outputDir: string): void {\n try {\n fs.mkdirSync(outputDir, { recursive: true })\n this.logPath = path.join(outputDir, 'qualitylens.log')\n this.fd = fs.openSync(this.logPath, 'a')\n this.write('INFO', `--- qualitylens session started (pid ${process.pid}) ---`)\n } catch {\n // If we can't open a log file, continue silently — logging is non-blocking\n this.logPath = null\n this.fd = null\n }\n }\n\n /** Path to the current log file, or null if not configured. */\n get filePath(): string | null {\n return this.logPath\n }\n\n info(msg: string, detail?: unknown): void {\n this.write('INFO', msg, detail)\n }\n\n warn(msg: string, detail?: unknown): void {\n this.write('WARN', msg, detail)\n }\n\n /** Logs full detail (stack trace, raw error) to file only. */\n error(msg: string, detail?: unknown): void {\n this.write('ERROR', msg, detail)\n }\n\n debug(msg: string, detail?: unknown): void {\n this.write('DEBUG', msg, detail)\n }\n\n close(): void {\n if (this.fd !== null) {\n try { fs.closeSync(this.fd) } catch { /* ignore */ }\n this.fd = null\n }\n }\n\n private write(level: LogLevel, msg: string, detail?: unknown): void {\n if (this.fd === null) return\n\n const ts = new Date().toISOString()\n let line = `[${ts}] ${level.padEnd(5)} ${msg}`\n\n if (detail !== undefined) {\n if (detail instanceof Error) {\n line += `\\n ${detail.message}`\n if (detail.stack) {\n line += '\\n' + detail.stack.split('\\n').map(l => ' ' + l).join('\\n')\n }\n } else if (typeof detail === 'string' && detail.trim()) {\n line += '\\n' + detail.split('\\n').map(l => ' ' + l).join('\\n')\n } else if (typeof detail === 'object') {\n try {\n line += '\\n ' + JSON.stringify(detail, null, 2).replace(/\\n/g, '\\n ')\n } catch { /* circular ref or similar — skip */ }\n }\n }\n\n try {\n fs.writeSync(this.fd, line + '\\n')\n } catch { /* disk full or fd closed — ignore */ }\n }\n}\n\nexport const logger = new Logger()\n"],"mappings":";AAcA,YAAY,QAAQ;AACpB,YAAY,UAAU;AAItB,IAAM,SAAN,MAAa;AAAA,EACH,UAAyB;AAAA,EACzB,KAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO5B,UAAU,WAAyB;AACjC,QAAI;AACF,MAAG,aAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAC3C,WAAK,UAAe,UAAK,WAAW,iBAAiB;AACrD,WAAK,KAAQ,YAAS,KAAK,SAAS,GAAG;AACvC,WAAK,MAAM,QAAQ,wCAAwC,QAAQ,GAAG,OAAO;AAAA,IAC/E,QAAQ;AAEN,WAAK,UAAU;AACf,WAAK,KAAK;AAAA,IACZ;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,WAA0B;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,KAAK,KAAa,QAAwB;AACxC,SAAK,MAAM,QAAQ,KAAK,MAAM;AAAA,EAChC;AAAA,EAEA,KAAK,KAAa,QAAwB;AACxC,SAAK,MAAM,QAAQ,KAAK,MAAM;AAAA,EAChC;AAAA;AAAA,EAGA,MAAM,KAAa,QAAwB;AACzC,SAAK,MAAM,SAAS,KAAK,MAAM;AAAA,EACjC;AAAA,EAEA,MAAM,KAAa,QAAwB;AACzC,SAAK,MAAM,SAAS,KAAK,MAAM;AAAA,EACjC;AAAA,EAEA,QAAc;AACZ,QAAI,KAAK,OAAO,MAAM;AACpB,UAAI;AAAE,QAAG,aAAU,KAAK,EAAE;AAAA,MAAE,QAAQ;AAAA,MAAe;AACnD,WAAK,KAAK;AAAA,IACZ;AAAA,EACF;AAAA,EAEQ,MAAM,OAAiB,KAAa,QAAwB;AAClE,QAAI,KAAK,OAAO,KAAM;AAEtB,UAAM,MAAK,oBAAI,KAAK,GAAE,YAAY;AAClC,QAAI,OAAO,IAAI,EAAE,KAAK,MAAM,OAAO,CAAC,CAAC,IAAI,GAAG;AAE5C,QAAI,WAAW,QAAW;AACxB,UAAI,kBAAkB,OAAO;AAC3B,gBAAQ;AAAA,IAAO,OAAO,OAAO;AAC7B,YAAI,OAAO,OAAO;AAChB,kBAAQ,OAAO,OAAO,MAAM,MAAM,IAAI,EAAE,IAAI,OAAK,OAAO,CAAC,EAAE,KAAK,IAAI;AAAA,QACtE;AAAA,MACF,WAAW,OAAO,WAAW,YAAY,OAAO,KAAK,GAAG;AACtD,gBAAQ,OAAO,OAAO,MAAM,IAAI,EAAE,IAAI,OAAK,OAAO,CAAC,EAAE,KAAK,IAAI;AAAA,MAChE,WAAW,OAAO,WAAW,UAAU;AACrC,YAAI;AACF,kBAAQ,SAAS,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,QAAQ,OAAO,MAAM;AAAA,QACxE,QAAQ;AAAA,QAAuC;AAAA,MACjD;AAAA,IACF;AAEA,QAAI;AACF,MAAG,aAAU,KAAK,IAAI,OAAO,IAAI;AAAA,IACnC,QAAQ;AAAA,IAAwC;AAAA,EAClD;AACF;AAEO,IAAM,SAAS,IAAI,OAAO;","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@democratize-quality/qualitylens-core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Core library for qualitylens — engine, types, sources, matchers, reporters",
|
|
5
|
+
"author": "Raj Uppadhyay",
|
|
6
|
+
"license": "AGPL-3.0-only",
|
|
7
|
+
"main": "./dist/core/types.js",
|
|
8
|
+
"module": "./dist/core/types.mjs",
|
|
9
|
+
"types": "./dist/core/types.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
"./core/types": {
|
|
12
|
+
"types": "./dist/core/types.d.ts",
|
|
13
|
+
"import": "./dist/core/types.mjs",
|
|
14
|
+
"require": "./dist/core/types.js"
|
|
15
|
+
},
|
|
16
|
+
"./core/engine": {
|
|
17
|
+
"types": "./dist/core/engine.d.ts",
|
|
18
|
+
"import": "./dist/core/engine.mjs",
|
|
19
|
+
"require": "./dist/core/engine.js"
|
|
20
|
+
},
|
|
21
|
+
"./core/config": {
|
|
22
|
+
"types": "./dist/core/config.d.ts",
|
|
23
|
+
"import": "./dist/core/config.mjs",
|
|
24
|
+
"require": "./dist/core/config.js"
|
|
25
|
+
},
|
|
26
|
+
"./core/detector": {
|
|
27
|
+
"types": "./dist/core/detector.d.ts",
|
|
28
|
+
"import": "./dist/core/detector.mjs",
|
|
29
|
+
"require": "./dist/core/detector.js"
|
|
30
|
+
},
|
|
31
|
+
"./sources/base.source": {
|
|
32
|
+
"types": "./dist/sources/base.source.d.ts",
|
|
33
|
+
"import": "./dist/sources/base.source.mjs",
|
|
34
|
+
"require": "./dist/sources/base.source.js"
|
|
35
|
+
},
|
|
36
|
+
"./sources/playwright.source": {
|
|
37
|
+
"types": "./dist/sources/playwright.source.d.ts",
|
|
38
|
+
"import": "./dist/sources/playwright.source.mjs",
|
|
39
|
+
"require": "./dist/sources/playwright.source.js"
|
|
40
|
+
},
|
|
41
|
+
"./sources/yaml.source": {
|
|
42
|
+
"types": "./dist/sources/yaml.source.d.ts",
|
|
43
|
+
"import": "./dist/sources/yaml.source.mjs",
|
|
44
|
+
"require": "./dist/sources/yaml.source.js"
|
|
45
|
+
},
|
|
46
|
+
"./sources/routes.source": {
|
|
47
|
+
"types": "./dist/sources/routes.source.d.ts",
|
|
48
|
+
"import": "./dist/sources/routes.source.mjs",
|
|
49
|
+
"require": "./dist/sources/routes.source.js"
|
|
50
|
+
},
|
|
51
|
+
"./matchers/fuzzy.matcher": {
|
|
52
|
+
"types": "./dist/matchers/fuzzy.matcher.d.ts",
|
|
53
|
+
"import": "./dist/matchers/fuzzy.matcher.mjs",
|
|
54
|
+
"require": "./dist/matchers/fuzzy.matcher.js"
|
|
55
|
+
},
|
|
56
|
+
"./matchers/area.matcher": {
|
|
57
|
+
"types": "./dist/matchers/area.matcher.d.ts",
|
|
58
|
+
"import": "./dist/matchers/area.matcher.mjs",
|
|
59
|
+
"require": "./dist/matchers/area.matcher.js"
|
|
60
|
+
},
|
|
61
|
+
"./reporters/base.reporter": {
|
|
62
|
+
"types": "./dist/reporters/base.reporter.d.ts",
|
|
63
|
+
"import": "./dist/reporters/base.reporter.mjs",
|
|
64
|
+
"require": "./dist/reporters/base.reporter.js"
|
|
65
|
+
},
|
|
66
|
+
"./reporters/console.reporter": {
|
|
67
|
+
"types": "./dist/reporters/console.reporter.d.ts",
|
|
68
|
+
"import": "./dist/reporters/console.reporter.mjs",
|
|
69
|
+
"require": "./dist/reporters/console.reporter.js"
|
|
70
|
+
},
|
|
71
|
+
"./utils/logger": {
|
|
72
|
+
"types": "./dist/utils/logger.d.ts",
|
|
73
|
+
"import": "./dist/utils/logger.mjs",
|
|
74
|
+
"require": "./dist/utils/logger.js"
|
|
75
|
+
},
|
|
76
|
+
"./utils/http": {
|
|
77
|
+
"types": "./dist/utils/http.d.ts",
|
|
78
|
+
"import": "./dist/utils/http.mjs",
|
|
79
|
+
"require": "./dist/utils/http.js"
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"files": [
|
|
83
|
+
"dist"
|
|
84
|
+
],
|
|
85
|
+
"scripts": {
|
|
86
|
+
"build": "tsup",
|
|
87
|
+
"dev": "tsup --watch",
|
|
88
|
+
"lint": "tsc --noEmit"
|
|
89
|
+
},
|
|
90
|
+
"keywords": [
|
|
91
|
+
"testing",
|
|
92
|
+
"playwright",
|
|
93
|
+
"qa",
|
|
94
|
+
"coverage"
|
|
95
|
+
],
|
|
96
|
+
"dependencies": {
|
|
97
|
+
"@typescript-eslint/parser": "^8.57.2",
|
|
98
|
+
"chalk": "^5.3.0",
|
|
99
|
+
"fast-glob": "^3.3.2",
|
|
100
|
+
"js-yaml": "^4.1.0"
|
|
101
|
+
},
|
|
102
|
+
"devDependencies": {
|
|
103
|
+
"@types/js-yaml": "^4.0.9",
|
|
104
|
+
"@types/node": "^20.0.0",
|
|
105
|
+
"tsup": "^8.0.0",
|
|
106
|
+
"typescript": "^5.4.0"
|
|
107
|
+
},
|
|
108
|
+
"engines": {
|
|
109
|
+
"node": ">=20.0.0"
|
|
110
|
+
},
|
|
111
|
+
"publishConfig": {
|
|
112
|
+
"registry": "https://registry.npmjs.org",
|
|
113
|
+
"access": "public"
|
|
114
|
+
}
|
|
115
|
+
}
|