jsii icon indicating copy to clipboard operation
jsii copied to clipboard

Unable to resolve unexported referenced type when moved

Open njlynch opened this issue 3 years ago • 9 comments

:bug: Bug Report

Affected Languages

  • [X] TypeScript or Javascript
  • [ ] Python
  • [ ] Java
  • [ ] .NET (C#, F#, ...)

General Information

  • JSII Version: 1.12.0
  • Platform: Darwin - 18.7.0 Darwin Kernel Version 18.7.0: Thu Jun 18 20:50:10 PDT 2020; root:xnu-4903.278.43~1/RELEASE_X86_64 x86_64

What is the problem?

When refactoring unexported (supporting) types from inline in the same file as exported types to another (unexported) file, jsii loses the ability to resolve the types.

This works

index.ts

export * from './has-unexported-base';

has-unexported-base.ts

interface MyExportedPropsBase {  // Not exported
  readonly myProperty: number;
}
export interface MyExportedProps extends MyExportedPropsBase { // Exported
  readonly mySecondProperty: number;
}

This doesn't

index.ts

export * from './has-unexported-base';

has-unexported-base.ts

import { MyExportedPropsBase } from './private/unexported-base';
export interface MyExportedProps extends MyExportedPropsBase {
  readonly mySecondProperty: number;
}

private/unexported-base.ts

export interface MyExportedPropsBase {  // Exported here, but not in `index.ts`
  readonly myProperty: number;
}

Verbose Log

[2020-09-04T11:58:30.924] [ERROR] jsii/compiler - Type model errors prevented the JSII assembly from being created
error JSII9002: Unable to resolve type "jsii-calc.MyExportedPropsBase". It may be @iternal or not exported from the module's entry point (as configured in "package.json" as "main").
lib/has-unexported-base.ts:3:1 - error JSII9002: Unable to resolve type "jsii-calc.MyExportedPropsBase". It may be @iternal or not exported from the module's entry point (as configured in "package.json" as "main").

3 export interface MyExportedProps extends MyExportedPropsBase {
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4   readonly mySecondProperty: number;
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 }
Verbose output

[2020-09-04T13:11:18.556] [INFO] jsii/assembler - Registering JSII enum: jsii-calc.submodule.child.Goodness
[2020-09-04T13:11:18.560] [INFO] jsii/assembler - Registering JSII enum: jsii-calc.submodule.child.Awesomeness
[2020-09-04T13:11:18.560] [INFO] jsii/assembler - Registering JSII enum: jsii-calc.submodule.child.SomeEnum
[2020-09-04T13:11:18.561] [INFO] jsii/assembler - Registering JSII enum: jsii-calc.AllTypesEnum
[2020-09-04T13:11:18.561] [INFO] jsii/assembler - Registering JSII enum: jsii-calc.StringEnum
[2020-09-04T13:11:18.562] [INFO] jsii/assembler - Registering JSII enum: jsii-calc.SingletonStringEnum
[2020-09-04T13:11:18.562] [INFO] jsii/assembler - Registering JSII enum: jsii-calc.SingletonIntEnum
[2020-09-04T13:11:18.562] [INFO] jsii/assembler - Registering JSII enum: jsii-calc.ExperimentalEnum
[2020-09-04T13:11:18.563] [INFO] jsii/assembler - Registering JSII enum: jsii-calc.StableEnum
[2020-09-04T13:11:18.563] [INFO] jsii/assembler - Registering JSII enum: jsii-calc.DeprecatedEnum
[2020-09-04T13:11:18.563] [INFO] jsii/assembler - Registering JSII enum: jsii-calc.ExternalEnum
[2020-09-04T13:11:18.568] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ClassWithDocs
[2020-09-04T13:11:18.569] [INFO] jsii/assembler - Registering JSII class: jsii-calc.BaseJsii976
[2020-09-04T13:11:18.587] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IJsii487External
[2020-09-04T13:11:18.588] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IJsii487External2
[2020-09-04T13:11:18.588] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IJsii496
[2020-09-04T13:11:18.605] [INFO] jsii/assembler - Registering JSII class: jsii-calc.DerivedClassHasNoProperties.Base
[2020-09-04T13:11:18.606] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Thrower
[2020-09-04T13:11:18.606] [INFO] jsii/assembler - Registering JSII class: jsii-calc.AbstractClassBase
[2020-09-04T13:11:18.606] [INFO] jsii/assembler - Registering JSII class: jsii-calc.PublicClass
[2020-09-04T13:11:18.607] [INFO] jsii/assembler - Registering JSII class: jsii-calc.StripInternal
[2020-09-04T13:11:18.607] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Implementation
[2020-09-04T13:11:18.608] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Old
[2020-09-04T13:11:18.610] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.submodule.child.Structure
[2020-09-04T13:11:18.611] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.submodule.nested_submodule.deeplyNested.INamespaced
[2020-09-04T13:11:18.611] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.PythonSelf.StructWithSelf
[2020-09-04T13:11:18.611] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.InterfaceInNamespaceOnlyInterface.Hello
[2020-09-04T13:11:18.611] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.InterfaceInNamespaceIncludesClasses.Hello
[2020-09-04T13:11:18.612] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IInterfaceImplementedByAbstractClass
[2020-09-04T13:11:18.612] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IMutableObjectLiteral
[2020-09-04T13:11:18.612] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IPrivatelyImplemented
[2020-09-04T13:11:18.615] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IInterfaceWithInternal
[2020-09-04T13:11:18.615] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IAnotherPublicInterface
[2020-09-04T13:11:18.616] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.DiamondInheritanceBaseLevelStruct
[2020-09-04T13:11:18.616] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IBell
[2020-09-04T13:11:18.616] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.NestedStruct
[2020-09-04T13:11:18.616] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IReturnJsii976
[2020-09-04T13:11:18.617] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.ParentStruct982
[2020-09-04T13:11:18.617] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.ExperimentalStruct
[2020-09-04T13:11:18.617] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.StableStruct
[2020-09-04T13:11:18.618] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.DeprecatedStruct
[2020-09-04T13:11:18.618] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.ExternalStruct
[2020-09-04T13:11:18.621] [INFO] jsii/assembler - Registering JSII class: jsii-calc.UseBundledDependency
[2020-09-04T13:11:18.622] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ImplementInternalInterface
[2020-09-04T13:11:18.622] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ImplementsPrivateInterface
[2020-09-04T13:11:18.622] [INFO] jsii/assembler - Registering JSII class: jsii-calc.UmaskCheck
[2020-09-04T13:11:18.624] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IRandomNumberGenerator
[2020-09-04T13:11:18.624] [INFO] jsii/assembler - Registering JSII class: jsii-calc.PropertyNamedProperty
[2020-09-04T13:11:18.625] [INFO] jsii/assembler - Registering JSII class: jsii-calc.JSObjectLiteralToNativeClass
[2020-09-04T13:11:18.627] [INFO] jsii/assembler - Registering JSII class: jsii-calc.InterfaceInNamespaceIncludesClasses.Foo
[2020-09-04T13:11:18.628] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ExportedBaseClass
[2020-09-04T13:11:18.628] [INFO] jsii/assembler - Registering JSII class: jsii-calc.JsiiAgent
[2020-09-04T13:11:18.628] [INFO] jsii/assembler - Registering JSII class: jsii-calc.AugmentableClass
[2020-09-04T13:11:18.629] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IPublicInterface
[2020-09-04T13:11:18.629] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IPublicInterface2
[2020-09-04T13:11:18.630] [INFO] jsii/assembler - Registering JSII class: jsii-calc.WithPrivatePropertyInConstructor
[2020-09-04T13:11:18.632] [INFO] jsii/assembler - Registering JSII class: jsii-calc.SingletonString
[2020-09-04T13:11:18.633] [INFO] jsii/assembler - Registering JSII class: jsii-calc.SingletonInt
[2020-09-04T13:11:18.633] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.SmellyStruct
[2020-09-04T13:11:18.634] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IInterfaceWithProperties
[2020-09-04T13:11:18.634] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IInterfaceWithMethods
[2020-09-04T13:11:18.634] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.ExtendsInternalInterface
[2020-09-04T13:11:18.635] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.OptionalStruct
[2020-09-04T13:11:18.635] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.Greetee
[2020-09-04T13:11:18.635] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IJSII417PublicBaseOfBase
[2020-09-04T13:11:18.636] [INFO] jsii/assembler - Registering JSII class: jsii-calc.MethodNamedProperty
[2020-09-04T13:11:18.636] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.PythonSelf.IInterfaceWithSelf
[2020-09-04T13:11:18.637] [INFO] jsii/assembler - Registering JSII class: jsii-calc.DoNotRecognizeAnyAsOptional
[2020-09-04T13:11:18.641] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IInterfaceWithOptionalMethodArguments
[2020-09-04T13:11:18.641] [INFO] jsii/assembler - Registering JSII class: jsii-calc.VoidCallback
[2020-09-04T13:11:18.642] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IAnonymouslyImplementMe
[2020-09-04T13:11:18.643] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IObjectWithProperty
[2020-09-04T13:11:18.644] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IOptionalMethod
[2020-09-04T13:11:18.646] [INFO] jsii/assembler - Registering JSII class: jsii-calc.StaticContext
[2020-09-04T13:11:18.648] [INFO] jsii/assembler - Registering JSII class: jsii-calc.DontComplainAboutVariadicAfterOptional
[2020-09-04T13:11:18.649] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.SecondLevelStruct
[2020-09-04T13:11:18.649] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.SupportsNiceJavaBuilderProps
[2020-09-04T13:11:18.650] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IExperimentalInterface
[2020-09-04T13:11:18.650] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IStableInterface
[2020-09-04T13:11:18.651] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IDeprecatedInterface
[2020-09-04T13:11:18.651] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IExternalInterface
[2020-09-04T13:11:18.652] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.NullShouldBeTreatedAsUndefinedData
[2020-09-04T13:11:18.652] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IExtendsPrivateInterface
[2020-09-04T13:11:18.653] [INFO] jsii/assembler - Registering JSII class: jsii-calc.DynamicPropertyBearer
[2020-09-04T13:11:18.656] [INFO] jsii/assembler - Registering JSII class: jsii-calc.BurriedAnonymousObject
[2020-09-04T13:11:18.658] [INFO] jsii/assembler - Registering JSII class: jsii-calc.PythonSelf.ClassWithSelf
[2020-09-04T13:11:18.658] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ClassWithJavaReservedWords
[2020-09-04T13:11:18.659] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.CalculatorProps
[2020-09-04T13:11:18.659] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.EraseUndefinedHashValuesOptions
[2020-09-04T13:11:18.660] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.StructParameterType
[2020-09-04T13:11:18.661] [INFO] jsii/assembler - Registering JSII class: jsii-calc.DoNotOverridePrivates
[2020-09-04T13:11:18.664] [INFO] jsii/assembler - Registering JSII class: jsii-calc.AbstractSuite
[2020-09-04T13:11:18.665] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.StructA
[2020-09-04T13:11:18.667] [INFO] jsii/assembler - Registering JSII class: jsii-calc.OverridableProtectedMember
[2020-09-04T13:11:18.667] [INFO] jsii/assembler - Registering JSII class: jsii-calc.DisappointingCollectionSource
[2020-09-04T13:11:18.668] [INFO] jsii/assembler - Registering JSII class: jsii-calc.NodeStandardLibrary
[2020-09-04T13:11:18.668] [INFO] jsii/assembler - Registering JSII class: jsii-calc.RuntimeTypeChecking
[2020-09-04T13:11:18.669] [INFO] jsii/assembler - Registering JSII class: jsii-calc.VariadicMethod
[2020-09-04T13:11:18.669] [INFO] jsii/assembler - Registering JSII class: jsii-calc.AllowedMethodNames
[2020-09-04T13:11:18.670] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ExperimentalClass
[2020-09-04T13:11:18.670] [INFO] jsii/assembler - Registering JSII class: jsii-calc.StableClass
[2020-09-04T13:11:18.670] [INFO] jsii/assembler - Registering JSII class: jsii-calc.DeprecatedClass
[2020-09-04T13:11:18.671] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ExternalClass
[2020-09-04T13:11:18.672] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.StructWithJavaReservedWords
[2020-09-04T13:11:18.673] [INFO] jsii/assembler - Registering JSII class: jsii-calc.OptionalConstructorArgument
[2020-09-04T13:11:18.673] [INFO] jsii/assembler - Registering JSII class: jsii-calc.DefaultedConstructorArgument
[2020-09-04T13:11:18.678] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.LoadBalancedFargateServiceProps
[2020-09-04T13:11:18.679] [INFO] jsii/assembler - Registering JSII class: jsii-calc.VirtualMethodPlayground
[2020-09-04T13:11:18.680] [INFO] jsii/assembler - Registering JSII class: jsii-calc.AsyncVirtualMethods
[2020-09-04T13:11:18.682] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ClassWithCollections
[2020-09-04T13:11:18.684] [INFO] jsii/assembler - Registering JSII class: jsii-calc.JsonFormatter
[2020-09-04T13:11:18.685] [INFO] jsii/assembler - Registering JSII class: jsii-calc.SyncVirtualMethods
[2020-09-04T13:11:18.686] [INFO] jsii/assembler - Registering JSII class: jsii-calc.PythonReservedWords
[2020-09-04T13:11:18.689] [INFO] jsii/assembler - Registering JSII class: jsii-calc.JavaReservedWords
[2020-09-04T13:11:18.697] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IFriendlier
[2020-09-04T13:11:18.698] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Add
[2020-09-04T13:11:18.701] [INFO] jsii/assembler - Registering JSII class: jsii-calc.DerivedClassHasNoProperties.Derived
[2020-09-04T13:11:18.702] [INFO] jsii/assembler - Registering JSII class: jsii-calc.DoubleTrouble
[2020-09-04T13:11:18.704] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.ImplictBaseOfBase
[2020-09-04T13:11:18.705] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IInterfaceWithPropertiesExtension
[2020-09-04T13:11:18.706] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IInterfaceThatShouldNotBeADataType
[2020-09-04T13:11:18.707] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ImplementsInterfaceWithInternal
[2020-09-04T13:11:18.707] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ImplementsInterfaceWithInternalSubclass
[2020-09-04T13:11:18.708] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.INonInternalInterface
[2020-09-04T13:11:18.709] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.DiamondInheritanceFirstMidLevelStruct
[2020-09-04T13:11:18.709] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.DiamondInheritanceSecondMidLevelStruct
[2020-09-04T13:11:18.710] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IFriendlyRandomGenerator
[2020-09-04T13:11:18.711] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ClassThatImplementsTheInternalInterface
[2020-09-04T13:11:18.712] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ClassThatImplementsThePrivateInterface
[2020-09-04T13:11:18.714] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Bell
[2020-09-04T13:11:18.714] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.ChildStruct982
[2020-09-04T13:11:18.716] [INFO] jsii/assembler - Registering JSII class: jsii-calc.DynamicPropertyBearerChild
[2020-09-04T13:11:18.717] [INFO] jsii/assembler - Registering JSII class: jsii-calc.JSII417Derived
[2020-09-04T13:11:18.717] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IJSII417Derived
[2020-09-04T13:11:18.718] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.DiamondInheritanceTopLevelStruct
[2020-09-04T13:11:18.718] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Jsii487Derived
[2020-09-04T13:11:18.719] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Polymorphism
[2020-09-04T13:11:18.720] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Jsii496Derived
[2020-09-04T13:11:18.721] [INFO] jsii/assembler - Registering JSII class: jsii-calc.GreetingAugmenter
[2020-09-04T13:11:18.722] [INFO] jsii/assembler - Registering JSII class: jsii-calc.OverrideReturnsObject
[2020-09-04T13:11:18.722] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ReturnsPrivateImplementationOfInterface
[2020-09-04T13:11:18.723] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ClassWithMutableObjectLiteralProperty
[2020-09-04T13:11:18.724] [INFO] jsii/assembler - Registering JSII class: jsii-calc.EraseUndefinedHashValues
[2020-09-04T13:11:18.725] [INFO] jsii/assembler - Registering JSII class: jsii-calc.PartiallyInitializedThisConsumer
[2020-09-04T13:11:18.726] [INFO] jsii/assembler - Registering JSII class: jsii-calc.DataRenderer
[2020-09-04T13:11:18.727] [INFO] jsii/assembler - Registering JSII class: jsii-calc.RootStructValidator
[2020-09-04T13:11:18.728] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ConstructorPassesThisOut
[2020-09-04T13:11:18.728] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IConcreteBellRinger
[2020-09-04T13:11:18.729] [INFO] jsii/assembler - Registering JSII class: jsii-calc.DocumentedClass
[2020-09-04T13:11:18.730] [INFO] jsii/assembler - Registering JSII class: jsii-calc.JSObjectLiteralToNative
[2020-09-04T13:11:18.730] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IBellRinger
[2020-09-04T13:11:18.731] [INFO] jsii/assembler - Registering JSII class: jsii-calc.UseCalcBase
[2020-09-04T13:11:18.732] [INFO] jsii/assembler - Registering JSII class: jsii-calc.SomeTypeJsii976
[2020-09-04T13:11:18.733] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ObjectWithPropertyProvider
[2020-09-04T13:11:18.734] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Isomorphism
[2020-09-04T13:11:18.734] [INFO] jsii/assembler - Registering JSII class: jsii-calc.JSII417PublicBaseOfBase
[2020-09-04T13:11:18.735] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IStructReturningDelegate
[2020-09-04T13:11:18.736] [INFO] jsii/assembler - Registering JSII class: jsii-calc.OptionalArgumentInvoker
[2020-09-04T13:11:18.736] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.RootStruct
[2020-09-04T13:11:18.736] [INFO] jsii/assembler - Registering JSII class: jsii-calc.InterfacesMaker
[2020-09-04T13:11:18.737] [INFO] jsii/assembler - Registering JSII class: jsii-calc.OptionalStructConsumer
[2020-09-04T13:11:18.737] [INFO] jsii/assembler - Registering JSII class: jsii-calc.NullShouldBeTreatedAsUndefined
[2020-09-04T13:11:18.738] [INFO] jsii/assembler - Registering JSII class: jsii-calc.SupportsNiceJavaBuilderWithRequiredProps
[2020-09-04T13:11:18.739] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.TopLevelStruct
[2020-09-04T13:11:18.740] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.StructB
[2020-09-04T13:11:18.740] [INFO] jsii/assembler - Registering JSII class: jsii-calc.VariadicInvoker
[2020-09-04T13:11:18.740] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.UnionProperties
[2020-09-04T13:11:18.745] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.MyExportedProps
[2020-09-04T13:11:18.746] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.submodule.back_references.MyClassReference
[2020-09-04T13:11:18.746] [INFO] jsii/assembler - Registering JSII class: jsii-calc.NestedClassInstance
[2020-09-04T13:11:18.747] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.submodule.child.KwargsProps
[2020-09-04T13:11:18.748] [INFO] jsii/assembler - Registering JSII class: jsii-calc.submodule.isolated.Kwargs
[2020-09-04T13:11:18.748] [INFO] jsii/assembler - Registering JSII class: jsii-calc.submodule.child.InnerClass
[2020-09-04T13:11:18.748] [INFO] jsii/assembler - Registering JSII class: jsii-calc.submodule.child.OuterClass
[2020-09-04T13:11:18.749] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.submodule.child.SomeStruct
[2020-09-04T13:11:18.755] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Multiply
[2020-09-04T13:11:18.757] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Negate
[2020-09-04T13:11:18.758] [INFO] jsii/assembler - Registering JSII class: jsii-calc.AbstractClass
[2020-09-04T13:11:18.762] [INFO] jsii/assembler - Registering JSII class: jsii-calc.InbetweenClass
[2020-09-04T13:11:18.762] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ClassWithPrivateConstructorAndAutomaticProperties
[2020-09-04T13:11:18.763] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ObjectRefsInCollections
[2020-09-04T13:11:18.764] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ConsumersOfThisCrazyTypeSystem
[2020-09-04T13:11:18.766] [INFO] jsii/assembler - Registering JSII class: jsii-calc.PythonSelf.ClassWithSelfKwarg
[2020-09-04T13:11:18.767] [INFO] jsii/assembler - Registering JSII class: jsii-calc.EnumDispenser
[2020-09-04T13:11:18.767] [INFO] jsii/assembler - Registering JSII class: jsii-calc.JSObjectLiteralForInterface
[2020-09-04T13:11:18.768] [INFO] jsii/assembler - Registering JSII class: jsii-calc.SingleInstanceTwoTypes
[2020-09-04T13:11:18.769] [INFO] jsii/assembler - Registering JSII class: jsii-calc.SupportsNiceJavaBuilder
[2020-09-04T13:11:18.770] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ConsumePureInterface
[2020-09-04T13:11:18.771] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IAnonymousImplementationProvider
[2020-09-04T13:11:18.771] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Demonstrate982
[2020-09-04T13:11:18.772] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.IReturnsNumber
[2020-09-04T13:11:18.774] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Statics
[2020-09-04T13:11:18.778] [INFO] jsii/assembler - Registering JSII class: jsii-calc.submodule.nested_submodule.Namespaced
[2020-09-04T13:11:18.781] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Sum
[2020-09-04T13:11:18.781] [INFO] jsii/assembler - Registering JSII class: jsii-calc.UnaryOperation
[2020-09-04T13:11:18.782] [INFO] jsii/assembler - Registering JSII class: jsii-calc.AnonymousImplementationProvider
[2020-09-04T13:11:18.783] [INFO] jsii/assembler - Registering JSII class: jsii-calc.composition.CompositeOperation
[2020-09-04T13:11:18.783] [INFO] jsii/assembler - Registering JSII enum: jsii-calc.composition.CompositeOperation.CompositionStringStyle
[2020-09-04T13:11:18.784] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.DerivedStruct
[2020-09-04T13:11:18.784] [INFO] jsii/assembler - Registering JSII class: jsii-calc.StructPassing
[2020-09-04T13:11:18.786] [INFO] jsii/assembler - Registering JSII class: jsii-calc.AbstractClassReturner
[2020-09-04T13:11:18.789] [INFO] jsii/assembler - Registering JSII class: jsii-calc.UsesInterfaceWithProperties
[2020-09-04T13:11:18.790] [INFO] jsii/assembler - Registering JSII class: jsii-calc.NumberGenerator
[2020-09-04T13:11:18.791] [INFO] jsii/assembler - Registering JSII interface: jsii-calc.ConfusingToJacksonStruct
[2020-09-04T13:11:18.797] [INFO] jsii/assembler - Registering JSII class: jsii-calc.UpcasingReflectable
[2020-09-04T13:11:18.802] [INFO] jsii/assembler - Registering JSII class: jsii-calc.StructUnionConsumer
[2020-09-04T13:11:18.804] [INFO] jsii/assembler - Registering JSII class: jsii-calc.AmbiguousParameters
[2020-09-04T13:11:18.805] [INFO] jsii/assembler - Registering JSII class: jsii-calc.InterfaceCollections
[2020-09-04T13:11:18.811] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ReferenceEnumFromScopedPackage
[2020-09-04T13:11:18.811] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ConfusingToJackson
[2020-09-04T13:11:18.813] [INFO] jsii/assembler - Registering JSII class: jsii-calc.GiveMeStructs
[2020-09-04T13:11:18.814] [INFO] jsii/assembler - Registering JSII class: jsii-calc.BinaryOperation
[2020-09-04T13:11:18.814] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Power
[2020-09-04T13:11:18.816] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Constructors
[2020-09-04T13:11:18.817] [INFO] jsii/assembler - Registering JSII class: jsii-calc.submodule.MyClass
[2020-09-04T13:11:18.819] [INFO] jsii/assembler - Registering JSII class: jsii-calc.ConsumerCanRingBell
[2020-09-04T13:11:18.821] [INFO] jsii/assembler - Registering JSII class: jsii-calc.Calculator
[2020-09-04T13:11:18.824] [INFO] jsii/assembler - Registering JSII class: jsii-calc.AllTypes

[2020-09-04T13:09:35.501] [ERROR] jsii/compiler - Type model errors prevented the JSII assembly from being created
error JSII9002: Unable to resolve type "jsii-calc.MyExportedPropsBase". It may be @iternal or not exported from the module's entry point (as configured in "package.json" as "main").
lib/has-unexported-base.ts:3:1 - error JSII9002: Unable to resolve type "jsii-calc.MyExportedPropsBase". It may be @iternal or not exported from the module's entry point (as configured in "package.json" as "main").

3 export interface MyExportedProps extends MyExportedPropsBase {
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4   readonly mySecondProperty: number;
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 }
  ~

njlynch avatar Sep 04 '20 11:09 njlynch

Also, just noticed the typo in the error message above: It may be @iternal or not exported...

https://github.com/aws/jsii/blob/master/packages/jsii/lib/jsii-diagnostic.ts#L710

Worth fixing that at the same time? :D

njlynch avatar Sep 04 '20 11:09 njlynch

Your un-exported (from the package) type is exported from the module (i.e: file) that defines it. It must be annotated with @internal as you are now required to demonstrate that you are intentionally not forwarding it all the way to the root.

I guess it'd be sweet if we could have a warning that this non-@internal type isn't exported from the root, and that if this was intentional it should be annotated with @internal.

RomainMuller avatar Sep 14 '20 08:09 RomainMuller

Thanks for the clarification; I agree a more explicit warning in this case would be really useful.

njlynch avatar Sep 14 '20 10:09 njlynch

I guess it'd be sweet if we could have a warning that this non-@internal type isn't exported from the root, and that if this was intentional it should be annotated with @internal.

If we're going to that I'd like to combine this with other heuristics: that a type in a /private/ folder or with _underscore.ts filename should not be exported (and error if it is).

rix0rrr avatar Sep 14 '20 10:09 rix0rrr

One snag with the proposed workaround -- other consuming modules see the imports for the unexported classes/interfaces in the *.d.ts files, and fail to build.

See https://github.com/aws/aws-cdk/pull/10338 and the subsequent build failure.

Build log failure
@aws-cdk/aws-backup: $ cdk-build
@aws-cdk/aws-backup: [2020-09-14T11:42:48.164] [ERROR] jsii/compiler - Compilation errors prevented the JSII assembly from being created
@aws-cdk/aws-backup: ../aws-rds/lib/cluster.d.ts:7:10 - error TS2305: Module '"./private/cluster-internal"' has no exported member 'DatabaseClusterBaseProps'.
@aws-cdk/aws-backup: 7 import { DatabaseClusterBaseProps, DatabaseClusterNew } from './private/cluster-internal';
@aws-cdk/aws-backup:            ~~~~~~~~~~~~~~~~~~~~~~~~
@aws-cdk/aws-backup: ../aws-rds/lib/cluster.d.ts:7:36 - error TS2724: Module '"./private/cluster-internal"' has no exported member 'DatabaseClusterNew'. Did you mean 'DatabaseClusterBase'?
@aws-cdk/aws-backup: 7 import { DatabaseClusterBaseProps, DatabaseClusterNew } from './private/cluster-internal';
@aws-cdk/aws-backup:                                      ~~~~~~~~~~~~~~~~~~
@aws-cdk/aws-backup: Error: /Users/nlynch/cdk/aws-cdk/node_modules/jsii/bin/jsii --silence-warnings=reserved-word exited with error code 1
@aws-cdk/aws-backup: Build failed. Total time (5.4s) | /Users/nlynch/cdk/aws-cdk/node_modules/jsii/bin/jsii (5.2s) | cfn2ts (0.2s)

Note that the above build failures are for the aws-rds cluster.d.ts file, referenced from the aws-backup module. The aws-rds module itself builds, but can't be used by the other consuming modules.

njlynch avatar Sep 14 '20 10:09 njlynch

Yeah we need to not erase @internal from the .d.ts files (this is achieved by changing a typescript compiler option).

@rix0rrr: If we're going to that I'd like to combine this with other heuristics: that a type in a /private/ folder or with _underscore.ts filename should not be exported (and error if it is).

This would be a breaking change; and this looks too much like opinions forced on developers, which I'm not too favorable to.

RomainMuller avatar Oct 22 '20 09:10 RomainMuller

I tried to update one of my constructs to cdk v2 and apparently hit this issue(?). Is there anything I can do to work around this or is it even something I can workaround as a library user?

You can find full details of the error in this gist.

nikovirtala avatar Dec 05 '21 18:12 nikovirtala

I'm also getting this - i have a method that returns a CDK API Gateway class and JSII

` import {Annotations, CfnOutput, IAspect, Stack} from 'aws-cdk-lib'; import {aws_apigateway as api} from 'aws-cdk-lib'; import {aws_iam as iam} from 'aws-cdk-lib'; import {IConstruct} from 'constructs';

export class ApiGatewayHelpers { public static endpointConfiguration(stack: Stack, group?: string): api.EndpointConfiguration { const vpcInfo = VpcHelpers.lookupVpcInfo(Stack.of(stack), group) return {types: [api.EndpointType.PRIVATE], vpcEndpoints: [vpcInfo.apigwEndpointId]} } `

error JSII3002: Type "aws-cdk-lib.EndpointConfiguration" cannot be used as a return type because it is not exported from aws-cdk-lib

9 public static endpointConfiguration(stack: Stack, group?: string): api.EndpointConfiguration { ~~~~~~~~~~~~~~~~~~~~~

node_modules/aws-cdk-lib/aws-apigateway/lib/restapi.d.ts:626:1 626 export interface EndpointConfiguration { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 627 /** ~~~~~~~ ... 640 readonly vpcEndpoints?: IVpcEndpoint[]; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 641 } ~ The referenced type is declared here lib/api-gateway-helpers.ts:44:17 - error JSII3002: Type "aws-cdk-lib.PolicyDocument" cannot be used as a return type because it is not exported from aws-cdk-lib

nlongton avatar Dec 07 '21 10:12 nlongton

@nlongton - It sounds like you may be running into https://github.com/aws/aws-cdk/issues/17860. Can you leave a comment there as well?

njlynch avatar Dec 14 '21 17:12 njlynch