OverviewFilesCommitsIssuesDocsReleasesPeers

mirall-cli / node_modules / msix-manager / index.js

52 lines · javascript ref:
const EventEmitter = require('events')
const { pathToFileURL } = require('url')
const binding = require('#binding')

module.exports = class MSIXManager {
  constructor() {
    this._handle = binding.init()
  }

  addPackage(file, opts = {}) {
    return new MSIXManagerAddPackage(this, pathToFileURL(file).href, opts)
  }
}

class MSIXManagerAddPackage extends EventEmitter {
  constructor(manager, uri, opts) {
    const { allowUnsigned = false, forceUpdateFromAnyVersion = false } = opts

    super()

    this._manager = manager

    this._completed = Promise.withResolvers()

    this._handle = binding.addPackage(
      manager._handle,
      uri,
      allowUnsigned,
      forceUpdateFromAnyVersion,
      this,
      this._onprogress,
      this._oncompleted
    )
  }

  then(resolve, reject) {
    return this._completed.promise.then(resolve, reject)
  }

  _onprogress(progress) {
    this.emit('progress', progress)
  }

  _oncompleted(err) {
    if (err) {
      this._completed.reject(new Error(err))
    } else {
      this._completed.resolve()
    }
  }
}