text: "use strict";
  // Copyright 2016-2018, Pulumi Corporation.
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  Object.defineProperty(exports, "__esModule", { value: true });
  const output_1 = require("./output");
  const resource_1 = require("./resource");
  const utils_1 = require("./utils");
  /**
   * Manages a reference to a Pulumi stack. The referenced stack's outputs are available via the
   * `outputs` property or the `output` method.
   */
  class StackReference extends resource_1.CustomResource {
      /**
       * Create a StackReference resource with the given unique name, arguments, and options.
       *
       * If args is not specified, the name of the referenced stack will be the name of the StackReference resource.
       *
       * @param name The _unique_ name of the stack reference.
       * @param args The arguments to use to populate this resource's properties.
       * @Param opts A bag of options that control this resource's behavior.
       */
      constructor(name, args, opts) {
          args = args || {};
          super("pulumi:pulumi:StackReference", name, {
              name: args.name || name,
              outputs: undefined,
          }, Object.assign({}, opts, { id: args.name || name }));
      }
      /**
       * Fetches the value of the named stack output.
       *
       * @param name The name of the stack output to fetch.
       */
      getOutput(name) {
          return output_1.all([output_1.output(name), this.outputs]).apply(([n, os]) => os[n]);
      }
      /**
       * Fetches the value promptly of the named stack output.  May return undefined if the value is
       * not known for some reason.
       *
       * This operation is not supported (and will throw) if any exported values of the StackReference
       * are secrets.
       *
       * @param name The name of the stack output to fetch.
       */
      getOutputSync(name) {
          const out = this.getOutput(name);
          const isSecret = utils_1.promiseResult(out.isSecret);
          if (isSecret) {
              throw new Error("Cannot call [getOutputSync] if the referenced stack has secret outputs. Use [getOutput] instead.");
          }
          return utils_1.promiseResult(out.promise());
      }
  }
  exports.StackReference = StackReference;
  