Skip to content

Commit 1867b6b

Browse files
sethk4783hemanth-3SethKgary-singh-filestack
authored
File-type version update (filestack#540)
* Update deploy_beta.yml reverting the develop branch changes * Update README.md * fix:Resolved merge conflict * fix:isutf8 import * fix dependencies * add log * fix and cleanup * fxi wrong file types * handle other types * skip catch * code clean-up --------- Co-authored-by: hemanth-3 <[email protected]> Co-authored-by: SethK <[email protected]> Co-authored-by: gary-singh-filestack <[email protected]>
1 parent 208570b commit 1867b6b

File tree

9 files changed

+24395
-3928
lines changed

9 files changed

+24395
-3928
lines changed

.github/workflows/deploy_beta.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: filestack-js-beta
22
on:
33
push:
4-
branches: [ develop ]
4+
branches: [ development ]
55
jobs:
66
build:
77
runs-on: ubuntu-latest

package-lock.json

+24,360-3,910
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -46,20 +46,20 @@
4646
"abab": "^2.0.6",
4747
"debug": "^4.3.4",
4848
"eventemitter3": "^5.0.0",
49-
"fast-xml-parser": "^4.2.3",
50-
"file-type": "^12.4.2",
49+
"fast-xml-parser": "^4.2.4",
50+
"file-type": "^16.5.4",
5151
"follow-redirects": "^1.15.2",
5252
"isutf8": "^4.0.0",
5353
"jsonschema": "^1.4.1",
5454
"lodash.clonedeep": "^4.5.0",
5555
"p-queue": "^6.6.2",
5656
"spark-md5": "^3.0.2",
57-
"ts-node": "^10.9.1"
57+
"ts-node": "^8.10.2"
5858
},
5959
"devDependencies": {
6060
"@babel/core": "^7.8.4",
6161
"@babel/plugin-transform-runtime": "^7.8.3",
62-
"@babel/preset-env": "^7.8.4",
62+
"@babel/preset-env": "^7.23.7",
6363
"@inrupt/jest-jsdom-polyfills": "^1.6.0",
6464
"@purtuga/esm-webpack-plugin": "^1.2.1",
6565
"@types/jest": "^29.4.0",

src/lib/api/upload/file_tools.browser.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import { File as FsFile } from './file';
1818
import { SanitizeOptions, getMimetype } from './../../utils';
1919
import { FilestackError } from './../../../filestack_error';
20-
import fileType from 'file-type';
2120

2221
export type RawFile = Blob | Buffer | File | string;
2322
export type NamedInputFile = {
@@ -178,8 +177,9 @@ export const getFile = (input: InputFile, sanitizeOptions?: SanitizeOptions): Pr
178177
return readFile(file).then(
179178
async res => {
180179
let mime = file.type;
180+
let minimumBytes = 4100;
181181
if (!file.type || file.type.length === 0 || file.type === 'text/plain') {
182-
mime = getMimetype(await res.slice(0, fileType.minimumBytes), filename);
182+
mime = await getMimetype(await res.slice(0, minimumBytes), filename);
183183
}
184184

185185
return new FsFile(

src/lib/api/upload/file_tools.node.ts

+6-5
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ const isFileBase = (input: InputFile): input is string => {
6363
* @param {*} inputFile
6464
* @returns {Promise<File>}
6565
*/
66-
export const getFile = (input: InputFile, sanitizeOptions?: SanitizeOptions): Promise<FsFile> => {
66+
export const getFile = async(input: InputFile, sanitizeOptions?: SanitizeOptions): Promise<FsFile> => {
6767
let filename;
6868

6969
if (isFileNamed(input)) {
@@ -74,21 +74,21 @@ export const getFile = (input: InputFile, sanitizeOptions?: SanitizeOptions): Pr
7474
if (isFilePath(input)) {
7575
let path = input;
7676
return new Promise((resolve, reject) => {
77-
require('fs').readFile(path, (err, buffer) => {
77+
require('fs').readFile(path, async(err, buffer) => {
7878
if (err) {
7979
return reject(err);
8080
}
8181

8282
if (!filename) {
8383
filename = require && require('path').basename(path);
8484
}
85-
85+
let mime = await getMimetype(buffer, filename);
8686
return resolve(
8787
new FsFile(
8888
{
8989
name: filename,
9090
size: buffer.byteLength,
91-
type: getMimetype(buffer, filename),
91+
type: mime,
9292
slice: (start, end) => Promise.resolve(buffer.slice(start, end)),
9393
},
9494
sanitizeOptions
@@ -108,12 +108,13 @@ export const getFile = (input: InputFile, sanitizeOptions?: SanitizeOptions): Pr
108108
}
109109

110110
if (isFileBuffer(input)) {
111+
let mime = await getMimetype(input, filename);
111112
return Promise.resolve(
112113
new FsFile(
113114
{
114115
name: filename,
115116
size: input.byteLength,
116-
type: getMimetype(input, filename),
117+
type: mime,
117118
// @ts-ignore
118119
slice: (start, end) => Promise.resolve(input.slice(start, end)),
119120
},

src/lib/utils/extensions.ts

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const ExtensionsMap = {
8080
'application/octet-stream': [
8181
'bin',
8282
'dms',
83+
'tdms',
8384
'lrf',
8485
'mar',
8586
'so',

src/lib/utils/index.spec.ts

+9
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,15 @@ describe('utils:index', () => {
7272
const result = resolveHost(hosts, cname);
7373
checkHosts(result, cname);
7474
});
75+
76+
it('should be idempotent', () => {
77+
const cname = 'stage.filestackapi.com';
78+
const firstResult = resolveHost(hosts, cname);
79+
const copiedResult = JSON.parse(JSON.stringify(firstResult));
80+
const secondResult = resolveHost(copiedResult, cname);
81+
82+
expect(JSON.stringify(firstResult)).toEqual(JSON.stringify(secondResult));
83+
});
7584
});
7685

7786
describe('removeEmpty', () => {

src/lib/utils/index.ts

+8-5
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import { Session } from '../client';
1919
import { Hosts } from './../../config';
2020
import { ExtensionsMap } from './extensions';
21-
import fileType from 'file-type';
21+
import { fromBuffer } from 'file-type';
2222
import isutf8 from 'isutf8';
2323

2424
/**
@@ -101,9 +101,13 @@ export const uniqueId = (len: number = 10): string => {
101101
* @param {Uint8Array | Buffer} file
102102
* @returns {string} - mimetype
103103
*/
104-
export const getMimetype = (file: Uint8Array | Buffer, name?: string): string => {
105-
let type = fileType(file);
106-
104+
export const getMimetype = async(file: Uint8Array | Buffer, name?: string): Promise<string> => {
105+
let type;
106+
try {
107+
type = await fromBuffer(file);
108+
} catch(e) {
109+
console.warn("An exception occurred while processing the buffer:", e.message);
110+
}
107111
const excludedMimetypes = ['text/plain', 'application/octet-stream', 'application/x-ms', 'application/x-msi', 'application/zip'];
108112

109113
if (type && excludedMimetypes.indexOf(type.mime) === -1) {
@@ -134,7 +138,6 @@ export const getMimetype = (file: Uint8Array | Buffer, name?: string): string =>
134138
return type.mime;
135139
}
136140

137-
return 'application/octet-stream';
138141
};
139142

140143
/**

webpack.config.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ const banner = fs.readFileSync('./LICENSE', 'utf8').replace('{year}', new Date()
99

1010
const config = {
1111
mode: 'production',
12-
node: { Buffer: false },
12+
node: {
13+
Buffer: false,
14+
fs: 'empty',
15+
},
1316
watchOptions: {
1417
ignored: /node_modules/
1518
},

0 commit comments

Comments
 (0)