Skip to content

Commit

Permalink
feat: upgrade to emscripten 1.37.19
Browse files Browse the repository at this point in the history
  • Loading branch information
abdes committed Jun 23, 2020
1 parent a4ddef8 commit b0555c4
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 132 deletions.
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM trzeci/emscripten:1.39.10-upstream
FROM trzeci/emscripten:1.39.18-upstream

RUN apt-get update && \
apt-get install -qqy autoconf automake libtool
13 changes: 7 additions & 6 deletions examples/raw-binding-example.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@ import * as fs from 'fs';
import * as path from 'path';
import { MagicBindingModule, MagicBindingInterface } from '../lib/index';

const bindingModule = require('../../dist/magic-js');
const createBindingModule = require('../../dist/magic-js');

const magicFile = path.normalize(
path.join(__dirname, '..', '..', 'dist', 'magic.mgc')
);

const binding: MagicBindingModule = bindingModule({
onRuntimeInitialized() {
console.log(binding);
// const binding: MagicBindingModule = bindingModule({
// onRuntimeInitialized() {
createBindingModule().then((binding: MagicBindingModule) => {
console.log(binding.MagicBinding);
console.log(`Magic version : ${binding.MagicBinding.version()}`);

// We can only use MAGIC_PRESERVE_ATIME on operating suystems that support
Expand Down Expand Up @@ -44,5 +45,5 @@ const binding: MagicBindingModule = bindingModule({
});

binding.MagicBinding.destroy();
}
});
});
// });
212 changes: 93 additions & 119 deletions lib/binding.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,146 +12,120 @@ import * as path from 'path';
const moduleOptions = {
// This can be used to override the way the wasm file is located in
// the file system when it is not located jsut besides the js script.
locateFile: function(path: string, scriptDirectory: string) {
locateFile: function (path: string, scriptDirectory: string) {
return scriptDirectory + path;
}
},
};

