Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to resolve unexported referenced type when moved #1980

Open
1 of 4 tasks
njlynch opened this issue Sep 4, 2020 · 9 comments
Open
1 of 4 tasks

Unable to resolve unexported referenced type when moved #1980

njlynch opened this issue Sep 4, 2020 · 9 comments
Labels
bug This issue is a bug. effort/small Small work item – less than a day of effort language/typescript Related to Typescript code p2

Comments

@njlynch
Copy link
Contributor

njlynch commented Sep 4, 2020

🐛 Bug Report

Affected Languages

  • 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 njlynch added bug This issue is a bug. needs-triage This issue or PR still needs to be triaged. labels Sep 4, 2020
@njlynch
Copy link
Contributor Author

njlynch commented Sep 4, 2020

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

@SomayaB SomayaB added language/typescript Related to Typescript code and removed needs-triage This issue or PR still needs to be triaged. labels Sep 4, 2020
@RomainMuller
Copy link
Contributor

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 RomainMuller added p2 effort/small Small work item – less than a day of effort labels Sep 14, 2020
njlynch added a commit to aws/aws-cdk that referenced this issue Sep 14, 2020
See #10130 (review)
for original motivation.

Moves `DatabaseClusterBaseProps`, `DatabaseClusterBase`, `DatabaseClusterNew`,
and `ImportedDatabaseCluster` from `cluster.ts` to
`private/cluster-internal.ts`.

Note that `DatabaseClusterBase` was previously publicly exported; however, that
change has not yet been release, so as long as this is merged before the next
release this won't be a breaking change.

Originally, I thought this refactoring was blocked by
aws/jsii#1980
but thanks to a clarification, I realized I just needed to mark the private
classes as `@internal`.
njlynch added a commit to aws/aws-cdk that referenced this issue Sep 14, 2020
See #10130 (review)
for original motivation.

Moves `DatabaseClusterBaseProps`, `DatabaseClusterBase`, `DatabaseClusterNew`,
and `ImportedDatabaseCluster` from `cluster.ts` to
`private/cluster-internal.ts`.

Note that `DatabaseClusterBase` was previously publicly exported; however, that
change has not yet been release, so as long as this is merged before the next
release this won't be a breaking change.

Originally, I thought this refactoring was blocked by
aws/jsii#1980
but thanks to a clarification, I realized I just needed to mark the private
classes as `@internal`.
@njlynch
Copy link
Contributor Author

njlynch commented Sep 14, 2020

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

@rix0rrr
Copy link
Contributor

rix0rrr commented Sep 14, 2020

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).

@njlynch
Copy link
Contributor Author

njlynch commented Sep 14, 2020

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 aws/aws-cdk#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.

@RomainMuller
Copy link
Contributor

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 RomainMuller removed their assignment Jun 24, 2021
@nikovirtala
Copy link

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.

@nlongton
Copy link

nlongton commented Dec 7, 2021

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

@njlynch
Copy link
Contributor Author

njlynch commented Dec 14, 2021

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug This issue is a bug. effort/small Small work item – less than a day of effort language/typescript Related to Typescript code p2
Projects
None yet
Development

No branches or pull requests

6 participants