From 4b7eb75446feab68c8e3ac9b35a43dd556eb5abc Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Sat, 11 Nov 2023 04:32:11 +0900 Subject: [PATCH] Add support for FBX (Filmbox) (#605) Co-authored-by: Borewit Co-authored-by: Sindre Sorhus --- core.d.ts | 2 ++ core.js | 7 +++++++ fixture/fixture.fbx | Bin 0 -> 17036 bytes package.json | 3 ++- readme.md | 1 + supported.js | 2 ++ 6 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 fixture/fixture.fbx diff --git a/core.d.ts b/core.d.ts index 37f06266..3fd0f9ac 100644 --- a/core.d.ts +++ b/core.d.ts @@ -153,6 +153,7 @@ export type FileExtension = | 'ace' | 'avro' | 'icc' + | 'fbx' ; // eslint-disable-line semi-style export type MimeType = @@ -302,6 +303,7 @@ export type MimeType = | 'application/x-ace-compressed' | 'application/avro' | 'application/vnd.iccprofile' + | 'application/x.autodesk.fbx' ; // eslint-disable-line semi-style export type FileTypeResult = { diff --git a/core.js b/core.js index 01dcb11e..6816f80f 100644 --- a/core.js +++ b/core.js @@ -1506,6 +1506,13 @@ export class FileTypeParser { }; } + if (this.checkString('Kaydara FBX Binary \u0000')) { + return { + ext: 'fbx', + mime: 'application/x.autodesk.fbx', // Invented by us + }; + } + if ( this.check([0x4C, 0x50], {offset: 34}) && ( diff --git a/fixture/fixture.fbx b/fixture/fixture.fbx new file mode 100644 index 0000000000000000000000000000000000000000..12e963b972236f30ab71a3b0b2029a3f017d0159 GIT binary patch literal 17036 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 literal 0 HcmV?d00001 diff --git a/package.json b/package.json index c6c799da..c09f4fd5 100644 --- a/package.json +++ b/package.json @@ -206,7 +206,8 @@ "cpio", "ace", "avro", - "icc" + "icc", + "fbx" ], "dependencies": { "readable-web-to-node-stream": "^3.0.2", diff --git a/readme.md b/readme.md index 0451bbe5..da9276c8 100644 --- a/readme.md +++ b/readme.md @@ -405,6 +405,7 @@ console.log(fileType); - [`f4b`](https://en.wikipedia.org/wiki/Flash_Video) - Audiobook and podcast ISO base media file format used by Adobe Flash Player - [`f4p`](https://en.wikipedia.org/wiki/Flash_Video) - ISO base media file format protected by Adobe Access DRM used by Adobe Flash Player - [`f4v`](https://en.wikipedia.org/wiki/Flash_Video) - ISO base media file format used by Adobe Flash Player +- [`fbx`](https://en.wikipedia.org/wiki/FBX) - Filmbox is a proprietary file format used to provide interoperability between digital content creation apps. - [`flac`](https://en.wikipedia.org/wiki/FLAC) - Free Lossless Audio Codec - [`flif`](https://en.wikipedia.org/wiki/Free_Lossless_Image_Format) - Free Lossless Image Format - [`flv`](https://en.wikipedia.org/wiki/Flash_Video) - Flash video diff --git a/supported.js b/supported.js index 5b913777..e3344c4b 100644 --- a/supported.js +++ b/supported.js @@ -150,6 +150,7 @@ export const extensions = [ 'ace', 'avro', 'icc', + 'fbx', ]; export const mimeTypes = [ @@ -299,4 +300,5 @@ export const mimeTypes = [ 'application/x-ace-compressed', 'application/avro', 'application/vnd.iccprofile', + 'application/x.autodesk.fbx', // Invented by us ];