diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index de2843bd2..e8dbf295e 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -1,4 +1,10 @@ ### Improvements + +- [sdk/nodejs] - Type optional input properties as `Input | undefined` instead of + `Input | undefined`. This allows users to pass `Output` for optional input + properties. + [#6323](https://github.com/pulumi/pulumi/pull/6323) + - Adds CI detector for Buildkite [#7933](https://github.com/pulumi/pulumi/pull/7933) diff --git a/pkg/codegen/internal/test/testdata/dash-named-schema/nodejs/submodule1/moduleResource.ts b/pkg/codegen/internal/test/testdata/dash-named-schema/nodejs/submodule1/moduleResource.ts index 65b05b55d..3eddf5743 100644 --- a/pkg/codegen/internal/test/testdata/dash-named-schema/nodejs/submodule1/moduleResource.ts +++ b/pkg/codegen/internal/test/testdata/dash-named-schema/nodejs/submodule1/moduleResource.ts @@ -60,5 +60,5 @@ export class ModuleResource extends pulumi.CustomResource { * The set of arguments for constructing a ModuleResource resource. */ export interface ModuleResourceArgs { - thing?: pulumi.Input; + thing?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/dash-named-schema/nodejs/types/input.ts b/pkg/codegen/internal/test/testdata/dash-named-schema/nodejs/types/input.ts index ab428c412..0dff351de 100644 --- a/pkg/codegen/internal/test/testdata/dash-named-schema/nodejs/types/input.ts +++ b/pkg/codegen/internal/test/testdata/dash-named-schema/nodejs/types/input.ts @@ -5,5 +5,5 @@ import * as pulumi from "@pulumi/pulumi"; import { input as inputs, output as outputs } from "../types"; export interface TopLevelArgs { - buzz?: pulumi.Input; + buzz?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/dashed-import-schema/nodejs/tree/v1/nursery.ts b/pkg/codegen/internal/test/testdata/dashed-import-schema/nodejs/tree/v1/nursery.ts index d9d03bb54..0298f0aef 100644 --- a/pkg/codegen/internal/test/testdata/dashed-import-schema/nodejs/tree/v1/nursery.ts +++ b/pkg/codegen/internal/test/testdata/dashed-import-schema/nodejs/tree/v1/nursery.ts @@ -65,7 +65,7 @@ export interface NurseryArgs { /** * The sizes of trees available */ - sizes?: pulumi.Input<{[key: string]: pulumi.Input}>; + sizes?: pulumi.Input<{[key: string]: pulumi.Input} | undefined>; /** * The varieties available */ diff --git a/pkg/codegen/internal/test/testdata/dashed-import-schema/nodejs/tree/v1/rubberTree.ts b/pkg/codegen/internal/test/testdata/dashed-import-schema/nodejs/tree/v1/rubberTree.ts index bb0613bcd..5a10c99fb 100644 --- a/pkg/codegen/internal/test/testdata/dashed-import-schema/nodejs/tree/v1/rubberTree.ts +++ b/pkg/codegen/internal/test/testdata/dashed-import-schema/nodejs/tree/v1/rubberTree.ts @@ -75,16 +75,16 @@ export class RubberTree extends pulumi.CustomResource { } export interface RubberTreeState { - farm?: pulumi.Input; + farm?: pulumi.Input; } /** * The set of arguments for constructing a RubberTree resource. */ export interface RubberTreeArgs { - container?: pulumi.Input; + container?: pulumi.Input; diameter: pulumi.Input; - farm?: pulumi.Input; - size?: pulumi.Input; + farm?: pulumi.Input; + size?: pulumi.Input; type: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/dashed-import-schema/nodejs/types/input.ts b/pkg/codegen/internal/test/testdata/dashed-import-schema/nodejs/types/input.ts index 52f85fdca..7def568b8 100644 --- a/pkg/codegen/internal/test/testdata/dashed-import-schema/nodejs/types/input.ts +++ b/pkg/codegen/internal/test/testdata/dashed-import-schema/nodejs/types/input.ts @@ -5,8 +5,8 @@ import * as pulumi from "@pulumi/pulumi"; import { input as inputs, output as outputs, enums } from "../types"; export interface ContainerArgs { - brightness?: pulumi.Input; - color?: pulumi.Input; - material?: pulumi.Input; + brightness?: pulumi.Input; + color?: pulumi.Input; + material?: pulumi.Input; size: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/external-resource-schema/nodejs/argFunction.ts b/pkg/codegen/internal/test/testdata/external-resource-schema/nodejs/argFunction.ts index f92da28ee..ed2494259 100644 --- a/pkg/codegen/internal/test/testdata/external-resource-schema/nodejs/argFunction.ts +++ b/pkg/codegen/internal/test/testdata/external-resource-schema/nodejs/argFunction.ts @@ -33,5 +33,5 @@ export function argFunctionOutput(args?: ArgFunctionOutputArgs, opts?: pulumi.In } export interface ArgFunctionOutputArgs { - name?: pulumi.Input; + name?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/external-resource-schema/nodejs/cat.ts b/pkg/codegen/internal/test/testdata/external-resource-schema/nodejs/cat.ts index f4aaf5b26..73f2c6964 100644 --- a/pkg/codegen/internal/test/testdata/external-resource-schema/nodejs/cat.ts +++ b/pkg/codegen/internal/test/testdata/external-resource-schema/nodejs/cat.ts @@ -64,6 +64,6 @@ export class Cat extends pulumi.CustomResource { * The set of arguments for constructing a Cat resource. */ export interface CatArgs { - age?: pulumi.Input; - pet?: pulumi.Input; + age?: pulumi.Input; + pet?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/external-resource-schema/nodejs/component.ts b/pkg/codegen/internal/test/testdata/external-resource-schema/nodejs/component.ts index 0be0b56f4..19dbaadf4 100644 --- a/pkg/codegen/internal/test/testdata/external-resource-schema/nodejs/component.ts +++ b/pkg/codegen/internal/test/testdata/external-resource-schema/nodejs/component.ts @@ -83,9 +83,9 @@ export class Component extends pulumi.CustomResource { * The set of arguments for constructing a Component resource. */ export interface ComponentArgs { - metadata?: pulumi.Input; - metadataArray?: pulumi.Input[]>; - metadataMap?: pulumi.Input<{[key: string]: pulumi.Input}>; + metadata?: pulumi.Input; + metadataArray?: pulumi.Input[] | undefined>; + metadataMap?: pulumi.Input<{[key: string]: pulumi.Input} | undefined>; requiredMetadata: pulumi.Input; requiredMetadataArray: pulumi.Input[]>; requiredMetadataMap: pulumi.Input<{[key: string]: pulumi.Input}>; diff --git a/pkg/codegen/internal/test/testdata/external-resource-schema/nodejs/types/input.ts b/pkg/codegen/internal/test/testdata/external-resource-schema/nodejs/types/input.ts index 07305e24c..a3a308aed 100644 --- a/pkg/codegen/internal/test/testdata/external-resource-schema/nodejs/types/input.ts +++ b/pkg/codegen/internal/test/testdata/external-resource-schema/nodejs/types/input.ts @@ -7,10 +7,10 @@ import { input as inputs, output as outputs } from "../types"; import * as pulumiRandom from "@pulumi/random"; export interface PetArgs { - age?: pulumi.Input; - name?: pulumi.Input; - nameArray?: pulumi.Input[]>; - nameMap?: pulumi.Input<{[key: string]: pulumi.Input}>; + age?: pulumi.Input; + name?: pulumi.Input; + nameArray?: pulumi.Input[] | undefined>; + nameMap?: pulumi.Input<{[key: string]: pulumi.Input} | undefined>; requiredName: pulumi.Input; requiredNameArray: pulumi.Input[]>; requiredNameMap: pulumi.Input<{[key: string]: pulumi.Input}>; diff --git a/pkg/codegen/internal/test/testdata/nested-module-thirdparty/nodejs/deeply/nested/module/resource.ts b/pkg/codegen/internal/test/testdata/nested-module-thirdparty/nodejs/deeply/nested/module/resource.ts index e15a4a59d..ed0a0f018 100644 --- a/pkg/codegen/internal/test/testdata/nested-module-thirdparty/nodejs/deeply/nested/module/resource.ts +++ b/pkg/codegen/internal/test/testdata/nested-module-thirdparty/nodejs/deeply/nested/module/resource.ts @@ -61,5 +61,5 @@ export class Resource extends pulumi.CustomResource { * The set of arguments for constructing a Resource resource. */ export interface ResourceArgs { - baz?: pulumi.Input; + baz?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/nested-module/nodejs/nested/module/resource.ts b/pkg/codegen/internal/test/testdata/nested-module/nodejs/nested/module/resource.ts index b1a9f8fc7..19267c363 100644 --- a/pkg/codegen/internal/test/testdata/nested-module/nodejs/nested/module/resource.ts +++ b/pkg/codegen/internal/test/testdata/nested-module/nodejs/nested/module/resource.ts @@ -61,5 +61,5 @@ export class Resource extends pulumi.CustomResource { * The set of arguments for constructing a Resource resource. */ export interface ResourceArgs { - bar?: pulumi.Input; + bar?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/output-funcs-edgeorder/nodejs/listConfigurations.ts b/pkg/codegen/internal/test/testdata/output-funcs-edgeorder/nodejs/listConfigurations.ts index e6435bccd..196989c04 100644 --- a/pkg/codegen/internal/test/testdata/output-funcs-edgeorder/nodejs/listConfigurations.ts +++ b/pkg/codegen/internal/test/testdata/output-funcs-edgeorder/nodejs/listConfigurations.ts @@ -65,9 +65,9 @@ export interface ListConfigurationsOutputArgs { /** * Customer subscription properties. Clients can display available products to unregistered customers by explicitly passing subscription details */ - customerSubscriptionDetails?: pulumi.Input; + customerSubscriptionDetails?: pulumi.Input; /** * $skipToken is supported on list of configurations, which provides the next page in the list of configurations. */ - skipToken?: pulumi.Input; + skipToken?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/output-funcs-edgeorder/nodejs/listProductFamilies.ts b/pkg/codegen/internal/test/testdata/output-funcs-edgeorder/nodejs/listProductFamilies.ts index 08b91be4e..ca637a5a3 100644 --- a/pkg/codegen/internal/test/testdata/output-funcs-edgeorder/nodejs/listProductFamilies.ts +++ b/pkg/codegen/internal/test/testdata/output-funcs-edgeorder/nodejs/listProductFamilies.ts @@ -66,11 +66,11 @@ export interface ListProductFamiliesOutputArgs { /** * Customer subscription properties. Clients can display available products to unregistered customers by explicitly passing subscription details */ - customerSubscriptionDetails?: pulumi.Input; + customerSubscriptionDetails?: pulumi.Input; /** * $expand is supported on configurations parameter for product, which provides details on the configurations for the product. */ - expand?: pulumi.Input; + expand?: pulumi.Input; /** * Dictionary of filterable properties on product family. */ @@ -78,5 +78,5 @@ export interface ListProductFamiliesOutputArgs { /** * $skipToken is supported on list of product families, which provides the next page in the list of product families. */ - skipToken?: pulumi.Input; + skipToken?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/output-funcs-edgeorder/nodejs/types/input.ts b/pkg/codegen/internal/test/testdata/output-funcs-edgeorder/nodejs/types/input.ts index a53af10cb..0ff432f73 100644 --- a/pkg/codegen/internal/test/testdata/output-funcs-edgeorder/nodejs/types/input.ts +++ b/pkg/codegen/internal/test/testdata/output-funcs-edgeorder/nodejs/types/input.ts @@ -11,7 +11,7 @@ export interface ConfigurationFiltersArgs { /** * Filters specific to product */ - filterableProperty?: pulumi.Input[]>; + filterableProperty?: pulumi.Input[] | undefined>; /** * Product hierarchy information */ @@ -57,7 +57,7 @@ export interface CustomerSubscriptionDetailsArgs { /** * Location placement Id of a subscription */ - locationPlacementId?: pulumi.Input; + locationPlacementId?: pulumi.Input; /** * Quota ID of a subscription */ @@ -65,7 +65,7 @@ export interface CustomerSubscriptionDetailsArgs { /** * List of registered feature flags for subscription */ - registeredFeatures?: pulumi.Input[]>; + registeredFeatures?: pulumi.Input[] | undefined>; } /** @@ -89,11 +89,11 @@ export interface CustomerSubscriptionRegisteredFeaturesArgs { /** * Name of subscription registered feature */ - name?: pulumi.Input; + name?: pulumi.Input; /** * State of subscription registered feature */ - state?: pulumi.Input; + state?: pulumi.Input; } /** @@ -153,18 +153,18 @@ export interface HierarchyInformationArgs { /** * Represents configuration name that uniquely identifies configuration */ - configurationName?: pulumi.Input; + configurationName?: pulumi.Input; /** * Represents product family name that uniquely identifies product family */ - productFamilyName?: pulumi.Input; + productFamilyName?: pulumi.Input; /** * Represents product line name that uniquely identifies product line */ - productLineName?: pulumi.Input; + productLineName?: pulumi.Input; /** * Represents product name that uniquely identifies product */ - productName?: pulumi.Input; + productName?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/output-funcs-tfbridge20/nodejs/getAmiIds.ts b/pkg/codegen/internal/test/testdata/output-funcs-tfbridge20/nodejs/getAmiIds.ts index 0957a0143..69c8f0f48 100644 --- a/pkg/codegen/internal/test/testdata/output-funcs-tfbridge20/nodejs/getAmiIds.ts +++ b/pkg/codegen/internal/test/testdata/output-funcs-tfbridge20/nodejs/getAmiIds.ts @@ -88,13 +88,13 @@ export interface GetAmiIdsOutputArgs { * Limit search to users with *explicit* launch * permission on the image. Valid items are the numeric account ID or `self`. */ - executableUsers?: pulumi.Input[]>; + executableUsers?: pulumi.Input[] | undefined>; /** * One or more name/value pairs to filter off of. There * are several valid keys, for a full reference, check out * [describe-images in the AWS CLI reference][1]. */ - filters?: pulumi.Input[]>; + filters?: pulumi.Input[] | undefined>; /** * A regex string to apply to the AMI list returned * by AWS. This allows more advanced filtering not supported from the AWS API. @@ -102,7 +102,7 @@ export interface GetAmiIdsOutputArgs { * impact if the result is large. It is recommended to combine this with other * options to narrow down the list AWS returns. */ - nameRegex?: pulumi.Input; + nameRegex?: pulumi.Input; /** * List of AMI owners to limit search. At least 1 value must be specified. Valid values: an AWS account ID, `self` (the current account), or an AWS owner alias (e.g. `amazon`, `aws-marketplace`, `microsoft`). */ @@ -110,5 +110,5 @@ export interface GetAmiIdsOutputArgs { /** * Used to sort AMIs by creation time. */ - sortAscending?: pulumi.Input; + sortAscending?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/output-funcs-tfbridge20/nodejs/listStorageAccountKeys.ts b/pkg/codegen/internal/test/testdata/output-funcs-tfbridge20/nodejs/listStorageAccountKeys.ts index 2ceef86a4..9f0f0d794 100644 --- a/pkg/codegen/internal/test/testdata/output-funcs-tfbridge20/nodejs/listStorageAccountKeys.ts +++ b/pkg/codegen/internal/test/testdata/output-funcs-tfbridge20/nodejs/listStorageAccountKeys.ts @@ -61,7 +61,7 @@ export interface ListStorageAccountKeysOutputArgs { /** * Specifies type of the key to be listed. Possible value is kerb. */ - expand?: pulumi.Input; + expand?: pulumi.Input; /** * The name of the resource group within the user's subscription. The name is case insensitive. */ diff --git a/pkg/codegen/internal/test/testdata/output-funcs/nodejs/funcWithAllOptionalInputs.ts b/pkg/codegen/internal/test/testdata/output-funcs/nodejs/funcWithAllOptionalInputs.ts index 37b7cac7e..7e60b20b4 100644 --- a/pkg/codegen/internal/test/testdata/output-funcs/nodejs/funcWithAllOptionalInputs.ts +++ b/pkg/codegen/internal/test/testdata/output-funcs/nodejs/funcWithAllOptionalInputs.ts @@ -45,9 +45,9 @@ export interface FuncWithAllOptionalInputsOutputArgs { /** * Property A */ - a?: pulumi.Input; + a?: pulumi.Input; /** * Property B */ - b?: pulumi.Input; + b?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/output-funcs/nodejs/funcWithDefaultValue.ts b/pkg/codegen/internal/test/testdata/output-funcs/nodejs/funcWithDefaultValue.ts index 116d3dddc..b968d3b1f 100644 --- a/pkg/codegen/internal/test/testdata/output-funcs/nodejs/funcWithDefaultValue.ts +++ b/pkg/codegen/internal/test/testdata/output-funcs/nodejs/funcWithDefaultValue.ts @@ -36,5 +36,5 @@ export function funcWithDefaultValueOutput(args: FuncWithDefaultValueOutputArgs, export interface FuncWithDefaultValueOutputArgs { a: pulumi.Input; - b?: pulumi.Input; + b?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/output-funcs/nodejs/funcWithDictParam.ts b/pkg/codegen/internal/test/testdata/output-funcs/nodejs/funcWithDictParam.ts index fd53e3f2e..11ba8478a 100644 --- a/pkg/codegen/internal/test/testdata/output-funcs/nodejs/funcWithDictParam.ts +++ b/pkg/codegen/internal/test/testdata/output-funcs/nodejs/funcWithDictParam.ts @@ -36,6 +36,6 @@ export function funcWithDictParamOutput(args?: FuncWithDictParamOutputArgs, opts } export interface FuncWithDictParamOutputArgs { - a?: pulumi.Input<{[key: string]: pulumi.Input}>; - b?: pulumi.Input; + a?: pulumi.Input<{[key: string]: pulumi.Input} | undefined>; + b?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/output-funcs/nodejs/funcWithListParam.ts b/pkg/codegen/internal/test/testdata/output-funcs/nodejs/funcWithListParam.ts index 27f32609d..db826e578 100644 --- a/pkg/codegen/internal/test/testdata/output-funcs/nodejs/funcWithListParam.ts +++ b/pkg/codegen/internal/test/testdata/output-funcs/nodejs/funcWithListParam.ts @@ -36,6 +36,6 @@ export function funcWithListParamOutput(args?: FuncWithListParamOutputArgs, opts } export interface FuncWithListParamOutputArgs { - a?: pulumi.Input[]>; - b?: pulumi.Input; + a?: pulumi.Input[] | undefined>; + b?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/output-funcs/nodejs/getBastionShareableLink.ts b/pkg/codegen/internal/test/testdata/output-funcs/nodejs/getBastionShareableLink.ts index 35aed8c80..0afbe00ab 100644 --- a/pkg/codegen/internal/test/testdata/output-funcs/nodejs/getBastionShareableLink.ts +++ b/pkg/codegen/internal/test/testdata/output-funcs/nodejs/getBastionShareableLink.ts @@ -65,5 +65,5 @@ export interface GetBastionShareableLinkOutputArgs { /** * List of VM references. */ - vms?: pulumi.Input[]>; + vms?: pulumi.Input[] | undefined>; } diff --git a/pkg/codegen/internal/test/testdata/output-funcs/nodejs/getIntegrationRuntimeObjectMetadatum.ts b/pkg/codegen/internal/test/testdata/output-funcs/nodejs/getIntegrationRuntimeObjectMetadatum.ts index 6018b25ed..33a297f23 100644 --- a/pkg/codegen/internal/test/testdata/output-funcs/nodejs/getIntegrationRuntimeObjectMetadatum.ts +++ b/pkg/codegen/internal/test/testdata/output-funcs/nodejs/getIntegrationRuntimeObjectMetadatum.ts @@ -74,7 +74,7 @@ export interface GetIntegrationRuntimeObjectMetadatumOutputArgs { /** * Metadata path. */ - metadataPath?: pulumi.Input; + metadataPath?: pulumi.Input; /** * The resource group name. */ diff --git a/pkg/codegen/internal/test/testdata/output-funcs/nodejs/listStorageAccountKeys.ts b/pkg/codegen/internal/test/testdata/output-funcs/nodejs/listStorageAccountKeys.ts index 2ceef86a4..9f0f0d794 100644 --- a/pkg/codegen/internal/test/testdata/output-funcs/nodejs/listStorageAccountKeys.ts +++ b/pkg/codegen/internal/test/testdata/output-funcs/nodejs/listStorageAccountKeys.ts @@ -61,7 +61,7 @@ export interface ListStorageAccountKeysOutputArgs { /** * Specifies type of the key to be listed. Possible value is kerb. */ - expand?: pulumi.Input; + expand?: pulumi.Input; /** * The name of the resource group within the user's subscription. The name is case insensitive. */ diff --git a/pkg/codegen/internal/test/testdata/plain-and-default/nodejs/moduleResource.ts b/pkg/codegen/internal/test/testdata/plain-and-default/nodejs/moduleResource.ts index 191b59df3..c4f8a6e78 100644 --- a/pkg/codegen/internal/test/testdata/plain-and-default/nodejs/moduleResource.ts +++ b/pkg/codegen/internal/test/testdata/plain-and-default/nodejs/moduleResource.ts @@ -98,11 +98,11 @@ export class ModuleResource extends pulumi.CustomResource { * The set of arguments for constructing a ModuleResource resource. */ export interface ModuleResourceArgs { - optional_bool?: pulumi.Input; - optional_const?: pulumi.Input<"val">; - optional_enum?: pulumi.Input; - optional_number?: pulumi.Input; - optional_string?: pulumi.Input; + optional_bool?: pulumi.Input; + optional_const?: pulumi.Input<"val" | undefined>; + optional_enum?: pulumi.Input; + optional_number?: pulumi.Input; + optional_string?: pulumi.Input; plain_optional_bool?: boolean; plain_optional_const?: "val"; plain_optional_number?: number; diff --git a/pkg/codegen/internal/test/testdata/plain-schema-gh6957/nodejs/types/input.ts b/pkg/codegen/internal/test/testdata/plain-schema-gh6957/nodejs/types/input.ts index e1983a7e6..c89757f27 100644 --- a/pkg/codegen/internal/test/testdata/plain-schema-gh6957/nodejs/types/input.ts +++ b/pkg/codegen/internal/test/testdata/plain-schema-gh6957/nodejs/types/input.ts @@ -5,5 +5,5 @@ import * as pulumi from "@pulumi/pulumi"; import { input as inputs, output as outputs } from "../types"; export interface FooArgs { - a?: pulumi.Input; + a?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/provider-config-schema/nodejs/provider.ts b/pkg/codegen/internal/test/testdata/provider-config-schema/nodejs/provider.ts index 129cc12b8..875fe49d8 100644 --- a/pkg/codegen/internal/test/testdata/provider-config-schema/nodejs/provider.ts +++ b/pkg/codegen/internal/test/testdata/provider-config-schema/nodejs/provider.ts @@ -48,5 +48,5 @@ export interface ProviderArgs { /** * this is a relaxed string enum which can also be set via env var */ - favoriteColor?: pulumi.Input; + favoriteColor?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/resource-args-python-case-insensitive/nodejs/person.ts b/pkg/codegen/internal/test/testdata/resource-args-python-case-insensitive/nodejs/person.ts index ae4dc79cb..43b1a673b 100644 --- a/pkg/codegen/internal/test/testdata/resource-args-python-case-insensitive/nodejs/person.ts +++ b/pkg/codegen/internal/test/testdata/resource-args-python-case-insensitive/nodejs/person.ts @@ -63,6 +63,6 @@ export class Person extends pulumi.CustomResource { * The set of arguments for constructing a Person resource. */ export interface PersonArgs { - name?: pulumi.Input; - pets?: pulumi.Input[]>; + name?: pulumi.Input; + pets?: pulumi.Input[] | undefined>; } diff --git a/pkg/codegen/internal/test/testdata/resource-args-python-case-insensitive/nodejs/pet.ts b/pkg/codegen/internal/test/testdata/resource-args-python-case-insensitive/nodejs/pet.ts index 1dd08f636..1aeaa16c8 100644 --- a/pkg/codegen/internal/test/testdata/resource-args-python-case-insensitive/nodejs/pet.ts +++ b/pkg/codegen/internal/test/testdata/resource-args-python-case-insensitive/nodejs/pet.ts @@ -59,5 +59,5 @@ export class Pet extends pulumi.CustomResource { * The set of arguments for constructing a Pet resource. */ export interface PetArgs { - name?: pulumi.Input; + name?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/resource-args-python-case-insensitive/nodejs/types/input.ts b/pkg/codegen/internal/test/testdata/resource-args-python-case-insensitive/nodejs/types/input.ts index 5c75a701d..b58739524 100644 --- a/pkg/codegen/internal/test/testdata/resource-args-python-case-insensitive/nodejs/types/input.ts +++ b/pkg/codegen/internal/test/testdata/resource-args-python-case-insensitive/nodejs/types/input.ts @@ -5,5 +5,5 @@ import * as pulumi from "@pulumi/pulumi"; import { input as inputs, output as outputs } from "../types"; export interface PetArgs { - name?: pulumi.Input; + name?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/resource-args-python/nodejs/person.ts b/pkg/codegen/internal/test/testdata/resource-args-python/nodejs/person.ts index ae4dc79cb..43b1a673b 100644 --- a/pkg/codegen/internal/test/testdata/resource-args-python/nodejs/person.ts +++ b/pkg/codegen/internal/test/testdata/resource-args-python/nodejs/person.ts @@ -63,6 +63,6 @@ export class Person extends pulumi.CustomResource { * The set of arguments for constructing a Person resource. */ export interface PersonArgs { - name?: pulumi.Input; - pets?: pulumi.Input[]>; + name?: pulumi.Input; + pets?: pulumi.Input[] | undefined>; } diff --git a/pkg/codegen/internal/test/testdata/resource-args-python/nodejs/pet.ts b/pkg/codegen/internal/test/testdata/resource-args-python/nodejs/pet.ts index 1dd08f636..1aeaa16c8 100644 --- a/pkg/codegen/internal/test/testdata/resource-args-python/nodejs/pet.ts +++ b/pkg/codegen/internal/test/testdata/resource-args-python/nodejs/pet.ts @@ -59,5 +59,5 @@ export class Pet extends pulumi.CustomResource { * The set of arguments for constructing a Pet resource. */ export interface PetArgs { - name?: pulumi.Input; + name?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/resource-args-python/nodejs/types/input.ts b/pkg/codegen/internal/test/testdata/resource-args-python/nodejs/types/input.ts index 5c75a701d..b58739524 100644 --- a/pkg/codegen/internal/test/testdata/resource-args-python/nodejs/types/input.ts +++ b/pkg/codegen/internal/test/testdata/resource-args-python/nodejs/types/input.ts @@ -5,5 +5,5 @@ import * as pulumi from "@pulumi/pulumi"; import { input as inputs, output as outputs } from "../types"; export interface PetArgs { - name?: pulumi.Input; + name?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-enum-schema/nodejs/tree/v1/nursery.ts b/pkg/codegen/internal/test/testdata/simple-enum-schema/nodejs/tree/v1/nursery.ts index d9d03bb54..0298f0aef 100644 --- a/pkg/codegen/internal/test/testdata/simple-enum-schema/nodejs/tree/v1/nursery.ts +++ b/pkg/codegen/internal/test/testdata/simple-enum-schema/nodejs/tree/v1/nursery.ts @@ -65,7 +65,7 @@ export interface NurseryArgs { /** * The sizes of trees available */ - sizes?: pulumi.Input<{[key: string]: pulumi.Input}>; + sizes?: pulumi.Input<{[key: string]: pulumi.Input} | undefined>; /** * The varieties available */ diff --git a/pkg/codegen/internal/test/testdata/simple-enum-schema/nodejs/tree/v1/rubberTree.ts b/pkg/codegen/internal/test/testdata/simple-enum-schema/nodejs/tree/v1/rubberTree.ts index bb0613bcd..5a10c99fb 100644 --- a/pkg/codegen/internal/test/testdata/simple-enum-schema/nodejs/tree/v1/rubberTree.ts +++ b/pkg/codegen/internal/test/testdata/simple-enum-schema/nodejs/tree/v1/rubberTree.ts @@ -75,16 +75,16 @@ export class RubberTree extends pulumi.CustomResource { } export interface RubberTreeState { - farm?: pulumi.Input; + farm?: pulumi.Input; } /** * The set of arguments for constructing a RubberTree resource. */ export interface RubberTreeArgs { - container?: pulumi.Input; + container?: pulumi.Input; diameter: pulumi.Input; - farm?: pulumi.Input; - size?: pulumi.Input; + farm?: pulumi.Input; + size?: pulumi.Input; type: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-enum-schema/nodejs/types/input.ts b/pkg/codegen/internal/test/testdata/simple-enum-schema/nodejs/types/input.ts index 52f85fdca..7def568b8 100644 --- a/pkg/codegen/internal/test/testdata/simple-enum-schema/nodejs/types/input.ts +++ b/pkg/codegen/internal/test/testdata/simple-enum-schema/nodejs/types/input.ts @@ -5,8 +5,8 @@ import * as pulumi from "@pulumi/pulumi"; import { input as inputs, output as outputs, enums } from "../types"; export interface ContainerArgs { - brightness?: pulumi.Input; - color?: pulumi.Input; - material?: pulumi.Input; + brightness?: pulumi.Input; + color?: pulumi.Input; + material?: pulumi.Input; size: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-methods-schema-single-value-returns/nodejs/foo.ts b/pkg/codegen/internal/test/testdata/simple-methods-schema-single-value-returns/nodejs/foo.ts index 02a470974..d4b3fdab0 100644 --- a/pkg/codegen/internal/test/testdata/simple-methods-schema-single-value-returns/nodejs/foo.ts +++ b/pkg/codegen/internal/test/testdata/simple-methods-schema-single-value-returns/nodejs/foo.ts @@ -61,8 +61,8 @@ export namespace Foo { * The set of arguments for the Foo.getKubeconfig method. */ export interface GetKubeconfigArgs { - profileName?: pulumi.Input; - roleArn?: pulumi.Input; + profileName?: pulumi.Input; + roleArn?: pulumi.Input; } /** diff --git a/pkg/codegen/internal/test/testdata/simple-methods-schema/nodejs/foo.ts b/pkg/codegen/internal/test/testdata/simple-methods-schema/nodejs/foo.ts index 9176155c2..481905f43 100644 --- a/pkg/codegen/internal/test/testdata/simple-methods-schema/nodejs/foo.ts +++ b/pkg/codegen/internal/test/testdata/simple-methods-schema/nodejs/foo.ts @@ -91,16 +91,16 @@ export namespace Foo { * The set of arguments for the Foo.bar method. */ export interface BarArgs { - baz?: pulumi.Input; + baz?: pulumi.Input; bazPlain?: inputs.nested.BazArgs; bazRequired: pulumi.Input; - boolValue?: pulumi.Input; + boolValue?: pulumi.Input; boolValuePlain?: boolean; boolValueRequired: pulumi.Input; - name?: pulumi.Input; + name?: pulumi.Input; namePlain?: pulumiRandom.RandomPet; nameRequired: pulumi.Input; - stringValue?: pulumi.Input; + stringValue?: pulumi.Input; stringValuePlain?: string; stringValueRequired: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-methods-schema/nodejs/types/input.ts b/pkg/codegen/internal/test/testdata/simple-methods-schema/nodejs/types/input.ts index e144ff619..69ef1e106 100644 --- a/pkg/codegen/internal/test/testdata/simple-methods-schema/nodejs/types/input.ts +++ b/pkg/codegen/internal/test/testdata/simple-methods-schema/nodejs/types/input.ts @@ -11,7 +11,7 @@ export namespace nested { } export interface BazArgs { - hello?: pulumi.Input; - world?: pulumi.Input; + hello?: pulumi.Input; + world?: pulumi.Input; } } diff --git a/pkg/codegen/internal/test/testdata/simple-plain-schema-with-root-package/nodejs/component.ts b/pkg/codegen/internal/test/testdata/simple-plain-schema-with-root-package/nodejs/component.ts index 727d54c2d..73ee16aec 100644 --- a/pkg/codegen/internal/test/testdata/simple-plain-schema-with-root-package/nodejs/component.ts +++ b/pkg/codegen/internal/test/testdata/simple-plain-schema-with-root-package/nodejs/component.ts @@ -89,5 +89,5 @@ export interface ComponentArgs { d?: number; e: string; f?: string; - foo?: pulumi.Input; + foo?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-plain-schema/nodejs/component.ts b/pkg/codegen/internal/test/testdata/simple-plain-schema/nodejs/component.ts index 21e5e7957..c639a9215 100644 --- a/pkg/codegen/internal/test/testdata/simple-plain-schema/nodejs/component.ts +++ b/pkg/codegen/internal/test/testdata/simple-plain-schema/nodejs/component.ts @@ -91,5 +91,5 @@ export interface ComponentArgs { d?: number; e: string; f?: string; - foo?: pulumi.Input; + foo?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-resource-schema-custom-pypackage-name/nodejs/argFunction.ts b/pkg/codegen/internal/test/testdata/simple-resource-schema-custom-pypackage-name/nodejs/argFunction.ts index fee6970d5..0b8997578 100644 --- a/pkg/codegen/internal/test/testdata/simple-resource-schema-custom-pypackage-name/nodejs/argFunction.ts +++ b/pkg/codegen/internal/test/testdata/simple-resource-schema-custom-pypackage-name/nodejs/argFunction.ts @@ -33,5 +33,5 @@ export function argFunctionOutput(args?: ArgFunctionOutputArgs, opts?: pulumi.In } export interface ArgFunctionOutputArgs { - arg1?: pulumi.Input; + arg1?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-resource-schema-custom-pypackage-name/nodejs/otherResource.ts b/pkg/codegen/internal/test/testdata/simple-resource-schema-custom-pypackage-name/nodejs/otherResource.ts index ad157d4a9..a84662da4 100644 --- a/pkg/codegen/internal/test/testdata/simple-resource-schema-custom-pypackage-name/nodejs/otherResource.ts +++ b/pkg/codegen/internal/test/testdata/simple-resource-schema-custom-pypackage-name/nodejs/otherResource.ts @@ -49,5 +49,5 @@ export class OtherResource extends pulumi.ComponentResource { * The set of arguments for constructing a OtherResource resource. */ export interface OtherResourceArgs { - foo?: pulumi.Input; + foo?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-resource-schema-custom-pypackage-name/nodejs/resource.ts b/pkg/codegen/internal/test/testdata/simple-resource-schema-custom-pypackage-name/nodejs/resource.ts index e94097d4d..7052b1d7d 100644 --- a/pkg/codegen/internal/test/testdata/simple-resource-schema-custom-pypackage-name/nodejs/resource.ts +++ b/pkg/codegen/internal/test/testdata/simple-resource-schema-custom-pypackage-name/nodejs/resource.ts @@ -59,5 +59,5 @@ export class Resource extends pulumi.CustomResource { * The set of arguments for constructing a Resource resource. */ export interface ResourceArgs { - bar?: pulumi.Input; + bar?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/argFunction.ts b/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/argFunction.ts index fee6970d5..0b8997578 100644 --- a/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/argFunction.ts +++ b/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/argFunction.ts @@ -33,5 +33,5 @@ export function argFunctionOutput(args?: ArgFunctionOutputArgs, opts?: pulumi.In } export interface ArgFunctionOutputArgs { - arg1?: pulumi.Input; + arg1?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/otherResource.ts b/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/otherResource.ts index ad157d4a9..a84662da4 100644 --- a/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/otherResource.ts +++ b/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/otherResource.ts @@ -49,5 +49,5 @@ export class OtherResource extends pulumi.ComponentResource { * The set of arguments for constructing a OtherResource resource. */ export interface OtherResourceArgs { - foo?: pulumi.Input; + foo?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/resource.ts b/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/resource.ts index 8acb090c1..ffcd5d993 100644 --- a/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/resource.ts +++ b/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/resource.ts @@ -61,5 +61,5 @@ export class Resource extends pulumi.CustomResource { * The set of arguments for constructing a Resource resource. */ export interface ResourceArgs { - bar?: pulumi.Input; + bar?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/typeUses.ts b/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/typeUses.ts index 9f76fd868..c9b4de490 100644 --- a/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/typeUses.ts +++ b/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/typeUses.ts @@ -68,7 +68,7 @@ export class TypeUses extends pulumi.CustomResource { * The set of arguments for constructing a TypeUses resource. */ export interface TypeUsesArgs { - bar?: pulumi.Input; - baz?: pulumi.Input; - foo?: pulumi.Input; + bar?: pulumi.Input; + baz?: pulumi.Input; + foo?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/types/input.ts b/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/types/input.ts index ce174713d..8a3605fad 100644 --- a/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/types/input.ts +++ b/pkg/codegen/internal/test/testdata/simple-resource-schema/nodejs/types/input.ts @@ -7,28 +7,28 @@ import { input as inputs, output as outputs } from "../types"; import {Resource} from ".."; export interface ConfigMapArgs { - config?: pulumi.Input; + config?: pulumi.Input; } export interface ObjectArgs { - bar?: pulumi.Input; - configs?: pulumi.Input[]>; - foo?: pulumi.Input; + bar?: pulumi.Input; + configs?: pulumi.Input[] | undefined>; + foo?: pulumi.Input; /** * List of lists of other objects */ - others?: pulumi.Input[]>[]>; + others?: pulumi.Input[]>[] | undefined>; /** * Mapping from string to list of some other object */ - stillOthers?: pulumi.Input<{[key: string]: pulumi.Input[]>}>; + stillOthers?: pulumi.Input<{[key: string]: pulumi.Input[]>} | undefined>; } export interface ObjectWithNodeOptionalInputsArgs { - bar?: pulumi.Input; - foo?: pulumi.Input; + bar?: pulumi.Input; + foo?: pulumi.Input; } export interface SomeOtherObjectArgs { - baz?: pulumi.Input; + baz?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/argFunction.ts b/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/argFunction.ts index fee6970d5..0b8997578 100644 --- a/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/argFunction.ts +++ b/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/argFunction.ts @@ -33,5 +33,5 @@ export function argFunctionOutput(args?: ArgFunctionOutputArgs, opts?: pulumi.In } export interface ArgFunctionOutputArgs { - arg1?: pulumi.Input; + arg1?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/otherResource.ts b/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/otherResource.ts index 58de90c93..fab1e6679 100644 --- a/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/otherResource.ts +++ b/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/otherResource.ts @@ -51,5 +51,5 @@ export class OtherResource extends pulumi.ComponentResource { */ export interface OtherResourceArgs { bar?: pulumi.Input[]; - foo?: pulumi.Input; + foo?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/resource.ts b/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/resource.ts index 8acb090c1..ffcd5d993 100644 --- a/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/resource.ts +++ b/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/resource.ts @@ -61,5 +61,5 @@ export class Resource extends pulumi.CustomResource { * The set of arguments for constructing a Resource resource. */ export interface ResourceArgs { - bar?: pulumi.Input; + bar?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/typeUses.ts b/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/typeUses.ts index fea9057d7..dbfbcfc14 100644 --- a/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/typeUses.ts +++ b/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/typeUses.ts @@ -71,8 +71,8 @@ export class TypeUses extends pulumi.CustomResource { * The set of arguments for constructing a TypeUses resource. */ export interface TypeUsesArgs { - bar?: pulumi.Input; - baz?: pulumi.Input; - foo?: pulumi.Input; - qux?: pulumi.Input; + bar?: pulumi.Input; + baz?: pulumi.Input; + foo?: pulumi.Input; + qux?: pulumi.Input; } diff --git a/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/types/input.ts b/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/types/input.ts index 0ca71d478..95e034370 100644 --- a/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/types/input.ts +++ b/pkg/codegen/internal/test/testdata/simple-yaml-schema/nodejs/types/input.ts @@ -7,28 +7,28 @@ import { input as inputs, output as outputs, enums } from "../types"; import {Resource} from ".."; export interface ConfigMapArgs { - config?: pulumi.Input; + config?: pulumi.Input; } export interface ObjectArgs { - bar?: pulumi.Input; - configs?: pulumi.Input[]>; - foo?: pulumi.Input; + bar?: pulumi.Input; + configs?: pulumi.Input[] | undefined>; + foo?: pulumi.Input; /** * List of lists of other objects */ - others?: pulumi.Input[]>[]>; + others?: pulumi.Input[]>[] | undefined>; /** * Mapping from string to list of some other object */ - stillOthers?: pulumi.Input<{[key: string]: pulumi.Input[]>}>; + stillOthers?: pulumi.Input<{[key: string]: pulumi.Input[]>} | undefined>; } export interface ObjectWithNodeOptionalInputsArgs { - bar?: pulumi.Input; - foo?: pulumi.Input; + bar?: pulumi.Input; + foo?: pulumi.Input; } export interface SomeOtherObjectArgs { - baz?: pulumi.Input; + baz?: pulumi.Input; } diff --git a/pkg/codegen/internal/tstypes/tstypes.go b/pkg/codegen/internal/tstypes/tstypes.go index d0ca9a5f9..49e9e29c6 100644 --- a/pkg/codegen/internal/tstypes/tstypes.go +++ b/pkg/codegen/internal/tstypes/tstypes.go @@ -68,6 +68,14 @@ func Union(t ...TypeAst) TypeAst { return &unionType{t[0], t[1], t[2:]} } +// IsUnion returns true if the AST node is a union. +func IsUnion(t TypeAst) ([]TypeAst, bool) { + if union, ok := t.(*unionType); ok { + return union.all(), true + } + return nil, false +} + // Normalizes by unnesting unions `A | (B | C) => A | B | C`. func Normalize(ast TypeAst) TypeAst { return transform(ast, func(t TypeAst) TypeAst { diff --git a/pkg/codegen/nodejs/gen.go b/pkg/codegen/nodejs/gen.go index 0bfcb4a2a..e516da3c0 100644 --- a/pkg/codegen/nodejs/gen.go +++ b/pkg/codegen/nodejs/gen.go @@ -432,13 +432,15 @@ func (mod *modContext) genPlainType(w io.Writer, name, comment string, propertie prefix = "readonly " } - sigil, propertyType := "", p.Type - if !p.IsRequired() { - sigil, propertyType = "?", codegen.RequiredType(p) + sigil, typ := "", mod.typeAst(p.Type, input, p.ConstValue) + if types, ok := tstypes.IsUnion(typ); ok { + if id, ok := tstypes.IsIdentifier(types[len(types)-1]); ok && id == "undefined" { + sigil, typ = "?", tstypes.Union(types[:len(types)-1]...) + } } - typ := mod.typeString(propertyType, input, p.ConstValue) - fmt.Fprintf(w, "%s %s%s%s: %s;\n", indent, prefix, p.Name, sigil, typ) + typLit := tstypes.TypeLiteral(tstypes.Normalize(typ)) + fmt.Fprintf(w, "%s %s%s%s: %s;\n", indent, prefix, p.Name, sigil, typLit) } fmt.Fprintf(w, "%s}\n", indent) }