feat: allow position offset as option

This commit is contained in:
Eliott Vincent 2022-10-06 10:32:32 +02:00
parent a082c71382
commit a169cc58d7
2 changed files with 13 additions and 3 deletions

View File

@ -40,6 +40,11 @@ describe('chardet', () => {
const res = await chardet.detectFile(path, { sampleSize: 32 }); const res = await chardet.detectFile(path, { sampleSize: 32 });
expect(res).toBe('UTF-8'); expect(res).toBe('UTF-8');
}); });
it('should detect encoding with smaller sample size and position offset', async () => {
const res = await chardet.detectFile(path, { sampleSize: 32, position: 64 });
expect(res).toBe('UTF-8');
});
}); });
describe('#detectFileSync', () => { describe('#detectFileSync', () => {
@ -50,6 +55,10 @@ describe('chardet', () => {
it('should detect encoding with smaller sample size', () => { it('should detect encoding with smaller sample size', () => {
expect(chardet.detectFileSync(path, { sampleSize: 32 })).toBe('UTF-8'); expect(chardet.detectFileSync(path, { sampleSize: 32 })).toBe('UTF-8');
}); });
it('should detect encoding with smaller sample size and position offset', () => {
expect(chardet.detectFileSync(path, { sampleSize: 32, position: 64 })).toBe('UTF-8');
});
}); });
describe('#analyse', () => { describe('#analyse', () => {

View File

@ -10,7 +10,8 @@ import * as sbcs from './encoding/sbcs';
import * as iso2022 from './encoding/iso2022'; import * as iso2022 from './encoding/iso2022';
interface FullOptions { interface FullOptions {
sampleSize: number sampleSize: number,
position: number
} }
type Options = Partial<FullOptions> type Options = Partial<FullOptions>
@ -107,7 +108,7 @@ export const detectFile = (filepath: string, opts: Options = {}): Promise<Detect
fd = fs.openSync(filepath, 'r'); fd = fs.openSync(filepath, 'r');
const sample: Buffer = Buffer.allocUnsafe(opts.sampleSize); const sample: Buffer = Buffer.allocUnsafe(opts.sampleSize);
fs.read(fd, sample, 0, opts.sampleSize, null, (err?: Error) => { fs.read(fd, sample, 0, opts.sampleSize, opts.position, (err?: Error) => {
handler(err, sample); handler(err, sample);
}); });
return; return;
@ -123,7 +124,7 @@ export const detectFileSync = (filepath: string, opts: Options = {}): DetectResu
const fd = fs.openSync(filepath, 'r'); const fd = fs.openSync(filepath, 'r');
const sample = Buffer.allocUnsafe(opts.sampleSize); const sample = Buffer.allocUnsafe(opts.sampleSize);
fs.readSync(fd, sample, 0, opts.sampleSize); fs.readSync(fd, sample, 0, opts.sampleSize, opts.position);
fs.closeSync(fd); fs.closeSync(fd);
return detect(sample); return detect(sample);
} }