Merge branch 'refactor/remove-any'

# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
This commit is contained in:
jackwener committed 2026-03-20 10:56:46 +08:00
commit 39b6413e47
4 files changed
+28 -23

No files matched your search

+3
View File
@@ -1557,6 +1557,7 @@
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12"
},
@@ -1752,6 +1753,7 @@
"integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"esbuild": "~0.27.0",
"get-tsconfig": "^4.7.5"
@@ -1793,6 +1795,7 @@
"integrity": "sha512-fPGaRNj9Zytaf8LEiBhY7Z6ijnFKdzU/+mL8EFBaKr7Vw1/FWcTBAMW0wLPJAGMPX38ZPVCVgLceWiEqeoqL2Q==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@oxc-project/runtime": "0.115.0",
"lightningcss": "^1.32.0",
+10 -8
View File
@@ -53,7 +53,7 @@ export function slugify(value: string): string {
interface NetworkEntry {
method: string; url: string; status: number | null;
contentType: string; responseBody?: any; requestHeaders?: Record<string, string>;
contentType: string; responseBody?: unknown; requestHeaders?: Record<string, string>;
}
interface AnalyzedEndpoint {
@@ -75,7 +75,7 @@ interface InferredCapability {
* Parse raw network output from Playwright MCP.
* Handles text format: [GET] url => [200]
*/
function parseNetworkRequests(raw: any): NetworkEntry[] {
function parseNetworkRequests(raw: unknown): NetworkEntry[] {
if (typeof raw === 'string') {
const entries: NetworkEntry[] = [];
for (const line of raw.split('\n')) {
@@ -123,11 +123,11 @@ function detectAuthIndicators(headers?: Record<string, string>): string[] {
return indicators;
}
function analyzeResponseBody(body: any): AnalyzedEndpoint['responseAnalysis'] {
function analyzeResponseBody(body: unknown): AnalyzedEndpoint['responseAnalysis'] {
if (!body || typeof body !== 'object') return null;
const candidates: Array<{ path: string; items: any[] }> = [];
const candidates: Array<{ path: string; items: unknown[] }> = [];
function findArrays(obj: any, path: string, depth: number) {
function findArrays(obj: unknown, path: string, depth: number) {
if (depth > 4) return;
if (Array.isArray(obj) && obj.length >= 2 && obj.some(item => item && typeof item === 'object' && !Array.isArray(item))) {
candidates.push({ path, items: obj });
@@ -154,13 +154,15 @@ function analyzeResponseBody(body: any): AnalyzedEndpoint['responseAnalysis'] {
return { itemPath: best.path || null, itemCount: best.items.length, detectedFields, sampleFields };
}
function flattenFields(obj: any, prefix: string, maxDepth: number): string[] {
function flattenFields(obj: unknown, prefix: string, maxDepth: number): string[] {
if (maxDepth <= 0 || !obj || typeof obj !== 'object') return [];
const names: string[] = [];
for (const key of Object.keys(obj)) {
const record = obj as Record<string, unknown>;
for (const key of Object.keys(record)) {
const full = prefix ? `${prefix}.${key}` : key;
names.push(full);
if (obj[key] && typeof obj[key] === 'object' && !Array.isArray(obj[key])) names.push(...flattenFields(obj[key], full, maxDepth - 1));
const val = record[key];
if (val && typeof val === 'object' && !Array.isArray(val)) names.push(...flattenFields(val, full, maxDepth - 1));
}
return names;
}
+12 -12
View File
@@ -14,7 +14,7 @@ export interface RenderOptions {
source?: string;
}
export function render(data: any, opts: RenderOptions = {}): void {
export function render(data: unknown, opts: RenderOptions = {}): void {
const fmt = opts.fmt ?? 'table';
if (data === null || data === undefined) {
console.log(data);
@@ -29,8 +29,8 @@ export function render(data: any, opts: RenderOptions = {}): void {
}
}
function renderTable(data: any, opts: RenderOptions): void {
const rows: any[] = Array.isArray(data) ? data : [data];
function renderTable(data: unknown, opts: RenderOptions): void {
const rows = Array.isArray(data) ? data : [data as Record<string, unknown>];
if (!rows.length) { console.log(chalk.dim('(no data)')); return; }
const columns = opts.columns ?? Object.keys(rows[0]);
@@ -44,7 +44,7 @@ function renderTable(data: any, opts: RenderOptions): void {
for (const row of rows) {
table.push(columns.map(c => {
const v = row[c];
const v = (row as Record<string, unknown>)[c];
return v === null || v === undefined ? '' : String(v);
}));
}
@@ -59,36 +59,36 @@ function renderTable(data: any, opts: RenderOptions): void {
console.log(chalk.dim(footer.join(' · ')));
}
function renderJson(data: any): void {
function renderJson(data: unknown): void {
console.log(JSON.stringify(data, null, 2));
}
function renderMarkdown(data: any, opts: RenderOptions): void {
const rows: any[] = Array.isArray(data) ? data : [data];
function renderMarkdown(data: unknown, opts: RenderOptions): void {
const rows = Array.isArray(data) ? data : [data as Record<string, unknown>];
if (!rows.length) return;
const columns = opts.columns ?? Object.keys(rows[0]);
console.log('| ' + columns.join(' | ') + ' |');
console.log('| ' + columns.map(() => '---').join(' | ') + ' |');
for (const row of rows) {
console.log('| ' + columns.map(c => String(row[c] ?? '')).join(' | ') + ' |');
console.log('| ' + columns.map(c => String((row as Record<string, unknown>)[c] ?? '')).join(' | ') + ' |');
}
}
function renderCsv(data: any, opts: RenderOptions): void {
const rows: any[] = Array.isArray(data) ? data : [data];
function renderCsv(data: unknown, opts: RenderOptions): void {
const rows = Array.isArray(data) ? data : [data as Record<string, unknown>];
if (!rows.length) return;
const columns = opts.columns ?? Object.keys(rows[0]);
console.log(columns.join(','));
for (const row of rows) {
console.log(columns.map(c => {
const v = String(row[c] ?? '');
const v = String((row as Record<string, unknown>)[c] ?? '');
return v.includes(',') || v.includes('"') || v.includes('\n')
? `"${v.replace(/"/g, '""')}"` : v;
}).join(','));
}
}
function renderYaml(data: any): void {
function renderYaml(data: unknown): void {
console.log(yaml.dump(data, { sortKeys: false, lineWidth: 120, noRefs: true }));
}
+3 -3
View File
@@ -15,7 +15,7 @@ export enum Strategy {
export interface Arg {
name: string;
type?: string;
default?: any;
default?: unknown;
required?: boolean;
positional?: boolean;
help?: string;
@@ -31,8 +31,8 @@ export interface CliCommand {
browser?: boolean;
args: Arg[];
columns?: string[];
func?: (page: IPage, kwargs: Record<string, any>, debug?: boolean) => Promise<any>;
pipeline?: any[];
func?: (page: IPage, kwargs: Record<string, any>, debug?: boolean) => Promise<unknown>;
pipeline?: Record<string, unknown>[];
timeoutSeconds?: number;
source?: string;
}