/**
 * @license
 * Copyright Google LLC All Rights Reserved.
 *
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://angular.io/license
 */

'use strict';

const {resolve} = require('path');
const {chmod, cp, mkdir, mv, rm, test} = require('shelljs');
const zonePackageJson = require('../../packages/zone.js/package.json');
const {baseDir, bazelBin, bazelCmd, exec, scriptPath} = require('./package-builder');


module.exports = {
  buildZoneJsPackage,
};

/**
 * Build the `zone.js` npm package into `dist/bin/packages/zone.js/npm_package/` and copy it to
 * `destPath` for other scripts/tests to use.
 *
 * NOTE: The `zone.js` package is not built as part of `package-builder`'s `buildTargetPackages()`
 *       nor is it copied into the same directory as the Angular packages (e.g.
 *       `dist/packages-dist/`) despite its source's being inside `packages/`, because it is not
 *       published to npm under the `@angular` scope (as happens for the rest of the packages).
 *
 * @param {string} destPath Path to the output directory into which we copy the npm package.
 *     This path should either be absolute or relative to the project root.
 */
function buildZoneJsPackage(destPath) {
  console.info('##############################');
  console.info(`${scriptPath}:`);
  console.info('  Building zone.js npm package');
  console.info('##############################');
  exec(`${bazelCmd} run //packages/zone.js:npm_package.pack`);

  // Create the output directory.
  const absDestPath = resolve(baseDir, destPath);
  if (!test('-d', absDestPath)) mkdir('-p', absDestPath);

  // Copy artifacts to `destPath`, so they can be easier persisted on CI and used by non-bazel
  // scripts/tests.
  const buildOutputDir = `${bazelBin}/packages/zone.js/npm_package`;
  const distTargetDir = `${absDestPath}/zone.js`;

  console.info(`# Copy npm_package artifacts to ${distTargetDir}`);
  rm('-rf', distTargetDir);
  cp('-R', buildOutputDir, distTargetDir);
  chmod('-R', 'u+w', distTargetDir);

  // Copy `zone.js.tgz` to `destPath`, so we can test
  // the archive generated by the `npm_package.pack` rule.
  const distArchiveTargetDir = `${absDestPath}/archive`;
  console.info(`# Copy npm_package archive file to ${distArchiveTargetDir}`);
  rm('-rf', distArchiveTargetDir);
  mkdir('-p', distArchiveTargetDir);
  mv(`${baseDir}/zone.js-${zonePackageJson.version}.tgz`, `${distArchiveTargetDir}/zone.js.tgz`);

  console.info('');
}

@@ -1457,11 +1457,13 @@
 md%7D 
-run
+build
  //p
@@ -1489,21 +1489,16 @@
 _package
-.pack
 %60);%0A%0A  /
@@ -1872,16 +1872,239 @@
 e.js%60;%0A%0A
+  // Also create an archive so we can test the package itself.%0A  // Currently, the %60npm_package.pack%60 rule does not work on Windows, so run %60npm pack%60 directly.%0A  exec(%60npm pack $%7BbuildOutputDir%7D%60, false, %7Bcwd: baseDir%7D);%0A%0A
   consol

Revert "build: update to use npm_package.pack rule (#39636)"