Skip to content

Commit ac1fde6

Browse files
committed
refactor validator fs access
1 parent 89ad805 commit ac1fde6

9 files changed

Lines changed: 37 additions & 44 deletions

src/validation/applePanelsValidator.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
/* eslint-disable @typescript-eslint/require-await */
2-
import * as fs from 'fs';
3-
import * as path from 'path';
42
import plist from 'plist';
53
import { BaseValidator } from './baseValidator';
64
import { ValidationResult } from './validationTypes';
5+
import { getBasename, getFs, getPath } from '../utils/io';
76

87
type PanelsContainer = { panels?: any; Panels?: Record<string, any> };
98

@@ -13,8 +12,10 @@ type PanelsContainer = { panels?: any; Panels?: Record<string, any> };
1312
export class ApplePanelsValidator extends BaseValidator {
1413
static async validateFile(filePath: string): Promise<ValidationResult> {
1514
const validator = new ApplePanelsValidator();
15+
const fs = getFs();
16+
const path = getPath();
1617
let content: Buffer;
17-
const filename = path.basename(filePath);
18+
const filename = getBasename(filePath);
1819
let size = 0;
1920

2021
const stats = fs.existsSync(filePath) ? fs.statSync(filePath) : null;

src/validation/astericsValidator.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
/* eslint-disable @typescript-eslint/require-await */
2-
import * as fs from 'fs';
3-
import * as path from 'path';
42
import { BaseValidator } from './baseValidator';
53
import { ValidationResult } from './validationTypes';
4+
import { getBasename, getFs, readBinaryFromInput } from '../utils/io';
65

76
/**
87
* Validator for Asterics Grid (.grd) JSON files
@@ -13,9 +12,9 @@ export class AstericsGridValidator extends BaseValidator {
1312
*/
1413
static async validateFile(filePath: string): Promise<ValidationResult> {
1514
const validator = new AstericsGridValidator();
16-
const content = fs.readFileSync(filePath);
17-
const stats = fs.statSync(filePath);
18-
return validator.validate(content, path.basename(filePath), stats.size);
15+
const content = readBinaryFromInput(filePath);
16+
const stats = getFs().statSync(filePath);
17+
return validator.validate(content, getBasename(filePath), stats.size);
1918
}
2019

2120
/**

src/validation/dotValidator.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
/* eslint-disable @typescript-eslint/require-await */
2-
import * as fs from 'fs';
3-
import * as path from 'path';
42
import { BaseValidator } from './baseValidator';
53
import { ValidationResult } from './validationTypes';
4+
import { getBasename, getFs, readBinaryFromInput } from '../utils/io';
65

76
/**
87
* Validator for Graphviz DOT files
98
*/
109
export class DotValidator extends BaseValidator {
1110
static async validateFile(filePath: string): Promise<ValidationResult> {
1211
const validator = new DotValidator();
13-
const content = fs.readFileSync(filePath);
14-
const stats = fs.statSync(filePath);
15-
return validator.validate(content, path.basename(filePath), stats.size);
12+
const content = readBinaryFromInput(filePath);
13+
const stats = getFs().statSync(filePath);
14+
return validator.validate(content, getBasename(filePath), stats.size);
1615
}
1716

1817
static async identifyFormat(content: any, filename: string): Promise<boolean> {

src/validation/excelValidator.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
/* eslint-disable @typescript-eslint/require-await */
2-
import * as fs from 'fs';
3-
import * as path from 'path';
42
import * as ExcelJS from 'exceljs';
53
import { BaseValidator } from './baseValidator';
64
import { ValidationResult } from './validationTypes';
5+
import { getBasename, getFs, readBinaryFromInput } from '../utils/io';
76

87
/**
98
* Validator for Excel imports (.xlsx/.xls)
109
*/
1110
export class ExcelValidator extends BaseValidator {
1211
static async validateFile(filePath: string): Promise<ValidationResult> {
1312
const validator = new ExcelValidator();
14-
const content = fs.readFileSync(filePath);
15-
const stats = fs.statSync(filePath);
16-
return validator.validate(content, path.basename(filePath), stats.size);
13+
const content = readBinaryFromInput(filePath);
14+
const stats = getFs().statSync(filePath);
15+
return validator.validate(content, getBasename(filePath), stats.size);
1716
}
1817

1918
static async identifyFormat(_content: any, filename: string): Promise<boolean> {

src/validation/index.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ import { OpmlValidator } from './opmlValidator';
4343
import { DotValidator } from './dotValidator';
4444
import { ApplePanelsValidator } from './applePanelsValidator';
4545
import { ObfsetValidator } from './obfsetValidator';
46-
import * as fs from 'fs';
47-
import * as path from 'path';
46+
import { getBasename, getFs, readBinaryFromInput } from '../utils/io';
4847

4948
export function getValidatorForFormat(format: string): BaseValidator | null {
5049
switch (format.toLowerCase()) {
@@ -128,7 +127,7 @@ export async function validateFileOrBuffer(
128127
filenameHint?: string
129128
): Promise<ValidationResult> {
130129
const isPath = typeof filePathOrBuffer === 'string';
131-
const name = filenameHint || (isPath ? path.basename(filePathOrBuffer) : 'upload');
130+
const name = filenameHint || (isPath ? getBasename(filePathOrBuffer) : 'upload');
132131
const validator = getValidatorForFile(name) || getValidatorForFormat(name);
133132

134133
if (!validator) {
@@ -144,9 +143,9 @@ export async function validateFileOrBuffer(
144143
return ctor.validateFile(filePathOrBuffer);
145144
}
146145

147-
const buf = fs.readFileSync(filePathOrBuffer);
148-
const stats = fs.statSync(filePathOrBuffer);
149-
return validator.validate(buf, path.basename(filePathOrBuffer), stats.size);
146+
const buf = readBinaryFromInput(filePathOrBuffer);
147+
const stats = getFs().statSync(filePathOrBuffer);
148+
return validator.validate(buf, getBasename(filePathOrBuffer), stats.size);
150149
}
151150

152151
const buffer = Buffer.isBuffer(filePathOrBuffer)

src/validation/obfsetValidator.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
/* eslint-disable @typescript-eslint/require-await */
2-
import * as fs from 'fs';
3-
import * as path from 'path';
42
import { BaseValidator } from './baseValidator';
53
import { ValidationResult } from './validationTypes';
4+
import { getBasename, getFs, readBinaryFromInput } from '../utils/io';
65

76
/**
87
* Validator for OBF set bundles (.obfset) - JSON arrays of boards
98
*/
109
export class ObfsetValidator extends BaseValidator {
1110
static async validateFile(filePath: string): Promise<ValidationResult> {
1211
const validator = new ObfsetValidator();
13-
const content = fs.readFileSync(filePath);
14-
const stats = fs.statSync(filePath);
15-
return validator.validate(content, path.basename(filePath), stats.size);
12+
const content = readBinaryFromInput(filePath);
13+
const stats = getFs().statSync(filePath);
14+
return validator.validate(content, getBasename(filePath), stats.size);
1615
}
1716

1817
static async identifyFormat(content: any, filename: string): Promise<boolean> {

src/validation/opmlValidator.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
/* eslint-disable @typescript-eslint/require-await */
2-
import * as fs from 'fs';
3-
import * as path from 'path';
42
import { XMLParser, XMLValidator } from 'fast-xml-parser';
53
import { BaseValidator } from './baseValidator';
64
import { ValidationResult } from './validationTypes';
5+
import { getBasename, getFs, readBinaryFromInput } from '../utils/io';
76

87
/**
98
* Validator for OPML files
109
*/
1110
export class OpmlValidator extends BaseValidator {
1211
static async validateFile(filePath: string): Promise<ValidationResult> {
1312
const validator = new OpmlValidator();
14-
const content = fs.readFileSync(filePath);
15-
const stats = fs.statSync(filePath);
16-
return validator.validate(content, path.basename(filePath), stats.size);
13+
const content = readBinaryFromInput(filePath);
14+
const stats = getFs().statSync(filePath);
15+
return validator.validate(content, getBasename(filePath), stats.size);
1716
}
1817

1918
static async identifyFormat(content: any, filename: string): Promise<boolean> {

src/validation/snapValidator.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
/* eslint-disable @typescript-eslint/require-await */
22
/* eslint-disable @typescript-eslint/no-unsafe-argument */
3-
import * as fs from 'fs';
4-
import * as path from 'path';
53
import * as xml2js from 'xml2js';
64
import JSZip from 'jszip';
75
import { BaseValidator } from './baseValidator';
86
import { ValidationResult } from './validationTypes';
7+
import { getBasename, getFs, readBinaryFromInput } from '../utils/io';
98

109
/**
1110
* Validator for Snap files (.spb, .sps)
@@ -21,9 +20,9 @@ export class SnapValidator extends BaseValidator {
2120
*/
2221
static async validateFile(filePath: string): Promise<ValidationResult> {
2322
const validator = new SnapValidator();
24-
const content = fs.readFileSync(filePath);
25-
const stats = fs.statSync(filePath);
26-
return validator.validate(content, path.basename(filePath), stats.size);
23+
const content = readBinaryFromInput(filePath);
24+
const stats = getFs().statSync(filePath);
25+
return validator.validate(content, getBasename(filePath), stats.size);
2726
}
2827

2928
/**

src/validation/touchChatValidator.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
/* eslint-disable @typescript-eslint/require-await */
22
/* eslint-disable @typescript-eslint/no-unsafe-argument */
33
/* eslint-disable @typescript-eslint/no-unsafe-return */
4-
import * as fs from 'fs';
5-
import * as path from 'path';
64
import * as xml2js from 'xml2js';
75
import { BaseValidator } from './baseValidator';
86
import { ValidationResult } from './validationTypes';
7+
import { getBasename, getFs, readBinaryFromInput } from '../utils/io';
98

109
/**
1110
* Validator for TouchChat files (.ce)
@@ -21,9 +20,9 @@ export class TouchChatValidator extends BaseValidator {
2120
*/
2221
static async validateFile(filePath: string): Promise<ValidationResult> {
2322
const validator = new TouchChatValidator();
24-
const content = fs.readFileSync(filePath);
25-
const stats = fs.statSync(filePath);
26-
return validator.validate(content, path.basename(filePath), stats.size);
23+
const content = readBinaryFromInput(filePath);
24+
const stats = getFs().statSync(filePath);
25+
return validator.validate(content, getBasename(filePath), stats.size);
2726
}
2827

2928
/**

0 commit comments

Comments
 (0)