diff --git a/core.d.ts b/core.d.ts index 543c452b..c31d1ebc 100644 --- a/core.d.ts +++ b/core.d.ts @@ -118,6 +118,16 @@ A custom file type detector. Detectors can be added via the constructor options or by directly modifying `FileTypeParser#detectors`. +### Example adding a detector + +```js +import {FileTypeParser} from 'file-type'; +import {detectXml} from '@file-type/xml'; // Third party detector for XML formats + +const parser = new FileTypeParser({customDetectors: [detectXml]}); +const fileType = await parser.fromFile('sample.kml'); +console.log(fileType); +``` Detectors provided through the constructor options are executed before the default detectors. Custom detectors allow for: @@ -131,7 +141,7 @@ If a detector returns `undefined`, the following rules apply: 1. **No Tokenizer Interaction**: If the detector does not modify the tokenizer's position, the next detector in the sequence is executed. 2. **Tokenizer Interaction**: If the detector modifies the tokenizer's position (`tokenizer.position` is advanced), no further detectors are executed. In this case, the file type remains `undefined`, as subsequent detectors cannot evaluate the content. This is an exceptional scenario, as it prevents any other detectors from determining the file type. -### Example usage +### Example writing a custom detector Below is an example of a custom detector array. This can be passed to the `FileTypeParser` via the `fileTypeOptions` argument. diff --git a/readme.md b/readme.md index 01f81af5..8a35e385 100644 --- a/readme.md +++ b/readme.md @@ -344,6 +344,17 @@ A custom file type detector. Detectors can be added via the constructor options or by directly modifying `FileTypeParser#detectors`. +### Example adding a detector + +```js +import {FileTypeParser} from 'file-type'; +import {detectXml} from '@file-type/xml'; // Third party detector for XML formats + +const parser = new FileTypeParser({customDetectors: [detectXml]}); +const fileType = await parser.fromFile('sample.kml'); +console.log(fileType); +``` + Detectors provided through the constructor options are executed before the default detectors. Custom detectors allow for: @@ -357,7 +368,7 @@ If a detector returns `undefined`, the following rules apply: 1. **No Tokenizer Interaction**: If the detector does not modify the tokenizer's position, the next detector in the sequence is executed. 2. **Tokenizer Interaction**: If the detector modifies the tokenizer's position (`tokenizer.position` is advanced), no further detectors are executed. In this case, the file type remains `undefined`, as subsequent detectors cannot evaluate the content. This is an exceptional scenario, as it prevents any other detectors from determining the file type. -### Example usage +### Example writing a custom detector Below is an example of a custom detector array. This can be passed to the `FileTypeParser` via the `fileTypeOptions` argument. @@ -578,7 +589,7 @@ The following file types will not be accepted: - `.ppt` - Microsoft PowerPoint97-2003 Document - `.msi` - Microsoft Windows Installer - `.csv` - [Reason.](https://github.com/sindresorhus/file-type/issues/264#issuecomment-568439196) -- `.svg` - Detecting it requires a full-blown parser. Check out [`is-svg`](https://github.com/sindresorhus/is-svg) for something that mostly works. +- `.svg` - You can add [@file-type/xml](https://github.com/Borewit/file-type-xml) to detect XML based formats. #### tokenizer