Skip to content

Commit

Permalink
Cleanup - move to mjs
Browse files Browse the repository at this point in the history
  • Loading branch information
timruffles committed May 29, 2018
1 parent c97c714 commit 5976838
Show file tree
Hide file tree
Showing 9 changed files with 34 additions and 194 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ Encodes every byte as an emoji in utf8, so 32 bits! 25% efficent.

## Demo

node base-lol.js < targets/max.jpg > max.base-lol
node base-lol.js --decode < max.base-lol > max-decoded.jpg
node base-lol.mjs < targets/max.jpg > max.base-lol
node base-lol.mjs --decode < max.base-lol > max-decoded.jpg
diff targets/max.jpg max-decoded.jpg
14 changes: 9 additions & 5 deletions base-lol-node.js → base-lol-node.mjs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
const stream = require('stream');
const util = require('util');
import stream from 'stream';
import util from 'util';
import fs from 'fs';
import { encode, decode } from './base-lol';

const pipeline = util.promisify(stream.pipeline);
const fs = require('fs');

const binaryToEmoji = new stream.Transform({
transform(chunk, encoding, callback) {
Expand Down Expand Up @@ -45,7 +47,7 @@ const emojiToBinary = new stream.Transform({
}
});

if(require.main === module) {
const main = () => {
const stream = process.argv.some(f => f === '--decode')
? emojiToBinary
: binaryToEmoji;
Expand All @@ -59,4 +61,6 @@ if(require.main === module) {
console.error(e.stack);
process.exit(1);
})
}
};

main();
46 changes: 0 additions & 46 deletions base-lol-worker.js

This file was deleted.

1 change: 0 additions & 1 deletion base-lol.js → base-lol.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
* - Always encoded as UTF-8 - as efficient as UTF-16 for non-BMP,
* and a good standard
*/
'use strict';

// use the most recognisable emojis for ascii/utf8 text
const asciiTextStart = "😀".codePointAt(0);
Expand Down
7 changes: 2 additions & 5 deletions base-lol.test.js → base-lol.test.mjs
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
'use strict';

const { encodeUInt8Array, decodeString } = require('./base-lol');

const assert = require('assert');
import { encodeUInt8Array, decodeString } from './base-lol';
import assert from 'assert';

roundTrip(encodeUInt8Array, decodeString, [245]);

Expand Down
86 changes: 0 additions & 86 deletions base-🙃.js

This file was deleted.

68 changes: 19 additions & 49 deletions demo-page.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';

import { encode } from './base-lol.mjs';

// wait for document to be completed
document.addEventListener('DOMContentLoaded', main);
Expand All @@ -8,8 +9,6 @@ function main() {
if(!assertBrowserSupport()) return;

addDragListeners();

startWorker();
}

function assertBrowserSupport() {
Expand Down Expand Up @@ -50,14 +49,14 @@ function addDragListeners() {
e.preventDefault();
el.classList.remove('dragover');

const files = event.dataTransfer.files;
const files = [...event.dataTransfer.files];
const handler = action === 'encode'
? encodeFiles
: decodeFiles;

console.log(files);

[...files].forEach(handler);
handler(files);
})
}

Expand All @@ -70,60 +69,31 @@ function addDragListeners() {
})
}

function startWorker() {
window.lolWorker = new Worker('base-lol-worker.js', {
type:'module',
});
window.lolJobs = [];

window.onmessage = ({taskId, result}) => {
window.lolJobs[taskId](result);
window.lolJobs[taskId] = undefined;
};
}

function microtask(fn) {
return Promise.resolve().then(fn);
}

function runJob(job) {
const jobId = window.lolJobs.length;

microtask(() => {
window.lolWorker.postMessage(Object.assign({}, job, {
jobId,
}));
});

return new Promise((resolve, reject) => {
window.lolJobs[jobId] = ({ error, result }) => {
if(error) {
console.error('Error in worker', error);
reject(new Error(error.message));
} else {
resolve(result);
async function encodeFiles(files) {
for(const file of files) {
const reader = new FileReader();
reader.addEventListener("loadend", () => {
let encoded = '';
for(let i = 0; i < reader.result.length; i++) {
encoded += encode(reader.result[i]);
}
}
});
}


function decodeFiles(files) {
}
const filename = file.name.replace(/(\.[^\.])?$/,
'.base-lol');

function encodeFiles(files) {
runJob({
type: 'decode',
})
download(filename, encoded);
});
reader.readAsArrayBuffer(file);
}
}

function fileAdded() {
function decodeFiles(files) {

}

function download(filename, text) {
function download(filename, data) {
const element = document.createElement('a');
element.setAttribute('href', 'data:application/octet-stream;');
element.setAttribute('href', 'data:text/plain;charset=utf-8;' + data);
element.setAttribute('download', filename);

element.style.display = 'none';
Expand Down
1 change: 1 addition & 0 deletions demo.base-lol

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"version": "",
"description": "Encodes/decodes binary data as a sequence of emojis.",
"scripts": {
"demo": "node --experimental-modules base-lol-node.mjs < targets/max-tiny.jpg > demo.base-lol; head -c 20 demo.base-lol",
"test": "node base-lol.test.js"
},
"devDependencies": {
Expand Down

0 comments on commit 5976838

Please sign in to comment.