text: "use strict";
  /*---------------------------------------------------------------------------------------------
   *  Copyright (c) Microsoft Corporation. All rights reserved.
   *  Licensed under the MIT License. See License.txt in the project root for license information.
   *--------------------------------------------------------------------------------------------*/
  Object.defineProperty(exports, "__esModule", { value: true });
  const azure = require("azure-storage");
  const mime = require("mime");
  const minimist = require("minimist");
  const path_1 = require("path");
  const fileNames = [
      'fake.html',
      'host.js',
      'index.html',
      'main.js',
      'service-worker.js'
  ];
  async function assertContainer(blobService, container) {
      await new Promise((c, e) => blobService.createContainerIfNotExists(container, { publicAccessLevel: 'blob' }, err => err ? e(err) : c()));
  }
  async function doesBlobExist(blobService, container, blobName) {
      const existsResult = await new Promise((c, e) => blobService.doesBlobExist(container, blobName, (err, r) => err ? e(err) : c(r)));
      return existsResult.exists;
  }
  async function uploadBlob(blobService, container, blobName, file) {
      const blobOptions = {
          contentSettings: {
              contentType: mime.lookup(file),
              cacheControl: 'max-age=31536000, public'
          }
      };
      await new Promise((c, e) => blobService.createBlockBlobFromLocalFile(container, blobName, file, blobOptions, err => err ? e(err) : c()));
  }
  async function publish(commit, files) {
      console.log('Publishing...');
      console.log('Commit:', commit);
      const storageAccount = process.env['AZURE_WEBVIEW_STORAGE_ACCOUNT'];
      const blobService = azure.createBlobService(storageAccount, process.env['AZURE_WEBVIEW_STORAGE_ACCESS_KEY'])
          .withFilter(new azure.ExponentialRetryPolicyFilter(20));
      await assertContainer(blobService, commit);
      for (const file of files) {
          const blobName = (0, path_1.basename)(file);
          const blobExists = await doesBlobExist(blobService, commit, blobName);
          if (blobExists) {
              console.log(`Blob ${commit}, ${blobName} already exists, not publishing again.`);
              continue;
          }
          console.log('Uploading blob to Azure storage...');
          await uploadBlob(blobService, commit, blobName, file);
      }
      console.log('Blobs successfully uploaded.');
  }
  function main() {
      const commit = process.env['BUILD_SOURCEVERSION'];
      if (!commit) {
          console.warn('Skipping publish due to missing BUILD_SOURCEVERSION');
          return;
      }
      const opts = minimist(process.argv.slice(2));
      const [directory] = opts._;
      const files = fileNames.map(fileName => (0, path_1.join)(directory, fileName));
      publish(commit, files).catch(err => {
          console.error(err);
          process.exit(1);
      });
  }
  if (process.argv.length < 3) {
      console.error('Usage: node publish.js <directory>');
      process.exit(-1);
  }
  main();
  