publiclab/image-sequencer

View on GitHub
src/modules/_nomodule/gl-context.js

Summary

Maintainability
A
1 hr
Test Coverage
module.exports = function runInBrowserContext(input, callback, step, options) {

  // to ignore this from getting browserified
  const puppeteer = eval('require')('puppeteer');

  //Stripped down version of options which is serializable
  var minOptions = require('lodash').cloneDeep(options);
  minOptions.step = options.step.name;

  var obj = { input: input, modOptions: minOptions };

  puppeteer.launch({headless: true, args:['--no-sandbox', '--disable-setuid-sandbox']}).then(function(browser) {
    browser.newPage().then(page => {
      /* Maybe there is a better way to this, loading the page coz localstorage API
            is not available otherwise */
      page.goto('https://google.com').then(() => {
        page.addScriptTag({ path: require('path').join(__dirname, '../../../dist/image-sequencer.js') }).then(() => {
          page.addScriptTag({path: require('path').join(__dirname, '../../../node_modules/opencv.js/opencv.js')}).then(() => {
            page.evaluate((options) => {
              return new Promise((resolve, reject) => {
                var sequencer = ImageSequencer();
                sequencer.loadImage(options.input.src);
                sequencer.addSteps(options.modOptions.step, options.modOptions);
                sequencer.run(function cb(out) {
                  resolve(sequencer.steps[1].output.src);
                });
              });
            }, obj).then(el => {
              browser.close().then(() => {
                step.output = { src: el, format: input.format };
                callback();
              });
            });
          });
        });
      });
    });
  });
};