"use strict";
// *** WARNING: this file was generated by crd2pulumi. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
Object.defineProperty(exports, "__esModule", { value: true });
exports.getVersion = void 0;
exports.getEnv = getEnv;
exports.getEnvBoolean = getEnvBoolean;
exports.getEnvNumber = getEnvNumber;
exports.resourceOptsDefaults = resourceOptsDefaults;
exports.lazyLoad = lazyLoad;
exports.callAsync = callAsync;
const runtime = require("@pulumi/pulumi/runtime");
function getEnv(...vars) {
    for (const v of vars) {
        const value = process.env[v];
        if (value) {
            return value;
        }
    }
    return undefined;
}
function getEnvBoolean(...vars) {
    const s = getEnv(...vars);
    if (s !== undefined) {
        // NOTE: these values are taken from https://golang.org/src/strconv/atob.go?s=351:391#L1, which is what
        // Terraform uses internally when parsing boolean values.
        if (["1", "t", "T", "true", "TRUE", "True"].find(v => v === s) !== undefined) {
            return true;
        }
        if (["0", "f", "F", "false", "FALSE", "False"].find(v => v === s) !== undefined) {
            return false;
        }
    }
    return undefined;
}
function getEnvNumber(...vars) {
    const s = getEnv(...vars);
    if (s !== undefined) {
        const f = parseFloat(s);
        if (!isNaN(f)) {
            return f;
        }
    }
    return undefined;
}
const getVersion = () => "4.23.0";
exports.getVersion = getVersion;
function unusedGetVersion() {
    let version = require('./package.json').version;
    // Node allows for the version to be prefixed by a "v", while semver doesn't.
    // If there is a v, strip it off.
    if (version.indexOf('v') === 0) {
        version = version.slice(1);
    }
    return version;
}
/** @internal */
function resourceOptsDefaults() {
    return { version: (0, exports.getVersion)() };
}
/** @internal */
function lazyLoad(exports, props, loadModule) {
    for (let property of props) {
        Object.defineProperty(exports, property, {
            enumerable: true,
            get: function () {
                return loadModule()[property];
            },
        });
    }
}
/** @internal */
async function callAsync(tok, props, res, opts) {
    const o = runtime.call(tok, props, res);
    const value = await o.promise(true /*withUnknowns*/);
    const isKnown = await o.isKnown;
    const isSecret = await o.isSecret;
    const problem = !isKnown ? "an unknown value"
        : isSecret ? "a secret value"
            : undefined;
    // Ingoring o.resources silently. They are typically non-empty, r.f() calls include r as a dependency.
    if (problem) {
        throw new Error(`Plain resource method "${tok}" incorrectly returned ${problem}. ` +
            "This is an error in the provider, please report this to the provider developer.");
    }
    // Extract a single property if requested.
    if (opts && opts.property) {
        return value[opts.property];
    }
    return value;
}
