Skip to content

Commit 10144b9

Browse files
committed
publish browser, CJS and ESM versions in a single npm package
1 parent edee14d commit 10144b9

File tree

8 files changed

+88
-9
lines changed

8 files changed

+88
-9
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ npm install @maslick/koder
6060
```
6161

6262
```javascript
63-
// CommonJS format
63+
// CommonJS
6464
const Koder = require('@maslick/koder');
6565

6666
// ES6 modules

dist/browser.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
class Koder {
2+
initialize(config) {
3+
return (async () => {
4+
// Load WASM file
5+
console.log("Browser");
6+
config ||= {};
7+
const directory = config.wasmDirectory || "./wasm";
8+
this.mod = await CreateKoder({locateFile: file => `${directory}/${file}`});
9+
10+
// Initialize a glue API object (between JavaScript and C++ code)
11+
this.api = {
12+
createBuffer: this.mod.cwrap('createBuffer', 'number', ['number']),
13+
deleteBuffer: this.mod.cwrap('deleteBuffer', '', ['number']),
14+
triggerDecode: this.mod.cwrap('triggerDecode', 'number', ['number', 'number', 'number']),
15+
getScanResults: this.mod.cwrap('getScanResults', 'number', [])
16+
};
17+
18+
// return the class
19+
return this;
20+
})();
21+
}
22+
23+
decode(imgData, width, height) {
24+
const buffer = this.api.createBuffer(width * height * 4);
25+
this.mod.HEAPU8.set(imgData, buffer);
26+
const results = [];
27+
if (this.api.triggerDecode(buffer, width, height) > 0) {
28+
const resultAddress = this.api.getScanResults();
29+
results.push(this.mod.UTF8ToString(resultAddress));
30+
this.api.deleteBuffer(resultAddress);
31+
}
32+
if (results.length > 0) return results[0];
33+
else return null;
34+
}
35+
}

dist/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ class Koder {
44
get initialized() {
55
return (async () => {
66
// Load WASM file
7+
console.log("CJS");
78
this.mod = await CreateKoder();
89

910
// Initialize a glue API object (between JavaScript and C++ code)

dist/index.mjs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import CreateKoder from './zbar.js';
2+
3+
class Koder {
4+
get initialized() {
5+
return (async () => {
6+
// Load WASM file
7+
console.log("ESM");
8+
this.mod = await CreateKoder();
9+
10+
// Initialize a glue API object (between JavaScript and C++ code)
11+
this.api = {
12+
createBuffer: this.mod.cwrap('createBuffer', 'number', ['number']),
13+
deleteBuffer: this.mod.cwrap('deleteBuffer', '', ['number']),
14+
triggerDecode: this.mod.cwrap('triggerDecode', 'number', ['number', 'number', 'number']),
15+
getScanResults: this.mod.cwrap('getScanResults', 'number', [])
16+
};
17+
18+
// return the class
19+
return this;
20+
})();
21+
}
22+
23+
decode(imgData, width, height) {
24+
const buffer = this.api.createBuffer(width * height * 4);
25+
this.mod.HEAPU8.set(imgData, buffer);
26+
const results = [];
27+
if (this.api.triggerDecode(buffer, width, height) > 0) {
28+
const resultAddress = this.api.getScanResults();
29+
results.push(this.mod.UTF8ToString(resultAddress));
30+
this.api.deleteBuffer(resultAddress);
31+
}
32+
if (results.length > 0) return results[0];
33+
else return null;
34+
}
35+
}
36+
37+
export default Koder;

dist/package.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@maslick/koder",
3-
"version": "1.2.1",
3+
"version": "1.3.0",
44
"description": "QR/bar code scanner for the Browser",
55
"author": "Pavel Maslov",
66
"license": "MIT",
@@ -29,5 +29,10 @@
2929
"upca",
3030
"upce"
3131
],
32-
"main": "index.js"
32+
"exports": {
33+
".": {
34+
"require": "./index.cjs",
35+
"import": "./index.mjs"
36+
}
37+
}
3338
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "koder-react",
3-
"version": "1.7.0",
3+
"version": "1.8.0",
44
"homepage": "./",
55
"private": true,
66
"description": "QR/bar code scanner for the Browser",

public/wasm/koder.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
class Koder {
2-
get initialized() {
2+
initialize(config) {
33
return (async () => {
44
// Load WASM file
5-
this.mod = await CreateKoder({
6-
locateFile: file => `wasm/${file}`,
7-
});
5+
console.log("Browser");
6+
config ||= {};
7+
const directory = config.wasmDirectory || "./wasm";
8+
this.mod = await CreateKoder({locateFile: file => `${directory}/${file}`});
89

910
// Initialize a glue API object (between JavaScript and C++ code)
1011
this.api = {

public/wasmWorker.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ importScripts("wasm/koder.js");
44

55
(async () => {
66
// Initialize Koder
7-
const koder = await new Koder().initialized;
7+
const koder = await new Koder().initialize({wasmDirectory: "./wasm"});
88

99
// Listen for messages from JS main thread containing raw image data
1010
self.addEventListener('message', event => {

0 commit comments

Comments
 (0)