describe('Raw binding to libmagic unit tests', () => {
let bindingModule: any;
beforeEach(() => {
beforeAll((done) => {
bindingModule = require('../dist/magic-js');
});
it('loads wasm code when imported', done => {
const binding: MagicBindingModule = bindingModule({
...moduleOptions,
onRuntimeInitialized() {
expect(binding).not.toBeNull();
expect(binding.MagicBinding).not.toBeNull();
done();
}
bindingModule(moduleOptions).then((binding: MagicBindingModule) => {
expect(binding).not.toBeNull();
expect(binding.MagicBinding).not.toBeNull();
done();
});
});
it('exports libmagic flags', done => {
const binding: MagicBindingModule = bindingModule({
...moduleOptions,
onRuntimeInitialized() {
expect(binding).not.toBeNull();
const props = Object.getOwnPropertyNames(binding);
expect(props.includes('MAGIC_NONE'));
expect(props.includes('MAGIC_DEBUG'));
expect(props.includes('MAGIC_SYMLINK'));
expect(props.includes('MAGIC_COMPRESS'));
expect(props.includes('MAGIC_DEVICES'));
expect(props.includes('MAGIC_MIME_TYPE'));
expect(props.includes('MAGIC_CONTINUE'));
expect(props.includes('MAGIC_CHECK'));
expect(props.includes('MAGIC_PRESERVE_ATIME'));
expect(props.includes('MAGIC_RAW'));
expect(props.includes('MAGIC_ERROR'));
expect(props.includes('MAGIC_MIME_ENCODING'));
expect(props.includes('MAGIC_MIME_ENCODING)'));
expect(props.includes('MAGIC_APPLE'));
expect(props.includes('MAGIC_EXTENSION'));
expect(props.includes('MAGIC_COMPRESS_TRANSP'));
expect(props.includes('MAGIC_APPLE)'));
expect(props.includes('MAGIC_NO_CHECK_COMPRESS'));
expect(props.includes('MAGIC_NO_CHECK_TAR'));
expect(props.includes('MAGIC_NO_CHECK_SOFT'));
expect(props.includes('MAGIC_NO_CHECK_APPTYPE'));
expect(props.includes('MAGIC_NO_CHECK_ELF'));
expect(props.includes('MAGIC_NO_CHECK_TEXT'));
expect(props.includes('MAGIC_NO_CHECK_CDF'));
expect(props.includes('MAGIC_NO_CHECK_CSV'));
expect(props.includes('MAGIC_NO_CHECK_TOKENS'));
expect(props.includes('MAGIC_NO_CHECK_ENCODING'));
expect(props.includes('MAGIC_NO_CHECK_JSON'));
expect(props.includes('MAGIC_NO_CHECK_BUILTIN'));
done();
}
it('exports libmagic flags', (done) => {
bindingModule().then((binding: MagicBindingModule) => {
expect(binding).not.toBeNull();
const props = Object.getOwnPropertyNames(binding);
expect(props.includes('MAGIC_NONE'));
expect(props.includes('MAGIC_DEBUG'));
expect(props.includes('MAGIC_SYMLINK'));
expect(props.includes('MAGIC_COMPRESS'));
expect(props.includes('MAGIC_DEVICES'));
expect(props.includes('MAGIC_MIME_TYPE'));
expect(props.includes('MAGIC_CONTINUE'));
expect(props.includes('MAGIC_CHECK'));
expect(props.includes('MAGIC_PRESERVE_ATIME'));
expect(props.includes('MAGIC_RAW'));
expect(props.includes('MAGIC_ERROR'));
expect(props.includes('MAGIC_MIME_ENCODING'));
expect(props.includes('MAGIC_MIME_ENCODING)'));
expect(props.includes('MAGIC_APPLE'));
expect(props.includes('MAGIC_EXTENSION'));
expect(props.includes('MAGIC_COMPRESS_TRANSP'));
expect(props.includes('MAGIC_APPLE)'));
expect(props.includes('MAGIC_NO_CHECK_COMPRESS'));
expect(props.includes('MAGIC_NO_CHECK_TAR'));
expect(props.includes('MAGIC_NO_CHECK_SOFT'));
expect(props.includes('MAGIC_NO_CHECK_APPTYPE'));
expect(props.includes('MAGIC_NO_CHECK_ELF'));
expect(props.includes('MAGIC_NO_CHECK_TEXT'));
expect(props.includes('MAGIC_NO_CHECK_CDF'));
expect(props.includes('MAGIC_NO_CHECK_CSV'));
expect(props.includes('MAGIC_NO_CHECK_TOKENS'));
expect(props.includes('MAGIC_NO_CHECK_ENCODING'));
expect(props.includes('MAGIC_NO_CHECK_JSON'));
expect(props.includes('MAGIC_NO_CHECK_BUILTIN'));
done();
});
});
it('implements static version()', done => {
const binding: MagicBindingModule = bindingModule({
...moduleOptions,
onRuntimeInitialized() {
const version = binding.MagicBinding.version();
// We're at least using libmagic 5.x
expect(version).toBeGreaterThan(500);
done();
}
it('implements static version()', (done) => {
bindingModule().then((binding: MagicBindingModule) => {
const version = binding.MagicBinding.version();
// We're at least using libmagic 5.x
expect(version).toBeGreaterThan(500);
done();
});
});

it('implements static defaultPath()', done => {
const binding: MagicBindingModule = bindingModule({
...moduleOptions,
onRuntimeInitialized() {
const path = binding.MagicBinding.defaultPath();
expect(path).not.toBeNull();
done();
}
it('implements static defaultPath()', (done) => {
bindingModule().then((binding: MagicBindingModule) => {
const path = binding.MagicBinding.defaultPath();
expect(path).not.toBeNull();
done();
});
});
it('can be successfully initialized with a magic.mgc path and specific flags', done => {
const binding: MagicBindingModule = bindingModule({
...moduleOptions,
onRuntimeInitialized() {
const result = binding.MagicBinding.init(
path.normalize(path.join(__dirname, '..', 'dist', 'magic.mgc')),
binding.MAGIC_DEBUG
);
expect(result).not.toEqual(-1);
expect(binding.MagicBinding.flags()).toEqual(binding.MAGIC_DEBUG);
done();
}
it('can be successfully initialized with a magic.mgc path and specific flags', (done) => {
bindingModule().then((binding: MagicBindingModule) => {
const result = binding.MagicBinding.init(
path.normalize(path.join(__dirname, '..', 'dist', 'magic.mgc')),
binding.MAGIC_DEBUG
);
expect(result).not.toEqual(-1);
expect(binding.MagicBinding.flags()).toEqual(binding.MAGIC_DEBUG);
done();
});
});
it('init fails with return val -1 if path does not point to magic.mgc', done => {
const binding: MagicBindingModule = bindingModule({
...moduleOptions,
onRuntimeInitialized() {
const result = binding.MagicBinding.init(
path.normalize(path.join(__dirname, '..', 'dist', 'NOT_magic.mgc')),
binding.MAGIC_DEBUG
);
expect(result).toEqual(-1);
done();
}
it('init fails with return val -1 if path does not point to magic.mgc', (done) => {
bindingModule().then((binding: MagicBindingModule) => {
const result = binding.MagicBinding.init(
path.normalize(path.join(__dirname, '..', 'dist', 'NOT_magic.mgc')),
binding.MAGIC_DEBUG
);
expect(result).toEqual(-1);
done();
});
});
it('can not do detection before init is called', done => {
const binding: MagicBindingModule = bindingModule({
...moduleOptions,
onRuntimeInitialized() {
const magic = new binding.MagicBinding();
const result = magic.detect('fffff', -1);
expect(result.startsWith('ERROR: ')).toBeTruthy();
done();
}
it('can not do detection before init is called', (done) => {
bindingModule().then((binding: MagicBindingModule) => {
const magic = new binding.MagicBinding();
const result = magic.detect('fffff', -1);
expect(result.startsWith('ERROR: ')).toBeTruthy();
done();
});
});
it('does the magic detection', done => {
const binding: MagicBindingModule = bindingModule({
...moduleOptions,
onRuntimeInitialized() {
const magicPath = path.normalize(
path.join(__dirname, '..', 'dist', 'magic.mgc')
);
const initResult = binding.MagicBinding.init(
magicPath,
binding.MAGIC_NONE
);
expect(initResult).not.toEqual(-1);
const magic = new binding.MagicBinding();
let result = magic.detect(magicPath, -1);
expect(
result.startsWith('magic binary file for file(1) cmd')
).toBeTruthy();
result = magic.detect(magicPath, binding.MAGIC_MIME);
expect(result).toEqual('application/octet-stream; charset=binary');
done();
}
it('does the magic detection', (done) => {
bindingModule().then((binding: MagicBindingModule) => {
const magicPath = path.normalize(
path.join(__dirname, '..', 'dist', 'magic.mgc')
);
const initResult = binding.MagicBinding.init(
magicPath,
binding.MAGIC_NONE
);
expect(initResult).not.toEqual(-1);
const magic = new binding.MagicBinding();
let result = magic.detect(magicPath, -1);
expect(
result.startsWith('magic binary file for file(1) cmd')
).toBeTruthy();
result = magic.detect(magicPath, binding.MAGIC_MIME);
expect(result).toEqual('application/octet-stream; charset=binary');
done();
});
});
});
9 changes: 3 additions & 6 deletions lib/file-magic.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
MagicBindingStaticInterface,
MagicBindingInterface
} from './binding';
const bindingModule = require('./magic-js');
const createBindingModule = require('./magic-js');

/**
* Reproduces exactly the same values than in magic.h of libmagic but using
Expand Down Expand Up @@ -144,9 +144,7 @@ export class FileMagic {
): Promise<FileMagic> {
if (!FileMagic._instance) {
return new Promise((resolve, reject) => {
const moduleInstance: MagicBindingModule = bindingModule({
locateFile: locateFile,
onRuntimeInitialized() {
createBindingModule({locateFile: locateFile}).then((moduleInstance: MagicBindingModule) => {
// Initialize libmagic
const status = moduleInstance.MagicBinding.init(
FileMagic.magicFile,
Expand All @@ -162,8 +160,7 @@ export class FileMagic {
FileMagic._instance._magic = new moduleInstance.MagicBinding();

resolve(FileMagic._instance);
}
});
});
});
}
return Promise.resolve(FileMagic._instance);
Expand Down

0 comments on commit b0555c4

Please sign in to comment.