jsii 5.9.5-dev.1 → 5.9.5-dev.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -450,12 +450,12 @@ JsiiDiagnostic.JSII_5002_OVERRIDE_CHANGES_VISIBILITY = Code.error({
450
450
  name: 'language-compatibility/override-changes-visibility',
451
451
  });
452
452
  JsiiDiagnostic.JSII_5003_OVERRIDE_CHANGES_RETURN_TYPE = Code.error({
453
- code: 5003,
453
+ code: 5003, // allowed
454
454
  formatter: (newElement, action, newValue, oldValue) => `"${newElement}" changes the return type to "${newValue}" when ${action}. Change it to "${oldValue}"`,
455
455
  name: 'language-compatibility/override-changes-return-type',
456
456
  });
457
457
  JsiiDiagnostic.JSII_5004_OVERRIDE_CHANGES_PROP_TYPE = Code.error({
458
- code: 5004,
458
+ code: 5004, // allowed
459
459
  formatter: (newElement, action, newType, oldType) => `"${newElement}" changes the property type to "${spec.describeTypeReference(newType)}" when ${action}. Change it to "${spec.describeTypeReference(oldType)}"`,
460
460
  name: 'language-compatibility/override-changes-property-type',
461
461
  });
@@ -465,7 +465,7 @@ JsiiDiagnostic.JSII_5005_OVERRIDE_CHANGES_PARAM_COUNT = Code.error({
465
465
  name: 'language-compatibility/override-changes-param-count',
466
466
  });
467
467
  JsiiDiagnostic.JSII_5006_OVERRIDE_CHANGES_PARAM_TYPE = Code.error({
468
- code: 5006,
468
+ code: 5006, // tbd
469
469
  formatter: (newElement, action, newParam, oldParam) => `"${newElement}" changes the type of parameter "${newParam.name}" to ${spec.describeTypeReference(newParam.type)} when ${action}. Change it to ${spec.describeTypeReference(oldParam.type)}`,
470
470
  name: 'language-compatibility/override-changes-param-type',
471
471
  });
@@ -1 +1 @@
1
- {"version":3,"file":"jsii-diagnostic.js","sourceRoot":"","sources":["../src/jsii-diagnostic.ts"],"names":[],"mappings":"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","sourcesContent":["import * as spec from '@jsii/spec';\nimport { camel, constant, pascal } from 'case';\nimport * as ts from 'typescript';\n\nimport { TypeSystemHints } from './docs';\nimport { WARNINGSCODE_FILE_NAME } from './transforms/deprecation-warnings';\nimport { Violation } from './tsconfig/validator';\nimport { JSII_DIAGNOSTICS_CODE, _formatDiagnostic } from './utils';\n\n/**\n * Descriptors for all valid jsii diagnostic codes.\n *\n * The `category` or non-error codes can be updated, for example to treat\n * warnings as errors, or to suppress certain undesirable warnings.\n */\nexport class Code<T extends DiagnosticMessageFormatter = DiagnosticMessageFormatter> {\n /**\n * @internal\n */\n public static message<T extends DiagnosticMessageFormatter>({\n code,\n name,\n formatter,\n }: {\n code: number;\n formatter: T;\n name: string;\n }) {\n return new Code<T>(code, name, ts.DiagnosticCategory.Message, formatter);\n }\n\n /**\n * @internal\n */\n public static suggestion<T extends DiagnosticMessageFormatter>({\n code,\n name,\n formatter,\n }: {\n code: number;\n formatter: T;\n name: string;\n }) {\n return new Code<T>(code, name, ts.DiagnosticCategory.Suggestion, formatter);\n }\n\n /**\n * @internal\n */\n public static warning<T extends DiagnosticMessageFormatter>({\n code,\n name,\n formatter,\n }: {\n code: number;\n formatter: T;\n name: string;\n }) {\n return new Code<T>(code, name, ts.DiagnosticCategory.Warning, formatter);\n }\n\n /**\n * @internal\n */\n public static error<T extends DiagnosticMessageFormatter>({\n code,\n name,\n formatter,\n }: {\n code: number;\n formatter: T;\n name: string;\n }) {\n return new Code<T>(code, name, ts.DiagnosticCategory.Error, formatter);\n }\n\n /**\n * Get a diagnostic code by code or name.\n *\n * @param codeOrName the looked up diagnostic code or name.\n *\n * @returns the JsiiDiagnosticCode instande, if one exists, or `undefined`\n *\n * @experimental this module is under active development and the error codes\n * and names may change in the future.\n */\n public static lookup(codeOrName: string | number): Code | undefined {\n if (typeof codeOrName === 'number') {\n return this.byCode.get(codeOrName);\n }\n return this.byName.get(codeOrName);\n }\n\n private static readonly byCode: Map<number, Code> = new Map();\n private static readonly byName: Map<string, Code> = new Map();\n\n // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\n readonly #defaultCategory: ts.DiagnosticCategory;\n\n // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\n #category?: ts.DiagnosticCategory;\n\n // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\n #formatter: T;\n\n /**\n * Registers a new diagnostic code.\n *\n * @param code the numeric code for the diagnostic\n * @param name the symbolic name for the diagnostic\n * @param defaultCategory the default category this diagnostic ranks in\n * @param formatter a message formatter for easy creation of diagnostics\n */\n private constructor(\n public readonly code: number,\n public readonly name: string,\n defaultCategory: ts.DiagnosticCategory,\n formatter: T,\n ) {\n this.#defaultCategory = defaultCategory;\n this.#formatter = formatter;\n\n if (code in Code.byCode) {\n throw new Error(`Attempted to create two instances of ${this.constructor.name} with code ${code}`);\n }\n if (name in Code.byName) {\n throw new Error(`Attempted to create two instances of ${this.constructor.name} with name ${name}`);\n }\n Code.byCode.set(code, this);\n Code.byName.set(name, this);\n }\n\n /**\n * Determines whether this diagnostic is a compilation error. Diagnostics\n * where this is `true` cannot have their `category` overridden to a lower\n * category.\n */\n public get isError(): boolean {\n return this.#defaultCategory === ts.DiagnosticCategory.Error;\n }\n\n /**\n * The diagnostic category this particular code is filed as.\n */\n public get category(): ts.DiagnosticCategory {\n return this.#category ?? this.#defaultCategory;\n }\n\n /**\n * Update the diagnostic category for this particular code. If `isError` is\n * `true`, attempting to set anything other than `ts.DiagnosticCategory.Error`\n * will result in an error being throw.\n *\n * @param newValue the new diagnostic category to be used.\n */\n public set category(newValue: ts.DiagnosticCategory) {\n if (this.isError && newValue !== ts.DiagnosticCategory.Error) {\n throw new Error(\n `Illegal attempt to override category of error ${this.code} to ${ts.DiagnosticCategory[newValue]}`,\n );\n }\n this.#category = newValue;\n }\n\n /**\n * Creates a new `JsiiDiagnostic` message without any source code location\n * data.\n *\n * @param args the arguments to the message formatter.\n *\n * @deprecated It is preferred to specify a source code location for problem\n * markers. Prefer the use of `create` while providing a value\n * for the `location` parameter whenever possible.\n */\n public createDetached(...args: Parameters<T>): JsiiDiagnostic {\n return new JsiiDiagnostic(this, this.#formatter(...args));\n }\n\n /**\n * Creates a new `JsiiDiagnostic` message with source code location denoted\n * by the provided `location` node.\n *\n * @param location the source code location attachment of the message.\n * @param args the arguments to the message formatter.\n */\n public create(location: ts.Node | undefined, ...args: Parameters<T>): JsiiDiagnostic {\n return new JsiiDiagnostic(this, this.#formatter(...args), location);\n }\n}\n\n/**\n * A jsii-specific diagnostic entry.\n */\nexport class JsiiDiagnostic implements ts.Diagnostic {\n //////////////////////////////////////////////////////////////////////////////\n // 0001 => 0999 -- PACKAGE METADATA PROBLEMS\n\n public static readonly JSII_0001_PKG_MISSING_DESCRIPTION = Code.suggestion({\n code: 1,\n formatter: () => 'A \"description\" field should be specified in \"package.json\"',\n name: 'metadata/package-json-missing-description',\n });\n\n public static readonly JSII_0002_PKG_MISSING_HOMEPAGE = Code.suggestion({\n code: 2,\n formatter: () => 'A \"homepage\" field should be specified in \"package.json\"',\n name: 'metadata/package-json-missing-homepage',\n });\n\n public static readonly JSII_0003_MISSING_README = Code.warning({\n code: 3,\n formatter: () => 'There is no \"README.md\" file. It is required in order to generate valid PyPI (Python) packages.',\n name: 'metadata/missing-readme',\n });\n\n public static readonly JSII_0004_COULD_NOT_FIND_ENTRYPOINT = Code.error({\n code: 4,\n formatter: (mainFile: string) => `Could not find \"main\" file: ${mainFile}`,\n name: 'metadata/could-not-find-entrypoint',\n });\n\n public static readonly JSII_0005_MISSING_PEER_DEPENDENCY = Code.warning({\n code: 5,\n formatter: (assm: string, reference: string) =>\n `The type \"${reference}\" is exposed in the public API of this module. ` +\n `Therefore, the module \"${assm}\" must also be defined under \"peerDependencies\". ` +\n 'This will be auto-corrected unless --no-fix-peer-dependencies was specified.',\n name: 'metadata/missing-peer-dependency',\n });\n\n // NOTE: currently not possible to change the severity of this code,\n // as it's being emitted before the overrides have been loaded\n public static readonly JSII_0006_MISSING_DEV_DEPENDENCY = Code.warning({\n code: 6,\n formatter: (dependencyName: string, peerRange: string, minVersion: string, actual: string) =>\n `A \"peerDependency\" on \"${dependencyName}\" at \"${peerRange}\" means you ` +\n `should take a \"devDependency\" on \"${dependencyName}\" at \"${minVersion}\" ` +\n `(found ${JSON.stringify(actual)})`,\n name: 'metadata/missing-dev-dependency',\n });\n\n public static readonly JSII_0007_MISSING_WARNINGS_EXPORT = Code.error({\n code: 7,\n formatter: () =>\n 'If you are compiling with --add-deprecation-warnings and your package.json ' +\n `declares subpath exports, you must include { \"./${WARNINGSCODE_FILE_NAME}\": \"./${WARNINGSCODE_FILE_NAME}\" } ` +\n 'in the set of exports.',\n name: 'metadata/missing-warnings-export',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n // 1000 => 1999 -- TYPESCRIPT LANGUAGE RESTRICTIONS\n\n public static readonly JSII_1000_NO_CONST_ENUM = Code.error({\n code: 1000,\n formatter: () => 'Exported \"const enum\" declarations are not allowed',\n name: 'typescript-restrictions/no-const-enum',\n });\n\n public static readonly JSII_1001_TYPE_HAS_NO_SYMBOL = Code.error({\n code: 1001,\n formatter: () => 'Non-primitive types without a symbol cannot be processed.',\n name: 'typescript-restrictions/type-has-no-symbol',\n });\n\n public static readonly JSII_1002_UNSPECIFIED_PROMISE = Code.error({\n code: 1002,\n formatter: () => 'Un-specified promise type. Specify it using \"Promise<T>\"',\n name: 'typescript-restrictions/unspecified-promise',\n });\n\n public static readonly JSII_1003_UNSUPPORTED_TYPE = Code.error({\n code: 1003,\n formatter: (messageText) => messageText,\n name: 'typescript-restrictions/unsupported-type',\n });\n\n public static readonly JSII_1004_DUPLICATE_ENUM_VALUE = Code.error({\n code: 1004,\n formatter: (enumValue: string, enumMemberNames: string[]) =>\n `Value ${enumValue} is used for multiple enum values: ${enumMemberNames.join(', ')}`,\n name: 'typescript-restrictions/duplicate-enum-value',\n });\n\n public static readonly JSII_1005_SEPARATE_WRITE_TYPE = Code.error({\n code: 1005,\n formatter: () => 'Visible property signatures cannot use a separate write type. Use the same type as the getter.',\n name: 'typescript-restrictions/separate-write-type',\n });\n\n public static readonly JSII_1006_GENERIC_TYPE = Code.error({\n code: 1006,\n formatter: () => 'Generic types are not supported because semantics are not uniform in target languages.',\n name: 'typescript-restriction/generic-type',\n });\n\n public static readonly JSII_1999_UNSUPPORTED = Code.error({\n code: 1999,\n formatter: ({\n what,\n alternative,\n suggestInternal,\n }: {\n what: string;\n alternative?: string;\n suggestInternal?: boolean;\n }) =>\n `${what} are not supported in jsii APIs.${alternative ? ` Consider using ${alternative} instead.` : ''}${\n suggestInternal\n ? ` This declaration must${alternative ? ' otherwise' : ''} be marked \"@internal\" or \"@jsii ignore\".`\n : ''\n }`,\n name: 'typescript-restrictions/unsupported',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n // 2000 => 2999 -- INCORRECT USE OF THE @jsii DIRECTIVE\n public static readonly JSII_2000_MISSING_DIRECTIVE_ARGUMENT = Code.warning({\n code: 2000,\n formatter: () =>\n 'Missing argument to @jsii directive. Refer to the jsii compiler documentation for more information.',\n name: 'jsii-directive/missing-argument',\n });\n\n public static readonly JSII_2100_STRUCT_ON_NON_INTERFACE = Code.warning({\n code: 2100,\n formatter: () => 'The \"@jsii struct\" directive is only applicable to interface declarations.',\n name: 'jsii-directive/struct-on-non-interface',\n });\n\n public static readonly JSII_2999_UNKNOWN_DIRECTIVE = Code.warning({\n code: 2999,\n formatter: (text: string) =>\n `Unknown @jsii directive: ${JSON.stringify(\n text,\n )}. Refer to the jsii compiler documentation for more information.`,\n name: 'jsii-directive/unknown',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n // 3000 => 3999 -- TYPE MODEL COHERENCE\n\n public static readonly JSII_3000_EXPORTED_API_USES_HIDDEN_TYPE = Code.error({\n code: 3000,\n formatter: (badFqn) => `Exported APIs cannot use un-exported type \"${badFqn}\"`,\n name: 'type-model/exported-api-cannot-use-unexported-type',\n });\n\n public static readonly JSII_3001_EXPOSED_INTERNAL_TYPE = Code.error({\n code: 3001,\n formatter: (symbol: ts.Symbol, isThisType: boolean, typeUse: string) =>\n `Type ${\n isThisType ? `\"this\" (aka: \"${symbol.name}\")` : `\"${symbol.name}\"`\n } cannot be used as the ${typeUse} because it is private or @internal`,\n name: 'type-model/use-of-internal-type',\n });\n\n public static readonly JSII_3002_USE_OF_UNEXPORTED_FOREIGN_TYPE = Code.error({\n code: 3002,\n formatter: (fqn: string, typeUse: string, pkg: { readonly name: string }) =>\n `Type \"${fqn}\" cannot be used as a ${typeUse} because it is not exported from ${pkg.name}`,\n name: 'type-model/unexported-foreign-type',\n });\n\n public static readonly JSII_3003_SYMBOL_IS_EXPORTED_TWICE = Code.error({\n code: 3003,\n formatter: (ns1: string, ns2: string) => `Symbol is exported under two distinct submodules: ${ns1} and ${ns2}`,\n name: 'type-model/symbol-is-exported-twice',\n });\n\n public static readonly JSII_3004_INVALID_SUPERTYPE = Code.error({\n code: 3004,\n formatter: (clause: ts.HeritageClause, badDeclaration: ts.Declaration) => {\n return `Illegal ${clauseType(clause.token)} clause for an exported API: ${ts.SyntaxKind[badDeclaration.kind]}`;\n\n function clauseType(token: ts.SyntaxKind): string {\n switch (token) {\n case ts.SyntaxKind.ExtendsKeyword:\n return 'extends';\n case ts.SyntaxKind.ImplementsKeyword:\n return 'implements';\n default:\n return ts.SyntaxKind[token];\n }\n }\n },\n name: 'type-model/invalid-supertype',\n });\n\n public static readonly JSII_3005_TYPE_USED_AS_INTERFACE = Code.error({\n code: 3005,\n formatter: (badType: spec.TypeReference) =>\n `Type \"${spec.describeTypeReference(badType)}\" cannot be used as an interface`,\n name: 'type-model/type-used-as-interface',\n });\n\n public static readonly JSII_3006_TYPE_USED_AS_CLASS = Code.error({\n code: 3006,\n formatter: (badType: spec.TypeReference) =>\n `Type \"${spec.describeTypeReference(badType)}\" cannot be used as a class`,\n name: 'type-model/type-used-as-class',\n });\n\n public static readonly JSII_3007_ILLEGAL_STRUCT_EXTENSION = Code.error({\n code: 3007,\n formatter: (offender: spec.Type, struct: spec.InterfaceType) =>\n `Attempt to extend or implement struct \"${struct.fqn}\" from \"${offender.fqn}\"`,\n name: 'type-model/illegal-struct-extension',\n });\n\n public static readonly JSII_3008_STRUCT_PROPS_MUST_BE_READONLY = Code.error({\n code: 3008,\n formatter: (propName: string, struct: spec.InterfaceType) =>\n `The \"${propName}\" property of struct \"${struct.fqn}\" must be \"readonly\". Rename \"${struct.fqn}\" to \"I${struct.name}\" if it is meant to be a behavioral interface.`,\n name: 'type-model/struct-props-must-be-readonly',\n });\n\n public static readonly JSII_3009_OPTIONAL_PARAMETER_BEFORE_REQUIRED = Code.error({\n code: 3009,\n formatter: (param: spec.Parameter, nextParam: spec.Parameter) =>\n `Parameter \"${param.name}\" cannot be optional, as it precedes required parameter \"${nextParam.name}\"`,\n name: 'type-model/optional-parameter-before-required',\n });\n\n public static readonly JSII_3999_INCOHERENT_TYPE_MODEL = Code.error({\n code: 3999,\n formatter: (messageText) => messageText,\n name: 'type-model/incoherent-type-model',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n // 4000 => 4999 -- TYPESCRIPT & JSII CONFIG ERRORS\n\n public static readonly JSII_4000_FAILED_TSCONFIG_VALIDATION = Code.error({\n code: 4000,\n formatter: (config: string, ruleSet: string, violations: Array<Violation>) => {\n return `Typescript compiler options in \"${config}\" are not passing validation against rule set \"${ruleSet}\", found the following rule violations:\\n${violations\n .map((v) => ` - ${v.field}: ${v.message}`)\n .join('\\n')}`;\n },\n name: 'typescript-config/invalid-tsconfig',\n });\n\n public static readonly JSII_4009_DISABLED_TSCONFIG_VALIDATION = Code.warning({\n code: 4009,\n formatter: (config: string) =>\n `Validation of typescript config \"${config}\" is disabled. This is intended for experimental setups only. Compilation might fail or produce incompatible artifacts.`,\n name: 'typescript-config/disabled-tsconfig-validation',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n // 5000 => 5999 -- LANGUAGE COMPATIBILITY ERRORS\n\n public static readonly JSII_5000_JAVA_GETTERS = Code.error({\n code: 5000,\n formatter: (badName: string, typeName: string) =>\n `Methods and properties cannot have names like \"getXxx\": those conflict with Java property getters. Rename \"${typeName}.${badName}\"`,\n name: 'language-compatibility/potential-java-getter-conflict',\n });\n\n public static readonly JSII_5001_JAVA_SETTERS = Code.error({\n code: 5001,\n formatter: (badName: string, typeName: string) =>\n `Methods and properties cannot have names like \"setXxx\": those conflict with Java property setters. Rename \"${typeName}.${badName}\"`,\n name: 'language-compatibility/potential-java-setter-conflict',\n });\n\n public static readonly JSII_5002_OVERRIDE_CHANGES_VISIBILITY = Code.error({\n code: 5002,\n formatter: (\n newElement: string,\n action: string,\n newValue: 'protected' | 'public',\n oldValue: 'protected' | 'public',\n ) => `\"${newElement}\" changes visibility to ${newValue} when ${action}. Change it to ${oldValue}`,\n name: 'language-compatibility/override-changes-visibility',\n });\n\n public static readonly JSII_5003_OVERRIDE_CHANGES_RETURN_TYPE = Code.error({\n code: 5003,\n formatter: (newElement: string, action: string, newValue: string, oldValue: string) =>\n `\"${newElement}\" changes the return type to \"${newValue}\" when ${action}. Change it to \"${oldValue}\"`,\n name: 'language-compatibility/override-changes-return-type',\n });\n\n public static readonly JSII_5004_OVERRIDE_CHANGES_PROP_TYPE = Code.error({\n code: 5004,\n formatter: (newElement: string, action: string, newType: spec.TypeReference, oldType: spec.TypeReference) =>\n `\"${newElement}\" changes the property type to \"${spec.describeTypeReference(\n newType,\n )}\" when ${action}. Change it to \"${spec.describeTypeReference(oldType)}\"`,\n name: 'language-compatibility/override-changes-property-type',\n });\n\n public static readonly JSII_5005_OVERRIDE_CHANGES_PARAM_COUNT = Code.error({\n code: 5005,\n formatter: (newElement: string, action: string, newCount: number, oldCount: number) =>\n `\"${newElement}\" has ${newCount} parameters when ${action}. It should accept ${oldCount} parameters`,\n name: 'language-compatibility/override-changes-param-count',\n });\n\n public static readonly JSII_5006_OVERRIDE_CHANGES_PARAM_TYPE = Code.error({\n code: 5006,\n formatter: (newElement: string, action: string, newParam: spec.Parameter, oldParam: spec.Parameter) =>\n `\"${newElement}\" changes the type of parameter \"${newParam.name}\" to ${spec.describeTypeReference(\n newParam.type,\n )} when ${action}. Change it to ${spec.describeTypeReference(oldParam.type)}`,\n name: 'language-compatibility/override-changes-param-type',\n });\n\n public static readonly JSII_5007_OVERRIDE_CHANGES_VARIADIC = Code.error({\n code: 5007,\n formatter: (newElement: string, action: string, newVariadic = false, oldVariadic = false) =>\n `\"${newElement}\" turns ${newVariadic ? 'variadic' : 'non variadic'} when ${action}. Make it ${\n oldVariadic ? 'variadic' : 'non-variadic'\n }`,\n name: 'language-compatibility/override-changes-variadic',\n });\n\n public static readonly JSII_5008_OVERRIDE_CHANGES_PARAM_OPTIONAL = Code.error({\n code: 5008,\n formatter: (newElement: string, action: string, newParam: spec.Parameter, oldParam: spec.Parameter) =>\n `\"${newElement}\" turns parameter \"${newParam.name}\" ${\n newParam.optional ? 'optional' : 'required'\n } when ${action}. Make it ${oldParam.optional ? 'optional' : 'required'}`,\n name: 'language-compatibility/override-changes-param-optional',\n });\n\n public static readonly JSII_5009_OVERRIDE_CHANGES_PROP_OPTIONAL = Code.error({\n code: 5009,\n formatter: (newElement: string, action: string, newOptional = false, oldOptional = false) =>\n `\"${newElement}\" turns ${newOptional ? 'optional' : 'required'} when ${action}. Make it ${\n oldOptional ? 'optional' : 'required'\n }`,\n name: 'language-compatibility/override-changes-prop-optional',\n });\n\n public static readonly JSII_5010_OVERRIDE_CHANGES_MUTABILITY = Code.error({\n code: 5010,\n formatter: (newElement: string, action: string, newReadonly = false, oldReadonly = false) =>\n `\"${newElement}\" turns ${newReadonly ? 'readonly' : 'mutable'} when ${action}. Make it ${\n oldReadonly ? 'readonly' : 'mutable'\n }`,\n name: 'language-compatibility/override-changes-mutability',\n });\n\n public static readonly JSII_5011_SUBMODULE_NAME_CONFLICT = Code.error({\n code: 5011,\n formatter: (submoduleName: string, typeName: string, reserved: readonly string[]) =>\n `Submodule \"${submoduleName}\" conflicts with \"${typeName}, as different languages could represent it as: ${reserved\n .map((x) => `\"${x}\"`)\n .join(', ')}\"`,\n name: 'language-compatibility/submodule-name-conflicts',\n });\n\n public static readonly JSII_5012_NAMESPACE_IN_TYPE = Code.error({\n code: 5012,\n formatter: (typeName: string, namespaceName: string) =>\n `All entities nested under a type (e.g: \"${typeName}\") must be concrete types, but \"${namespaceName}\" is a namespace. This structure cannot be supported in all languages (e.g: Java)`,\n name: 'language-compatibility/namespace-in-type',\n });\n\n public static readonly JSII_5013_STATIC_INSTANCE_CONFLICT = Code.error({\n code: 5013,\n formatter: (member: string, type: spec.ClassType) =>\n `Member \"${member}\" of class \"${type.fqn}\" has both a static and an instance delcaration`,\n name: 'language-compatibility/static-instance-conflict',\n });\n\n public static readonly JSII_5014_INHERITED_STATIC_CONFLICT = Code.error({\n code: 5014,\n formatter: (\n member: spec.Method | spec.Property,\n type: spec.ClassType,\n baseMember: spec.Method | spec.Property,\n baseType: spec.ClassType,\n ) =>\n `${member.static ? 'Static' : 'Instance'} member \"${member.name}\" of class \"${type.fqn}\" conflicts with ${\n baseMember.static ? 'static' : 'instance'\n } member in ancestor \"${baseType.fqn}\"`,\n name: 'language-compatibility/inherited-static-conflict',\n });\n\n public static readonly JSII_5015_REDECLARED_INTERFACE_MEMBER = Code.error({\n code: 5015,\n formatter: (memberName: string, iface: spec.InterfaceType) =>\n `Interface \"${iface.fqn}\" re-declares member \"${memberName}\". This is not supported as it results in invalid C#.`,\n name: 'language-compatibility/redeclared-interface-member',\n });\n\n public static readonly JSII_5016_PROHIBITED_MEMBER_NAME = Code.error({\n code: 5016,\n formatter: (badName: string) =>\n `Members cannot be named \"${badName}\" as it conflicts with synthetic declarations in some languages.`,\n name: 'language-compatibility/prohibited-member-name',\n });\n\n public static readonly JSII_5017_POSITIONAL_KEYWORD_CONFLICT = Code.error({\n code: 5017,\n formatter: (badName: string) =>\n `Parameter name \"${badName}\" is also the name of a property in a struct parameter. Rename the positional parameter.`,\n name: 'language-compatibility/positional-keyword-conflict',\n });\n\n public static readonly JSII_5018_RESERVED_WORD = Code.warning({\n code: 5018,\n formatter: (badName: string, languages: readonly string[]) =>\n `\"${badName}\" is a reserved word in ${languages.join(\n ', ',\n )}. Using this name may cause problems when generating language bindings. Consider a different name.`,\n name: 'language-compatibility/reserved-word',\n });\n\n public static readonly JSII_5019_MEMBER_TYPE_NAME_CONFLICT = Code.warning({\n code: 5019,\n formatter: (memberKind: 'method' | 'property', memberSymbol: ts.Symbol, declaringType: spec.Type) =>\n `The ${memberKind} name \"${memberSymbol.name}\" conflicts with the declaring ${declaringType.kind} \"${declaringType.name}\". This will result in renaming the ${declaringType.kind} to \"_${declaringType.name}\" in C#. Consider renaming \"${memberSymbol.name}\".`,\n name: 'language-compatibility/member-name-conflicts-with-type-name',\n });\n\n public static readonly JSII_5020_STATIC_MEMBER_CONFLICTS_WITH_NESTED_TYPE = Code.error({\n code: 5020,\n formatter: (\n nestingType: spec.Type,\n staticMember: spec.Property | spec.Method | spec.EnumMember,\n nestedType: spec.Type,\n ) =>\n `The static member \"${nestingType.name}.${staticMember.name}\" has the same PascalCased representation as nested type \"${nestingType.name}.${nestedType.name}\". This would result in invalid code in Go.`,\n name: 'language-compatibility/static-member-name-conflicts-with-nested-type',\n });\n\n public static readonly JSII_5021_ABSTRACT_CLASS_MISSING_PROP_IMPL = Code.error({\n code: 5021,\n formatter: (intf: spec.InterfaceType, cls: spec.ClassType, prop: string) =>\n `A declaration of \"${intf.name}.${prop}\" is missing on class \"${cls.name}\". Declare the property as \"public abstract\" if you want to defer it to subclasses.`,\n name: 'language-compatibility/abstract-class-missing-prop-impl',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n // 6000 => 6999 -- RESERVED\n\n //////////////////////////////////////////////////////////////////////////////\n // 7000 => 7999 -- DOCUMENTATION ERRORS\n\n public static readonly JSII_7000_NON_EXISTENT_PARAMETER = Code.warning({\n code: 7000,\n formatter: (method: spec.Method, param: string) =>\n `Documentation for method \"${method.name}\" refers to non-existent @param \"${param}\"`,\n name: 'documentation/non-existent-parameter',\n });\n\n public static readonly JSII_7001_ILLEGAL_HINT = Code.error({\n code: 7001,\n formatter: (hint: keyof TypeSystemHints, ...valid: readonly string[]) =>\n `Illegal use of \"@${hint}\" hint. It is only valid on ${valid.join(', ')}.`,\n name: 'documentation/illegal-hint',\n });\n\n public static readonly JSII_7999_DOCUMENTATION_ERROR = Code.error({\n code: 7999,\n formatter: (messageText) => messageText,\n name: 'documentation/documentation-error',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n // 8000 => 8999 -- JSII STYLE ENFORCEMENT\n\n public static readonly JSII_8000_PASCAL_CASED_TYPE_NAMES = Code.error({\n code: 8000,\n formatter: (badName: string, expectedName: string = pascal(badName)) =>\n `Type names must be PascalCased. Rename \"${badName}\" to \"${expectedName}\"`,\n name: 'code-style/type-names-must-use-pascal-case',\n });\n\n public static readonly JSII_8001_ALL_CAPS_ENUM_MEMBERS = Code.error({\n code: 8001,\n formatter: (badName: string, typeName: string) =>\n `Enum members must be ALL_CAPS. Rename \"${typeName}.${badName}\" to \"${constant(badName)}\"`,\n name: 'code-style/enum-members-must-use-all-caps',\n });\n\n public static readonly JSII_8002_CAMEL_CASED_MEMBERS = Code.error({\n code: 8002,\n formatter: (badName: string, typeName: string) =>\n `Method and property (unless they are static readonly) names must use camelCase. Rename \"${typeName}.${badName}\" to \"${camel(\n badName,\n )}\"`,\n name: 'code-style/member-names-must-use-camel-case',\n });\n\n public static readonly JSII_8003_STATIC_CONST_CASING = Code.error({\n code: 8003,\n formatter: (badName: string, typeName: string) =>\n `Static constant names must use ALL_CAPS, PascalCase, or camelCase. Rename \"${typeName}.${badName}\" to \"${constant(\n badName,\n )}\"`,\n name: 'code-style/static-readonly-property-casing',\n });\n\n public static readonly JSII_8004_SUBMOULE_NAME_CASING = Code.error({\n code: 8004,\n formatter: (badName: string) =>\n `Submodule namespaces must be camelCased or snake_cased. Rename \"${badName}\" to ${camel(badName)}`,\n name: 'code-style/submodule-name-casing',\n });\n\n public static readonly JSII_8005_INTERNAL_UNDERSCORE = Code.error({\n code: 8005,\n formatter: (badName: string) =>\n `Members marked with @internal must have a name starting with \"_\". Rename \"${badName}\" to \"_${badName}\"`,\n name: 'code-style/internal-members-underscore-prefix',\n });\n\n public static readonly JSII_8006_UNDERSCORE_INTERNAL = Code.error({\n code: 8006,\n formatter: (badName: string) =>\n `Members with a name starting with \"_\" (e.g: \"${badName}\") must be marked @internal`,\n name: 'code-style/underscored-members-must-be-internal',\n });\n\n public static readonly JSII_8007_BEHAVIORAL_INTERFACE_NAME = Code.error({\n code: 8007,\n formatter: (badName: string) => `Interface contains behavior. Rename \"${badName}\" to \"I${badName}\"`,\n name: 'code-style/behavioral-interface-name',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n // 9000 => 9999 -- SURPRISING ERRORS & INFORMATIONAL MESSAGES\n\n public static readonly JSII_9000_UNKNOWN_MODULE = Code.error({\n code: 9000,\n formatter: (moduleName) =>\n `Encountered use of module that is not declared in \"dependencies\" or \"peerDependencies\": \"${moduleName}\"`,\n name: 'miscellaneous/unknown-module',\n });\n\n public static readonly JSII_9001_TYPE_NOT_FOUND = Code.error({\n code: 9001,\n formatter: (typeRef: spec.NamedTypeReference) => `Type not found in the corresponding assembly: \"${typeRef.fqn}\"`,\n name: 'miscellaneous/type-not-found',\n });\n\n public static readonly JSII_9002_UNRESOLVEABLE_TYPE = Code.error({\n code: 9002,\n formatter: (reference: string) =>\n `Type \"${reference}\" is part of the public API but not exported (@internal or not exported from the package.json \"main\" file). Either export it or add @internal explicitly if you want this to be a hidden base class.`,\n name: 'miscellaneous/unresolveable-type',\n });\n\n public static readonly JSII_9003_UNRESOLVEABLE_MODULE = Code.error({\n code: 9003,\n formatter: (location: string) => `Unable to resolve module location \"${location}\"`,\n name: 'miscellaneous/unresolveable-module',\n });\n\n public static readonly JSII_9004_UNABLE_TO_COMPUTE_SIGNATURE = Code.error({\n code: 9004,\n formatter: (methodName: string, type: spec.Type) =>\n `Unable to compute signature for method \"${methodName}\" of \"${type.fqn}\"`,\n name: 'miscellaneous/unable-to-compute-signature',\n });\n\n public static readonly JSII_9996_UNNECESSARY_TOKEN = Code.message({\n code: 9996,\n formatter: () => 'Unnecessary token, consider removing it',\n name: 'miscellaneous/unnecessary-token',\n });\n\n public static readonly JSII_9997_UNKNOWN_ERROR = Code.error({\n code: 9997,\n formatter: (error: Error) => `Unknown error: ${error.message} -- ${error.stack}`,\n name: 'miscellaneous/unknown-error',\n });\n\n public static readonly JSII_9998_UNSUPPORTED_NODE = Code.message({\n code: 9998,\n formatter: (kindOrMessage: ts.SyntaxKind | string) =>\n typeof kindOrMessage === 'string'\n ? kindOrMessage\n : `Unsupported ${ts.SyntaxKind[kindOrMessage]} node. This declaration will not be accessible from other languages.`,\n name: 'miscellaneous/unsupported-node',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n\n /**\n * Determines whether a `Diagnostic` instance is a `JsiiDiagnostic` or not.\n * @param diag\n */\n public static isJsiiDiagnostic(diag: ts.Diagnostic): diag is JsiiDiagnostic {\n return (diag as unknown as JsiiDiagnostic).domain === JsiiDiagnostic.DOMAIN;\n }\n\n //////////////////////////////////////////////////////////////////////////////\n\n private static readonly JSII_9999_RELATED_INFO = Code.suggestion({\n code: 9999,\n formatter: (messageText) => messageText,\n name: 'miscellaneous/related-info',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n\n /**\n * This symbol unequivocally identifies the `JsiiDiagnostic` domain.\n */\n private static readonly DOMAIN = Symbol('jsii');\n\n private readonly domain = JsiiDiagnostic.DOMAIN;\n\n public readonly category: ts.DiagnosticCategory;\n public readonly code: number = JSII_DIAGNOSTICS_CODE;\n public readonly jsiiCode: number;\n public readonly messageText: string | ts.DiagnosticMessageChain;\n\n public readonly file: ts.SourceFile | undefined;\n public readonly start: number | undefined;\n public readonly length: number | undefined;\n\n public readonly relatedInformation = new Array<ts.DiagnosticRelatedInformation>();\n\n // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\n #formatted?: string;\n\n /**\n * Creates a new `JsiiDiagnostic` with the provided properties.\n *\n * @internal\n */\n public constructor(code: Code, messageText: string | ts.DiagnosticMessageChain, location?: ts.Node) {\n this.category = code.category;\n this.jsiiCode = code.code;\n this.messageText = messageText;\n\n if (location != null) {\n this.file = location.getSourceFile();\n this.start = location.getStart(this.file);\n this.length = location.getEnd() - this.start;\n }\n }\n\n public addRelatedInformation(node: ts.Node, message: JsiiDiagnostic['messageText']): this {\n // Don't relate info into the TypeScript standard library\n if (!/[\\\\/]typescript[\\\\/]lib[\\\\/]lib\\..+\\.d\\.ts$/.test(node.getSourceFile().fileName)) {\n this.relatedInformation.push(JsiiDiagnostic.JSII_9999_RELATED_INFO.create(node, message));\n }\n // Clearing out #formatted, as this would no longer be the correct string.\n this.#formatted = undefined;\n return this;\n }\n\n /**\n * Links the provided `node` with the specified `message` as related to the\n * current diagnostic, unless `node` is undefined.\n *\n * @param node the node where the message should be attached, if any.\n * @param message the message to be attached to the diagnostic entry.\n *\n * @returns `this`\n */\n public addRelatedInformationIf(node: ts.Node | undefined, message: JsiiDiagnostic['messageText']): this {\n if (node != null) {\n return this.addRelatedInformation(node, message);\n } else {\n return this;\n }\n }\n\n /**\n * Adds related information to this `JsiiDiagnostic` instance if the provided\n * `node` is defined.\n *\n * @param node the node to bind as related information, or `undefined`.\n * @param message the message to attach to the related information.\n *\n * @returns `this`\n */\n public maybeAddRelatedInformation(node: ts.Node | undefined, message: JsiiDiagnostic['messageText']): this {\n if (node == null) {\n return this;\n }\n this.relatedInformation.push(JsiiDiagnostic.JSII_9999_RELATED_INFO.create(node, message));\n // Clearing out #formatted, as this would no longer be the correct string.\n this.#formatted = undefined;\n return this;\n }\n\n /**\n * Formats this diagnostic with color and context if possible, and returns it.\n * The formatted diagnostic is cached, so that it can be re-used. This is\n * useful for diagnostic messages involving trivia -- as the trivia may have\n * been obliterated from the `SourceFile` by the `TsCommentReplacer`, which\n * makes the error messages really confusing.\n */\n public format(projectRoot: string): string {\n if (this.#formatted == null) {\n this.#formatted = _formatDiagnostic(this, projectRoot);\n }\n return this.#formatted;\n }\n}\n\nexport type DiagnosticMessageFormatter = (...args: any[]) => JsiiDiagnostic['messageText'];\n\nexport function configureCategories(records: { [code: string]: ts.DiagnosticCategory }) {\n for (const [code, category] of Object.entries(records)) {\n const diagCode = Code.lookup(diagnosticCode(code));\n if (!diagCode) {\n throw new Error(`Unrecognized diagnostic code '${code}'`);\n }\n diagCode.category = category;\n }\n}\n\nfunction diagnosticCode(str: string): string | number {\n if (str.toLowerCase().startsWith('jsii')) {\n const re = /^JSII(\\d+)$/i.exec(str);\n if (re) {\n return parseInt(re[1], 10);\n }\n throw new Error(`Invalid diagnostic code ${str}. A number must follow code that starts with 'JSII'`);\n }\n return str;\n}\n"]}
1
+ {"version":3,"file":"jsii-diagnostic.js","sourceRoot":"","sources":["../src/jsii-diagnostic.ts"],"names":[],"mappings":"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","sourcesContent":["import * as spec from '@jsii/spec';\nimport { camel, constant, pascal } from 'case';\nimport * as ts from 'typescript';\n\nimport { TypeSystemHints } from './docs';\nimport { WARNINGSCODE_FILE_NAME } from './transforms/deprecation-warnings';\nimport { Violation } from './tsconfig/validator';\nimport { JSII_DIAGNOSTICS_CODE, _formatDiagnostic } from './utils';\n\n/**\n * Descriptors for all valid jsii diagnostic codes.\n *\n * The `category` or non-error codes can be updated, for example to treat\n * warnings as errors, or to suppress certain undesirable warnings.\n */\nexport class Code<T extends DiagnosticMessageFormatter = DiagnosticMessageFormatter> {\n /**\n * @internal\n */\n public static message<T extends DiagnosticMessageFormatter>({\n code,\n name,\n formatter,\n }: {\n code: number;\n formatter: T;\n name: string;\n }) {\n return new Code<T>(code, name, ts.DiagnosticCategory.Message, formatter);\n }\n\n /**\n * @internal\n */\n public static suggestion<T extends DiagnosticMessageFormatter>({\n code,\n name,\n formatter,\n }: {\n code: number;\n formatter: T;\n name: string;\n }) {\n return new Code<T>(code, name, ts.DiagnosticCategory.Suggestion, formatter);\n }\n\n /**\n * @internal\n */\n public static warning<T extends DiagnosticMessageFormatter>({\n code,\n name,\n formatter,\n }: {\n code: number;\n formatter: T;\n name: string;\n }) {\n return new Code<T>(code, name, ts.DiagnosticCategory.Warning, formatter);\n }\n\n /**\n * @internal\n */\n public static error<T extends DiagnosticMessageFormatter>({\n code,\n name,\n formatter,\n }: {\n code: number;\n formatter: T;\n name: string;\n }) {\n return new Code<T>(code, name, ts.DiagnosticCategory.Error, formatter);\n }\n\n /**\n * Get a diagnostic code by code or name.\n *\n * @param codeOrName the looked up diagnostic code or name.\n *\n * @returns the JsiiDiagnosticCode instande, if one exists, or `undefined`\n *\n * @experimental this module is under active development and the error codes\n * and names may change in the future.\n */\n public static lookup(codeOrName: string | number): Code | undefined {\n if (typeof codeOrName === 'number') {\n return this.byCode.get(codeOrName);\n }\n return this.byName.get(codeOrName);\n }\n\n private static readonly byCode: Map<number, Code> = new Map();\n private static readonly byName: Map<string, Code> = new Map();\n\n // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\n readonly #defaultCategory: ts.DiagnosticCategory;\n\n // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\n #category?: ts.DiagnosticCategory;\n\n // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\n #formatter: T;\n\n /**\n * Registers a new diagnostic code.\n *\n * @param code the numeric code for the diagnostic\n * @param name the symbolic name for the diagnostic\n * @param defaultCategory the default category this diagnostic ranks in\n * @param formatter a message formatter for easy creation of diagnostics\n */\n private constructor(\n public readonly code: number,\n public readonly name: string,\n defaultCategory: ts.DiagnosticCategory,\n formatter: T,\n ) {\n this.#defaultCategory = defaultCategory;\n this.#formatter = formatter;\n\n if (code in Code.byCode) {\n throw new Error(`Attempted to create two instances of ${this.constructor.name} with code ${code}`);\n }\n if (name in Code.byName) {\n throw new Error(`Attempted to create two instances of ${this.constructor.name} with name ${name}`);\n }\n Code.byCode.set(code, this);\n Code.byName.set(name, this);\n }\n\n /**\n * Determines whether this diagnostic is a compilation error. Diagnostics\n * where this is `true` cannot have their `category` overridden to a lower\n * category.\n */\n public get isError(): boolean {\n return this.#defaultCategory === ts.DiagnosticCategory.Error;\n }\n\n /**\n * The diagnostic category this particular code is filed as.\n */\n public get category(): ts.DiagnosticCategory {\n return this.#category ?? this.#defaultCategory;\n }\n\n /**\n * Update the diagnostic category for this particular code. If `isError` is\n * `true`, attempting to set anything other than `ts.DiagnosticCategory.Error`\n * will result in an error being throw.\n *\n * @param newValue the new diagnostic category to be used.\n */\n public set category(newValue: ts.DiagnosticCategory) {\n if (this.isError && newValue !== ts.DiagnosticCategory.Error) {\n throw new Error(\n `Illegal attempt to override category of error ${this.code} to ${ts.DiagnosticCategory[newValue]}`,\n );\n }\n this.#category = newValue;\n }\n\n /**\n * Creates a new `JsiiDiagnostic` message without any source code location\n * data.\n *\n * @param args the arguments to the message formatter.\n *\n * @deprecated It is preferred to specify a source code location for problem\n * markers. Prefer the use of `create` while providing a value\n * for the `location` parameter whenever possible.\n */\n public createDetached(...args: Parameters<T>): JsiiDiagnostic {\n return new JsiiDiagnostic(this, this.#formatter(...args));\n }\n\n /**\n * Creates a new `JsiiDiagnostic` message with source code location denoted\n * by the provided `location` node.\n *\n * @param location the source code location attachment of the message.\n * @param args the arguments to the message formatter.\n */\n public create(location: ts.Node | undefined, ...args: Parameters<T>): JsiiDiagnostic {\n return new JsiiDiagnostic(this, this.#formatter(...args), location);\n }\n}\n\n/**\n * A jsii-specific diagnostic entry.\n */\nexport class JsiiDiagnostic implements ts.Diagnostic {\n //////////////////////////////////////////////////////////////////////////////\n // 0001 => 0999 -- PACKAGE METADATA PROBLEMS\n\n public static readonly JSII_0001_PKG_MISSING_DESCRIPTION = Code.suggestion({\n code: 1,\n formatter: () => 'A \"description\" field should be specified in \"package.json\"',\n name: 'metadata/package-json-missing-description',\n });\n\n public static readonly JSII_0002_PKG_MISSING_HOMEPAGE = Code.suggestion({\n code: 2,\n formatter: () => 'A \"homepage\" field should be specified in \"package.json\"',\n name: 'metadata/package-json-missing-homepage',\n });\n\n public static readonly JSII_0003_MISSING_README = Code.warning({\n code: 3,\n formatter: () => 'There is no \"README.md\" file. It is required in order to generate valid PyPI (Python) packages.',\n name: 'metadata/missing-readme',\n });\n\n public static readonly JSII_0004_COULD_NOT_FIND_ENTRYPOINT = Code.error({\n code: 4,\n formatter: (mainFile: string) => `Could not find \"main\" file: ${mainFile}`,\n name: 'metadata/could-not-find-entrypoint',\n });\n\n public static readonly JSII_0005_MISSING_PEER_DEPENDENCY = Code.warning({\n code: 5,\n formatter: (assm: string, reference: string) =>\n `The type \"${reference}\" is exposed in the public API of this module. ` +\n `Therefore, the module \"${assm}\" must also be defined under \"peerDependencies\". ` +\n 'This will be auto-corrected unless --no-fix-peer-dependencies was specified.',\n name: 'metadata/missing-peer-dependency',\n });\n\n // NOTE: currently not possible to change the severity of this code,\n // as it's being emitted before the overrides have been loaded\n public static readonly JSII_0006_MISSING_DEV_DEPENDENCY = Code.warning({\n code: 6,\n formatter: (dependencyName: string, peerRange: string, minVersion: string, actual: string) =>\n `A \"peerDependency\" on \"${dependencyName}\" at \"${peerRange}\" means you ` +\n `should take a \"devDependency\" on \"${dependencyName}\" at \"${minVersion}\" ` +\n `(found ${JSON.stringify(actual)})`,\n name: 'metadata/missing-dev-dependency',\n });\n\n public static readonly JSII_0007_MISSING_WARNINGS_EXPORT = Code.error({\n code: 7,\n formatter: () =>\n 'If you are compiling with --add-deprecation-warnings and your package.json ' +\n `declares subpath exports, you must include { \"./${WARNINGSCODE_FILE_NAME}\": \"./${WARNINGSCODE_FILE_NAME}\" } ` +\n 'in the set of exports.',\n name: 'metadata/missing-warnings-export',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n // 1000 => 1999 -- TYPESCRIPT LANGUAGE RESTRICTIONS\n\n public static readonly JSII_1000_NO_CONST_ENUM = Code.error({\n code: 1000,\n formatter: () => 'Exported \"const enum\" declarations are not allowed',\n name: 'typescript-restrictions/no-const-enum',\n });\n\n public static readonly JSII_1001_TYPE_HAS_NO_SYMBOL = Code.error({\n code: 1001,\n formatter: () => 'Non-primitive types without a symbol cannot be processed.',\n name: 'typescript-restrictions/type-has-no-symbol',\n });\n\n public static readonly JSII_1002_UNSPECIFIED_PROMISE = Code.error({\n code: 1002,\n formatter: () => 'Un-specified promise type. Specify it using \"Promise<T>\"',\n name: 'typescript-restrictions/unspecified-promise',\n });\n\n public static readonly JSII_1003_UNSUPPORTED_TYPE = Code.error({\n code: 1003,\n formatter: (messageText) => messageText,\n name: 'typescript-restrictions/unsupported-type',\n });\n\n public static readonly JSII_1004_DUPLICATE_ENUM_VALUE = Code.error({\n code: 1004,\n formatter: (enumValue: string, enumMemberNames: string[]) =>\n `Value ${enumValue} is used for multiple enum values: ${enumMemberNames.join(', ')}`,\n name: 'typescript-restrictions/duplicate-enum-value',\n });\n\n public static readonly JSII_1005_SEPARATE_WRITE_TYPE = Code.error({\n code: 1005,\n formatter: () => 'Visible property signatures cannot use a separate write type. Use the same type as the getter.',\n name: 'typescript-restrictions/separate-write-type',\n });\n\n public static readonly JSII_1006_GENERIC_TYPE = Code.error({\n code: 1006,\n formatter: () => 'Generic types are not supported because semantics are not uniform in target languages.',\n name: 'typescript-restriction/generic-type',\n });\n\n public static readonly JSII_1999_UNSUPPORTED = Code.error({\n code: 1999,\n formatter: ({\n what,\n alternative,\n suggestInternal,\n }: {\n what: string;\n alternative?: string;\n suggestInternal?: boolean;\n }) =>\n `${what} are not supported in jsii APIs.${alternative ? ` Consider using ${alternative} instead.` : ''}${\n suggestInternal\n ? ` This declaration must${alternative ? ' otherwise' : ''} be marked \"@internal\" or \"@jsii ignore\".`\n : ''\n }`,\n name: 'typescript-restrictions/unsupported',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n // 2000 => 2999 -- INCORRECT USE OF THE @jsii DIRECTIVE\n public static readonly JSII_2000_MISSING_DIRECTIVE_ARGUMENT = Code.warning({\n code: 2000,\n formatter: () =>\n 'Missing argument to @jsii directive. Refer to the jsii compiler documentation for more information.',\n name: 'jsii-directive/missing-argument',\n });\n\n public static readonly JSII_2100_STRUCT_ON_NON_INTERFACE = Code.warning({\n code: 2100,\n formatter: () => 'The \"@jsii struct\" directive is only applicable to interface declarations.',\n name: 'jsii-directive/struct-on-non-interface',\n });\n\n public static readonly JSII_2999_UNKNOWN_DIRECTIVE = Code.warning({\n code: 2999,\n formatter: (text: string) =>\n `Unknown @jsii directive: ${JSON.stringify(\n text,\n )}. Refer to the jsii compiler documentation for more information.`,\n name: 'jsii-directive/unknown',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n // 3000 => 3999 -- TYPE MODEL COHERENCE\n\n public static readonly JSII_3000_EXPORTED_API_USES_HIDDEN_TYPE = Code.error({\n code: 3000,\n formatter: (badFqn) => `Exported APIs cannot use un-exported type \"${badFqn}\"`,\n name: 'type-model/exported-api-cannot-use-unexported-type',\n });\n\n public static readonly JSII_3001_EXPOSED_INTERNAL_TYPE = Code.error({\n code: 3001,\n formatter: (symbol: ts.Symbol, isThisType: boolean, typeUse: string) =>\n `Type ${\n isThisType ? `\"this\" (aka: \"${symbol.name}\")` : `\"${symbol.name}\"`\n } cannot be used as the ${typeUse} because it is private or @internal`,\n name: 'type-model/use-of-internal-type',\n });\n\n public static readonly JSII_3002_USE_OF_UNEXPORTED_FOREIGN_TYPE = Code.error({\n code: 3002,\n formatter: (fqn: string, typeUse: string, pkg: { readonly name: string }) =>\n `Type \"${fqn}\" cannot be used as a ${typeUse} because it is not exported from ${pkg.name}`,\n name: 'type-model/unexported-foreign-type',\n });\n\n public static readonly JSII_3003_SYMBOL_IS_EXPORTED_TWICE = Code.error({\n code: 3003,\n formatter: (ns1: string, ns2: string) => `Symbol is exported under two distinct submodules: ${ns1} and ${ns2}`,\n name: 'type-model/symbol-is-exported-twice',\n });\n\n public static readonly JSII_3004_INVALID_SUPERTYPE = Code.error({\n code: 3004,\n formatter: (clause: ts.HeritageClause, badDeclaration: ts.Declaration) => {\n return `Illegal ${clauseType(clause.token)} clause for an exported API: ${ts.SyntaxKind[badDeclaration.kind]}`;\n\n function clauseType(token: ts.SyntaxKind): string {\n switch (token) {\n case ts.SyntaxKind.ExtendsKeyword:\n return 'extends';\n case ts.SyntaxKind.ImplementsKeyword:\n return 'implements';\n default:\n return ts.SyntaxKind[token];\n }\n }\n },\n name: 'type-model/invalid-supertype',\n });\n\n public static readonly JSII_3005_TYPE_USED_AS_INTERFACE = Code.error({\n code: 3005,\n formatter: (badType: spec.TypeReference) =>\n `Type \"${spec.describeTypeReference(badType)}\" cannot be used as an interface`,\n name: 'type-model/type-used-as-interface',\n });\n\n public static readonly JSII_3006_TYPE_USED_AS_CLASS = Code.error({\n code: 3006,\n formatter: (badType: spec.TypeReference) =>\n `Type \"${spec.describeTypeReference(badType)}\" cannot be used as a class`,\n name: 'type-model/type-used-as-class',\n });\n\n public static readonly JSII_3007_ILLEGAL_STRUCT_EXTENSION = Code.error({\n code: 3007,\n formatter: (offender: spec.Type, struct: spec.InterfaceType) =>\n `Attempt to extend or implement struct \"${struct.fqn}\" from \"${offender.fqn}\"`,\n name: 'type-model/illegal-struct-extension',\n });\n\n public static readonly JSII_3008_STRUCT_PROPS_MUST_BE_READONLY = Code.error({\n code: 3008,\n formatter: (propName: string, struct: spec.InterfaceType) =>\n `The \"${propName}\" property of struct \"${struct.fqn}\" must be \"readonly\". Rename \"${struct.fqn}\" to \"I${struct.name}\" if it is meant to be a behavioral interface.`,\n name: 'type-model/struct-props-must-be-readonly',\n });\n\n public static readonly JSII_3009_OPTIONAL_PARAMETER_BEFORE_REQUIRED = Code.error({\n code: 3009,\n formatter: (param: spec.Parameter, nextParam: spec.Parameter) =>\n `Parameter \"${param.name}\" cannot be optional, as it precedes required parameter \"${nextParam.name}\"`,\n name: 'type-model/optional-parameter-before-required',\n });\n\n public static readonly JSII_3999_INCOHERENT_TYPE_MODEL = Code.error({\n code: 3999,\n formatter: (messageText) => messageText,\n name: 'type-model/incoherent-type-model',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n // 4000 => 4999 -- TYPESCRIPT & JSII CONFIG ERRORS\n\n public static readonly JSII_4000_FAILED_TSCONFIG_VALIDATION = Code.error({\n code: 4000,\n formatter: (config: string, ruleSet: string, violations: Array<Violation>) => {\n return `Typescript compiler options in \"${config}\" are not passing validation against rule set \"${ruleSet}\", found the following rule violations:\\n${violations\n .map((v) => ` - ${v.field}: ${v.message}`)\n .join('\\n')}`;\n },\n name: 'typescript-config/invalid-tsconfig',\n });\n\n public static readonly JSII_4009_DISABLED_TSCONFIG_VALIDATION = Code.warning({\n code: 4009,\n formatter: (config: string) =>\n `Validation of typescript config \"${config}\" is disabled. This is intended for experimental setups only. Compilation might fail or produce incompatible artifacts.`,\n name: 'typescript-config/disabled-tsconfig-validation',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n // 5000 => 5999 -- LANGUAGE COMPATIBILITY ERRORS\n\n public static readonly JSII_5000_JAVA_GETTERS = Code.error({\n code: 5000,\n formatter: (badName: string, typeName: string) =>\n `Methods and properties cannot have names like \"getXxx\": those conflict with Java property getters. Rename \"${typeName}.${badName}\"`,\n name: 'language-compatibility/potential-java-getter-conflict',\n });\n\n public static readonly JSII_5001_JAVA_SETTERS = Code.error({\n code: 5001,\n formatter: (badName: string, typeName: string) =>\n `Methods and properties cannot have names like \"setXxx\": those conflict with Java property setters. Rename \"${typeName}.${badName}\"`,\n name: 'language-compatibility/potential-java-setter-conflict',\n });\n\n public static readonly JSII_5002_OVERRIDE_CHANGES_VISIBILITY = Code.error({\n code: 5002,\n formatter: (\n newElement: string,\n action: string,\n newValue: 'protected' | 'public',\n oldValue: 'protected' | 'public',\n ) => `\"${newElement}\" changes visibility to ${newValue} when ${action}. Change it to ${oldValue}`,\n name: 'language-compatibility/override-changes-visibility',\n });\n\n public static readonly JSII_5003_OVERRIDE_CHANGES_RETURN_TYPE = Code.error({\n code: 5003, // allowed\n formatter: (newElement: string, action: string, newValue: string, oldValue: string) =>\n `\"${newElement}\" changes the return type to \"${newValue}\" when ${action}. Change it to \"${oldValue}\"`,\n name: 'language-compatibility/override-changes-return-type',\n });\n\n public static readonly JSII_5004_OVERRIDE_CHANGES_PROP_TYPE = Code.error({\n code: 5004, // allowed\n formatter: (newElement: string, action: string, newType: spec.TypeReference, oldType: spec.TypeReference) =>\n `\"${newElement}\" changes the property type to \"${spec.describeTypeReference(\n newType,\n )}\" when ${action}. Change it to \"${spec.describeTypeReference(oldType)}\"`,\n name: 'language-compatibility/override-changes-property-type',\n });\n\n public static readonly JSII_5005_OVERRIDE_CHANGES_PARAM_COUNT = Code.error({\n code: 5005,\n formatter: (newElement: string, action: string, newCount: number, oldCount: number) =>\n `\"${newElement}\" has ${newCount} parameters when ${action}. It should accept ${oldCount} parameters`,\n name: 'language-compatibility/override-changes-param-count',\n });\n\n public static readonly JSII_5006_OVERRIDE_CHANGES_PARAM_TYPE = Code.error({\n code: 5006, // tbd\n formatter: (newElement: string, action: string, newParam: spec.Parameter, oldParam: spec.Parameter) =>\n `\"${newElement}\" changes the type of parameter \"${newParam.name}\" to ${spec.describeTypeReference(\n newParam.type,\n )} when ${action}. Change it to ${spec.describeTypeReference(oldParam.type)}`,\n name: 'language-compatibility/override-changes-param-type',\n });\n\n public static readonly JSII_5007_OVERRIDE_CHANGES_VARIADIC = Code.error({\n code: 5007,\n formatter: (newElement: string, action: string, newVariadic = false, oldVariadic = false) =>\n `\"${newElement}\" turns ${newVariadic ? 'variadic' : 'non variadic'} when ${action}. Make it ${\n oldVariadic ? 'variadic' : 'non-variadic'\n }`,\n name: 'language-compatibility/override-changes-variadic',\n });\n\n public static readonly JSII_5008_OVERRIDE_CHANGES_PARAM_OPTIONAL = Code.error({\n code: 5008,\n formatter: (newElement: string, action: string, newParam: spec.Parameter, oldParam: spec.Parameter) =>\n `\"${newElement}\" turns parameter \"${newParam.name}\" ${\n newParam.optional ? 'optional' : 'required'\n } when ${action}. Make it ${oldParam.optional ? 'optional' : 'required'}`,\n name: 'language-compatibility/override-changes-param-optional',\n });\n\n public static readonly JSII_5009_OVERRIDE_CHANGES_PROP_OPTIONAL = Code.error({\n code: 5009,\n formatter: (newElement: string, action: string, newOptional = false, oldOptional = false) =>\n `\"${newElement}\" turns ${newOptional ? 'optional' : 'required'} when ${action}. Make it ${\n oldOptional ? 'optional' : 'required'\n }`,\n name: 'language-compatibility/override-changes-prop-optional',\n });\n\n public static readonly JSII_5010_OVERRIDE_CHANGES_MUTABILITY = Code.error({\n code: 5010,\n formatter: (newElement: string, action: string, newReadonly = false, oldReadonly = false) =>\n `\"${newElement}\" turns ${newReadonly ? 'readonly' : 'mutable'} when ${action}. Make it ${\n oldReadonly ? 'readonly' : 'mutable'\n }`,\n name: 'language-compatibility/override-changes-mutability',\n });\n\n public static readonly JSII_5011_SUBMODULE_NAME_CONFLICT = Code.error({\n code: 5011,\n formatter: (submoduleName: string, typeName: string, reserved: readonly string[]) =>\n `Submodule \"${submoduleName}\" conflicts with \"${typeName}, as different languages could represent it as: ${reserved\n .map((x) => `\"${x}\"`)\n .join(', ')}\"`,\n name: 'language-compatibility/submodule-name-conflicts',\n });\n\n public static readonly JSII_5012_NAMESPACE_IN_TYPE = Code.error({\n code: 5012,\n formatter: (typeName: string, namespaceName: string) =>\n `All entities nested under a type (e.g: \"${typeName}\") must be concrete types, but \"${namespaceName}\" is a namespace. This structure cannot be supported in all languages (e.g: Java)`,\n name: 'language-compatibility/namespace-in-type',\n });\n\n public static readonly JSII_5013_STATIC_INSTANCE_CONFLICT = Code.error({\n code: 5013,\n formatter: (member: string, type: spec.ClassType) =>\n `Member \"${member}\" of class \"${type.fqn}\" has both a static and an instance delcaration`,\n name: 'language-compatibility/static-instance-conflict',\n });\n\n public static readonly JSII_5014_INHERITED_STATIC_CONFLICT = Code.error({\n code: 5014,\n formatter: (\n member: spec.Method | spec.Property,\n type: spec.ClassType,\n baseMember: spec.Method | spec.Property,\n baseType: spec.ClassType,\n ) =>\n `${member.static ? 'Static' : 'Instance'} member \"${member.name}\" of class \"${type.fqn}\" conflicts with ${\n baseMember.static ? 'static' : 'instance'\n } member in ancestor \"${baseType.fqn}\"`,\n name: 'language-compatibility/inherited-static-conflict',\n });\n\n public static readonly JSII_5015_REDECLARED_INTERFACE_MEMBER = Code.error({\n code: 5015,\n formatter: (memberName: string, iface: spec.InterfaceType) =>\n `Interface \"${iface.fqn}\" re-declares member \"${memberName}\". This is not supported as it results in invalid C#.`,\n name: 'language-compatibility/redeclared-interface-member',\n });\n\n public static readonly JSII_5016_PROHIBITED_MEMBER_NAME = Code.error({\n code: 5016,\n formatter: (badName: string) =>\n `Members cannot be named \"${badName}\" as it conflicts with synthetic declarations in some languages.`,\n name: 'language-compatibility/prohibited-member-name',\n });\n\n public static readonly JSII_5017_POSITIONAL_KEYWORD_CONFLICT = Code.error({\n code: 5017,\n formatter: (badName: string) =>\n `Parameter name \"${badName}\" is also the name of a property in a struct parameter. Rename the positional parameter.`,\n name: 'language-compatibility/positional-keyword-conflict',\n });\n\n public static readonly JSII_5018_RESERVED_WORD = Code.warning({\n code: 5018,\n formatter: (badName: string, languages: readonly string[]) =>\n `\"${badName}\" is a reserved word in ${languages.join(\n ', ',\n )}. Using this name may cause problems when generating language bindings. Consider a different name.`,\n name: 'language-compatibility/reserved-word',\n });\n\n public static readonly JSII_5019_MEMBER_TYPE_NAME_CONFLICT = Code.warning({\n code: 5019,\n formatter: (memberKind: 'method' | 'property', memberSymbol: ts.Symbol, declaringType: spec.Type) =>\n `The ${memberKind} name \"${memberSymbol.name}\" conflicts with the declaring ${declaringType.kind} \"${declaringType.name}\". This will result in renaming the ${declaringType.kind} to \"_${declaringType.name}\" in C#. Consider renaming \"${memberSymbol.name}\".`,\n name: 'language-compatibility/member-name-conflicts-with-type-name',\n });\n\n public static readonly JSII_5020_STATIC_MEMBER_CONFLICTS_WITH_NESTED_TYPE = Code.error({\n code: 5020,\n formatter: (\n nestingType: spec.Type,\n staticMember: spec.Property | spec.Method | spec.EnumMember,\n nestedType: spec.Type,\n ) =>\n `The static member \"${nestingType.name}.${staticMember.name}\" has the same PascalCased representation as nested type \"${nestingType.name}.${nestedType.name}\". This would result in invalid code in Go.`,\n name: 'language-compatibility/static-member-name-conflicts-with-nested-type',\n });\n\n public static readonly JSII_5021_ABSTRACT_CLASS_MISSING_PROP_IMPL = Code.error({\n code: 5021,\n formatter: (intf: spec.InterfaceType, cls: spec.ClassType, prop: string) =>\n `A declaration of \"${intf.name}.${prop}\" is missing on class \"${cls.name}\". Declare the property as \"public abstract\" if you want to defer it to subclasses.`,\n name: 'language-compatibility/abstract-class-missing-prop-impl',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n // 6000 => 6999 -- RESERVED\n\n //////////////////////////////////////////////////////////////////////////////\n // 7000 => 7999 -- DOCUMENTATION ERRORS\n\n public static readonly JSII_7000_NON_EXISTENT_PARAMETER = Code.warning({\n code: 7000,\n formatter: (method: spec.Method, param: string) =>\n `Documentation for method \"${method.name}\" refers to non-existent @param \"${param}\"`,\n name: 'documentation/non-existent-parameter',\n });\n\n public static readonly JSII_7001_ILLEGAL_HINT = Code.error({\n code: 7001,\n formatter: (hint: keyof TypeSystemHints, ...valid: readonly string[]) =>\n `Illegal use of \"@${hint}\" hint. It is only valid on ${valid.join(', ')}.`,\n name: 'documentation/illegal-hint',\n });\n\n public static readonly JSII_7999_DOCUMENTATION_ERROR = Code.error({\n code: 7999,\n formatter: (messageText) => messageText,\n name: 'documentation/documentation-error',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n // 8000 => 8999 -- JSII STYLE ENFORCEMENT\n\n public static readonly JSII_8000_PASCAL_CASED_TYPE_NAMES = Code.error({\n code: 8000,\n formatter: (badName: string, expectedName: string = pascal(badName)) =>\n `Type names must be PascalCased. Rename \"${badName}\" to \"${expectedName}\"`,\n name: 'code-style/type-names-must-use-pascal-case',\n });\n\n public static readonly JSII_8001_ALL_CAPS_ENUM_MEMBERS = Code.error({\n code: 8001,\n formatter: (badName: string, typeName: string) =>\n `Enum members must be ALL_CAPS. Rename \"${typeName}.${badName}\" to \"${constant(badName)}\"`,\n name: 'code-style/enum-members-must-use-all-caps',\n });\n\n public static readonly JSII_8002_CAMEL_CASED_MEMBERS = Code.error({\n code: 8002,\n formatter: (badName: string, typeName: string) =>\n `Method and property (unless they are static readonly) names must use camelCase. Rename \"${typeName}.${badName}\" to \"${camel(\n badName,\n )}\"`,\n name: 'code-style/member-names-must-use-camel-case',\n });\n\n public static readonly JSII_8003_STATIC_CONST_CASING = Code.error({\n code: 8003,\n formatter: (badName: string, typeName: string) =>\n `Static constant names must use ALL_CAPS, PascalCase, or camelCase. Rename \"${typeName}.${badName}\" to \"${constant(\n badName,\n )}\"`,\n name: 'code-style/static-readonly-property-casing',\n });\n\n public static readonly JSII_8004_SUBMOULE_NAME_CASING = Code.error({\n code: 8004,\n formatter: (badName: string) =>\n `Submodule namespaces must be camelCased or snake_cased. Rename \"${badName}\" to ${camel(badName)}`,\n name: 'code-style/submodule-name-casing',\n });\n\n public static readonly JSII_8005_INTERNAL_UNDERSCORE = Code.error({\n code: 8005,\n formatter: (badName: string) =>\n `Members marked with @internal must have a name starting with \"_\". Rename \"${badName}\" to \"_${badName}\"`,\n name: 'code-style/internal-members-underscore-prefix',\n });\n\n public static readonly JSII_8006_UNDERSCORE_INTERNAL = Code.error({\n code: 8006,\n formatter: (badName: string) =>\n `Members with a name starting with \"_\" (e.g: \"${badName}\") must be marked @internal`,\n name: 'code-style/underscored-members-must-be-internal',\n });\n\n public static readonly JSII_8007_BEHAVIORAL_INTERFACE_NAME = Code.error({\n code: 8007,\n formatter: (badName: string) => `Interface contains behavior. Rename \"${badName}\" to \"I${badName}\"`,\n name: 'code-style/behavioral-interface-name',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n // 9000 => 9999 -- SURPRISING ERRORS & INFORMATIONAL MESSAGES\n\n public static readonly JSII_9000_UNKNOWN_MODULE = Code.error({\n code: 9000,\n formatter: (moduleName) =>\n `Encountered use of module that is not declared in \"dependencies\" or \"peerDependencies\": \"${moduleName}\"`,\n name: 'miscellaneous/unknown-module',\n });\n\n public static readonly JSII_9001_TYPE_NOT_FOUND = Code.error({\n code: 9001,\n formatter: (typeRef: spec.NamedTypeReference) => `Type not found in the corresponding assembly: \"${typeRef.fqn}\"`,\n name: 'miscellaneous/type-not-found',\n });\n\n public static readonly JSII_9002_UNRESOLVEABLE_TYPE = Code.error({\n code: 9002,\n formatter: (reference: string) =>\n `Type \"${reference}\" is part of the public API but not exported (@internal or not exported from the package.json \"main\" file). Either export it or add @internal explicitly if you want this to be a hidden base class.`,\n name: 'miscellaneous/unresolveable-type',\n });\n\n public static readonly JSII_9003_UNRESOLVEABLE_MODULE = Code.error({\n code: 9003,\n formatter: (location: string) => `Unable to resolve module location \"${location}\"`,\n name: 'miscellaneous/unresolveable-module',\n });\n\n public static readonly JSII_9004_UNABLE_TO_COMPUTE_SIGNATURE = Code.error({\n code: 9004,\n formatter: (methodName: string, type: spec.Type) =>\n `Unable to compute signature for method \"${methodName}\" of \"${type.fqn}\"`,\n name: 'miscellaneous/unable-to-compute-signature',\n });\n\n public static readonly JSII_9996_UNNECESSARY_TOKEN = Code.message({\n code: 9996,\n formatter: () => 'Unnecessary token, consider removing it',\n name: 'miscellaneous/unnecessary-token',\n });\n\n public static readonly JSII_9997_UNKNOWN_ERROR = Code.error({\n code: 9997,\n formatter: (error: Error) => `Unknown error: ${error.message} -- ${error.stack}`,\n name: 'miscellaneous/unknown-error',\n });\n\n public static readonly JSII_9998_UNSUPPORTED_NODE = Code.message({\n code: 9998,\n formatter: (kindOrMessage: ts.SyntaxKind | string) =>\n typeof kindOrMessage === 'string'\n ? kindOrMessage\n : `Unsupported ${ts.SyntaxKind[kindOrMessage]} node. This declaration will not be accessible from other languages.`,\n name: 'miscellaneous/unsupported-node',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n\n /**\n * Determines whether a `Diagnostic` instance is a `JsiiDiagnostic` or not.\n * @param diag\n */\n public static isJsiiDiagnostic(diag: ts.Diagnostic): diag is JsiiDiagnostic {\n return (diag as unknown as JsiiDiagnostic).domain === JsiiDiagnostic.DOMAIN;\n }\n\n //////////////////////////////////////////////////////////////////////////////\n\n private static readonly JSII_9999_RELATED_INFO = Code.suggestion({\n code: 9999,\n formatter: (messageText) => messageText,\n name: 'miscellaneous/related-info',\n });\n\n //////////////////////////////////////////////////////////////////////////////\n\n /**\n * This symbol unequivocally identifies the `JsiiDiagnostic` domain.\n */\n private static readonly DOMAIN = Symbol('jsii');\n\n private readonly domain = JsiiDiagnostic.DOMAIN;\n\n public readonly category: ts.DiagnosticCategory;\n public readonly code: number = JSII_DIAGNOSTICS_CODE;\n public readonly jsiiCode: number;\n public readonly messageText: string | ts.DiagnosticMessageChain;\n\n public readonly file: ts.SourceFile | undefined;\n public readonly start: number | undefined;\n public readonly length: number | undefined;\n\n public readonly relatedInformation = new Array<ts.DiagnosticRelatedInformation>();\n\n // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\n #formatted?: string;\n\n /**\n * Creates a new `JsiiDiagnostic` with the provided properties.\n *\n * @internal\n */\n public constructor(code: Code, messageText: string | ts.DiagnosticMessageChain, location?: ts.Node) {\n this.category = code.category;\n this.jsiiCode = code.code;\n this.messageText = messageText;\n\n if (location != null) {\n this.file = location.getSourceFile();\n this.start = location.getStart(this.file);\n this.length = location.getEnd() - this.start;\n }\n }\n\n public addRelatedInformation(node: ts.Node, message: JsiiDiagnostic['messageText']): this {\n // Don't relate info into the TypeScript standard library\n if (!/[\\\\/]typescript[\\\\/]lib[\\\\/]lib\\..+\\.d\\.ts$/.test(node.getSourceFile().fileName)) {\n this.relatedInformation.push(JsiiDiagnostic.JSII_9999_RELATED_INFO.create(node, message));\n }\n // Clearing out #formatted, as this would no longer be the correct string.\n this.#formatted = undefined;\n return this;\n }\n\n /**\n * Links the provided `node` with the specified `message` as related to the\n * current diagnostic, unless `node` is undefined.\n *\n * @param node the node where the message should be attached, if any.\n * @param message the message to be attached to the diagnostic entry.\n *\n * @returns `this`\n */\n public addRelatedInformationIf(node: ts.Node | undefined, message: JsiiDiagnostic['messageText']): this {\n if (node != null) {\n return this.addRelatedInformation(node, message);\n } else {\n return this;\n }\n }\n\n /**\n * Adds related information to this `JsiiDiagnostic` instance if the provided\n * `node` is defined.\n *\n * @param node the node to bind as related information, or `undefined`.\n * @param message the message to attach to the related information.\n *\n * @returns `this`\n */\n public maybeAddRelatedInformation(node: ts.Node | undefined, message: JsiiDiagnostic['messageText']): this {\n if (node == null) {\n return this;\n }\n this.relatedInformation.push(JsiiDiagnostic.JSII_9999_RELATED_INFO.create(node, message));\n // Clearing out #formatted, as this would no longer be the correct string.\n this.#formatted = undefined;\n return this;\n }\n\n /**\n * Formats this diagnostic with color and context if possible, and returns it.\n * The formatted diagnostic is cached, so that it can be re-used. This is\n * useful for diagnostic messages involving trivia -- as the trivia may have\n * been obliterated from the `SourceFile` by the `TsCommentReplacer`, which\n * makes the error messages really confusing.\n */\n public format(projectRoot: string): string {\n if (this.#formatted == null) {\n this.#formatted = _formatDiagnostic(this, projectRoot);\n }\n return this.#formatted;\n }\n}\n\nexport type DiagnosticMessageFormatter = (...args: any[]) => JsiiDiagnostic['messageText'];\n\nexport function configureCategories(records: { [code: string]: ts.DiagnosticCategory }) {\n for (const [code, category] of Object.entries(records)) {\n const diagCode = Code.lookup(diagnosticCode(code));\n if (!diagCode) {\n throw new Error(`Unrecognized diagnostic code '${code}'`);\n }\n diagCode.category = category;\n }\n}\n\nfunction diagnosticCode(str: string): string | number {\n if (str.toLowerCase().startsWith('jsii')) {\n const re = /^JSII(\\d+)$/i.exec(str);\n if (re) {\n return parseInt(re[1], 10);\n }\n throw new Error(`Invalid diagnostic code ${str}. A number must follow code that starts with 'JSII'`);\n }\n return str;\n}\n"]}
package/lib/validator.js CHANGED
@@ -111,10 +111,14 @@ function _defaultValidations() {
111
111
  for (const type of _allTypes(assembly)) {
112
112
  if (spec.isClassType(type)) {
113
113
  for (const method of type.methods ?? []) {
114
- _validateMethodOverride(method, type);
114
+ if (!method.static) {
115
+ _validateMethodOverride(method, type);
116
+ }
115
117
  }
116
118
  for (const property of type.properties ?? []) {
117
- _validatePropertyOverride(property, type);
119
+ if (!property.static) {
120
+ _validatePropertyOverride(property, type);
121
+ }
118
122
  }
119
123
  }
120
124
  if (spec.isClassOrInterfaceType(type) && (type.interfaces?.length ?? 0) > 0) {
@@ -126,6 +130,24 @@ function _defaultValidations() {
126
130
  }
127
131
  }
128
132
  }
133
+ // Validate static members separately - they cannot be covariant
134
+ for (const type of _allTypes(assembly)) {
135
+ if (spec.isClassType(type) && type.base) {
136
+ const baseType = _dereference(type.base, assembly, validator);
137
+ if (baseType) {
138
+ for (const method of type.methods ?? []) {
139
+ if (method.static) {
140
+ _validateStaticMethodOverride(method, type, baseType);
141
+ }
142
+ }
143
+ for (const property of type.properties ?? []) {
144
+ if (property.static) {
145
+ _validateStaticPropertyOverride(property, type, baseType);
146
+ }
147
+ }
148
+ }
149
+ }
150
+ }
129
151
  /**
130
152
  * Lists all "implementations" from the given type, using the provided
131
153
  * implementation getter. Note that abstract members may be part of the
@@ -257,10 +279,17 @@ function _defaultValidations() {
257
279
  const actVisibility = actual.protected ? 'protected' : 'public';
258
280
  diagnostic(jsii_diagnostic_1.JsiiDiagnostic.JSII_5002_OVERRIDE_CHANGES_VISIBILITY.createDetached(label, action, actVisibility, expVisibility));
259
281
  }
282
+ // Allow covariant return types - actual return type can be more specific than expected
260
283
  if (!deepEqual(actual.returns, expected.returns)) {
261
- const expType = spec.describeTypeReference(expected.returns?.type);
262
- const actType = spec.describeTypeReference(actual.returns?.type);
263
- diagnostic(jsii_diagnostic_1.JsiiDiagnostic.JSII_5003_OVERRIDE_CHANGES_RETURN_TYPE.createDetached(label, action, actType, expType));
284
+ const actualReturnType = actual.returns?.type;
285
+ const expectedReturnType = expected.returns?.type;
286
+ // Check if this is a valid covariant return type (actual is more specific than expected)
287
+ const isCovariantReturn = actualReturnType && expectedReturnType && _isCovariantOf(actualReturnType, expectedReturnType);
288
+ if (!isCovariantReturn) {
289
+ const expType = spec.describeTypeReference(expectedReturnType);
290
+ const actType = spec.describeTypeReference(actualReturnType);
291
+ diagnostic(jsii_diagnostic_1.JsiiDiagnostic.JSII_5003_OVERRIDE_CHANGES_RETURN_TYPE.createDetached(label, action, actType, expType));
292
+ }
264
293
  }
265
294
  const expectedParams = expected.parameters ?? [];
266
295
  const actualParams = actual.parameters ?? [];
@@ -283,6 +312,102 @@ function _defaultValidations() {
283
312
  }
284
313
  }
285
314
  }
315
+ function _isCovariantOf(candidateType, expectedType) {
316
+ // Same type is always covariant
317
+ if (deepEqual(candidateType, expectedType)) {
318
+ return true;
319
+ }
320
+ if (!spec.isNamedTypeReference(candidateType) || !spec.isNamedTypeReference(expectedType)) {
321
+ return false;
322
+ }
323
+ const candidateTypeSpec = _dereference(candidateType.fqn, assembly, validator);
324
+ const expectedTypeSpec = _dereference(expectedType.fqn, assembly, validator);
325
+ if (!candidateTypeSpec || !expectedTypeSpec) {
326
+ return false;
327
+ }
328
+ // Handle class-to-class inheritance
329
+ if (spec.isClassType(candidateTypeSpec) && spec.isClassType(expectedTypeSpec)) {
330
+ // Check if candidateType extends expectedType (directly or indirectly)
331
+ return _classExtendsClass(candidateTypeSpec, expectedType.fqn);
332
+ }
333
+ // Handle class implementing interface
334
+ if (spec.isClassType(candidateTypeSpec) && spec.isInterfaceType(expectedTypeSpec)) {
335
+ return _classImplementsInterface(candidateTypeSpec, expectedType.fqn);
336
+ }
337
+ return false;
338
+ }
339
+ function _classExtendsClass(classType, targetFqn) {
340
+ let current = classType;
341
+ while (current.base) {
342
+ if (current.base === targetFqn) {
343
+ return true;
344
+ }
345
+ const baseType = _dereference(current.base, assembly, validator);
346
+ if (!spec.isClassType(baseType)) {
347
+ break;
348
+ }
349
+ current = baseType;
350
+ }
351
+ return false;
352
+ }
353
+ function _classImplementsInterface(classType, interfaceFqn) {
354
+ // Check direct interfaces
355
+ if (classType.interfaces?.includes(interfaceFqn)) {
356
+ return true;
357
+ }
358
+ // Check inherited interfaces
359
+ if (classType.interfaces) {
360
+ for (const iface of classType.interfaces) {
361
+ const ifaceType = _dereference(iface, assembly, validator);
362
+ if (spec.isInterfaceType(ifaceType) && _interfaceExtendsInterface(ifaceType, interfaceFqn)) {
363
+ return true;
364
+ }
365
+ }
366
+ }
367
+ // Check base class interfaces
368
+ if (classType.base) {
369
+ const baseType = _dereference(classType.base, assembly, validator);
370
+ if (spec.isClassType(baseType)) {
371
+ return _classImplementsInterface(baseType, interfaceFqn);
372
+ }
373
+ }
374
+ return false;
375
+ }
376
+ function _interfaceExtendsInterface(interfaceType, targetFqn) {
377
+ if (interfaceType.fqn === targetFqn) {
378
+ return true;
379
+ }
380
+ if (interfaceType.interfaces) {
381
+ for (const iface of interfaceType.interfaces) {
382
+ if (iface === targetFqn) {
383
+ return true;
384
+ }
385
+ const ifaceType = _dereference(iface, assembly, validator);
386
+ if (spec.isInterfaceType(ifaceType) && _interfaceExtendsInterface(ifaceType, targetFqn)) {
387
+ return true;
388
+ }
389
+ }
390
+ }
391
+ return false;
392
+ }
393
+ function _validateStaticMethodOverride(method, type, baseType) {
394
+ const overridden = (baseType.methods ?? []).find((m) => m.name === method.name && m.static);
395
+ if (overridden) {
396
+ // Static methods must have exact same signature - no covariance allowed
397
+ if (!deepEqual(method.returns, overridden.returns)) {
398
+ diagnostic(jsii_diagnostic_1.JsiiDiagnostic.JSII_5003_OVERRIDE_CHANGES_RETURN_TYPE.createDetached(`${type.fqn}#${method.name}`, `overriding ${baseType.fqn}`, spec.describeTypeReference(method.returns?.type), spec.describeTypeReference(overridden.returns?.type)));
399
+ }
400
+ }
401
+ }
402
+ function _validateStaticPropertyOverride(property, type, baseType) {
403
+ const overridden = (baseType.properties ?? []).find((p) => p.name === property.name && p.static);
404
+ if (overridden) {
405
+ // Static properties must have exact same type - no covariance allowed
406
+ if (!deepEqual(property.type, overridden.type)) {
407
+ diagnostic(jsii_diagnostic_1.JsiiDiagnostic.JSII_5004_OVERRIDE_CHANGES_PROP_TYPE.createDetached(`${type.fqn}#${property.name}`, `overriding ${baseType.fqn}`, property.type, overridden.type));
408
+ }
409
+ }
410
+ }
286
411
  function _assertPropertiesMatch(expected, actual, label, action) {
287
412
  const actualNode = bindings.getPropertyRelatedNode(actual);
288
413
  const expectedNode = bindings.getPropertyRelatedNode(expected);
@@ -291,7 +416,7 @@ function _defaultValidations() {
291
416
  const actVisibility = actual.protected ? 'protected' : 'public';
292
417
  diagnostic(jsii_diagnostic_1.JsiiDiagnostic.JSII_5002_OVERRIDE_CHANGES_VISIBILITY.create(actualNode?.modifiers?.find((mod) => mod.kind === ts.SyntaxKind.PublicKeyword || mod.kind === ts.SyntaxKind.ProtectedKeyword) ?? declarationName(actualNode), label, action, actVisibility, expVisibility).maybeAddRelatedInformation(expectedNode?.modifiers?.find((mod) => mod.kind === ts.SyntaxKind.PublicKeyword || mod.kind === ts.SyntaxKind.ProtectedKeyword) ?? declarationName(expectedNode), 'The implemented declaration is here.'));
293
418
  }
294
- if (!deepEqual(expected.type, actual.type)) {
419
+ if (!_isCovariantOf(actual.type, expected.type)) {
295
420
  diagnostic(jsii_diagnostic_1.JsiiDiagnostic.JSII_5004_OVERRIDE_CHANGES_PROP_TYPE.create(actualNode?.type ?? declarationName(actualNode), label, action, actual.type, expected.type).maybeAddRelatedInformation(expectedNode?.type ?? declarationName(expectedNode), 'The implemented declaration is here.'));
296
421
  }
297
422
  if (expected.immutable !== actual.immutable) {
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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","sourcesContent":["import * as assert from 'node:assert';\nimport * as spec from '@jsii/spec';\nimport * as deepEqual from 'fast-deep-equal';\nimport * as ts from 'typescript';\nimport * as Case from './case';\nimport { Emitter } from './emitter';\nimport { JsiiDiagnostic } from './jsii-diagnostic';\nimport { getRelatedNode } from './node-bindings';\nimport * as bindings from './node-bindings';\nimport { ProjectInfo } from './project-info';\n\nexport class Validator implements Emitter {\n public static VALIDATIONS: ValidationFunction[] = _defaultValidations();\n\n public constructor(public readonly projectInfo: ProjectInfo, public readonly assembly: spec.Assembly) {}\n\n public emit(): ts.EmitResult {\n const diagnostics = new Array<ts.Diagnostic>();\n\n for (const validation of Validator.VALIDATIONS) {\n validation(this, this.assembly, diagnostics.push.bind(diagnostics));\n }\n\n return {\n diagnostics: diagnostics,\n emitSkipped: diagnostics.some((diag) => diag.category === ts.DiagnosticCategory.Error),\n };\n }\n}\n\nexport type DiagnosticEmitter = (diag: JsiiDiagnostic) => void;\nexport type ValidationFunction = (validator: Validator, assembly: spec.Assembly, diagnostic: DiagnosticEmitter) => void;\n\nfunction _defaultValidations(): ValidationFunction[] {\n return [\n _enumMembersMustUserUpperSnakeCase,\n _memberNamesMustUseCamelCase,\n _staticConstantNamesMustUseUpperSnakeCase,\n _memberNamesMustNotLookLikeJavaGettersOrSetters,\n _allTypeReferencesAreValid,\n _inehritanceDoesNotChangeContracts,\n _staticMembersAndNestedTypesMustNotSharePascalCaseName,\n _abstractClassesMustImplementAllProperties,\n ];\n\n function _enumMembersMustUserUpperSnakeCase(_: Validator, assembly: spec.Assembly, diagnostic: DiagnosticEmitter) {\n for (const type of _allTypes(assembly)) {\n if (!spec.isEnumType(type)) {\n continue;\n }\n\n for (const member of type.members) {\n if (member.name && !isConstantCase(member.name)) {\n diagnostic(JsiiDiagnostic.JSII_8001_ALL_CAPS_ENUM_MEMBERS.createDetached(member.name, type.fqn));\n }\n }\n }\n }\n\n function _memberNamesMustUseCamelCase(_: Validator, assembly: spec.Assembly, diagnostic: DiagnosticEmitter) {\n for (const { member, type } of _allMembers(assembly)) {\n if (member.static && (member as spec.Property).const) {\n continue;\n }\n if (member.name && member.name !== Case.camel(member.name)) {\n diagnostic(JsiiDiagnostic.JSII_8002_CAMEL_CASED_MEMBERS.createDetached(member.name, type.fqn));\n }\n }\n }\n\n function _staticConstantNamesMustUseUpperSnakeCase(\n _: Validator,\n assembly: spec.Assembly,\n diagnostic: DiagnosticEmitter,\n ) {\n for (const { member, type } of _allMembers(assembly)) {\n if (!member.static || !(member as spec.Property).const) {\n continue;\n }\n if (\n member.name &&\n !isConstantCase(member.name) &&\n member.name !== Case.pascal(member.name) &&\n member.name !== Case.camel(member.name)\n ) {\n diagnostic(JsiiDiagnostic.JSII_8003_STATIC_CONST_CASING.createDetached(member.name, type.name));\n }\n }\n }\n\n function _memberNamesMustNotLookLikeJavaGettersOrSetters(\n _: Validator,\n assembly: spec.Assembly,\n diagnostic: DiagnosticEmitter,\n ) {\n for (const { member, type } of _allMembers(assembly)) {\n if (!member.name) {\n continue;\n }\n const snakeName = Case.snake(member.name);\n if (snakeName.startsWith('get_') && _isEmpty((member as spec.Method).parameters)) {\n diagnostic(JsiiDiagnostic.JSII_5000_JAVA_GETTERS.createDetached(member.name, type.name));\n } else if (snakeName.startsWith('set_') && ((member as spec.Method).parameters ?? []).length === 1) {\n diagnostic(JsiiDiagnostic.JSII_5001_JAVA_SETTERS.createDetached(member.name, type.name));\n }\n }\n }\n\n function _allTypeReferencesAreValid(validator: Validator, assembly: spec.Assembly, diagnostic: DiagnosticEmitter) {\n for (const typeRef of _allTypeReferences(assembly)) {\n const [assm] = typeRef.fqn.split('.');\n if (assembly.name === assm) {\n if (!(typeRef.fqn in (assembly.types ?? {}))) {\n diagnostic(\n JsiiDiagnostic.JSII_3000_EXPORTED_API_USES_HIDDEN_TYPE.create(\n typeRef.node!, // Pretend there is always a value\n typeRef.fqn,\n ),\n );\n }\n continue;\n }\n const foreignAssm = validator.projectInfo.dependencyClosure.find((dep) => dep.name === assm);\n if (!foreignAssm) {\n diagnostic(JsiiDiagnostic.JSII_9000_UNKNOWN_MODULE.createDetached(assm));\n continue;\n }\n if (!(typeRef.fqn in (foreignAssm.types ?? {}))) {\n diagnostic(JsiiDiagnostic.JSII_9001_TYPE_NOT_FOUND.createDetached(typeRef));\n }\n }\n }\n\n function _inehritanceDoesNotChangeContracts(\n validator: Validator,\n assembly: spec.Assembly,\n diagnostic: DiagnosticEmitter,\n ) {\n for (const type of _allTypes(assembly)) {\n if (spec.isClassType(type)) {\n for (const method of type.methods ?? []) {\n _validateMethodOverride(method, type);\n }\n for (const property of type.properties ?? []) {\n _validatePropertyOverride(property, type);\n }\n }\n if (spec.isClassOrInterfaceType(type) && (type.interfaces?.length ?? 0) > 0) {\n for (const method of _allImplementations(type, (t) => t.methods)) {\n _validateMethodImplementation(method, type);\n }\n for (const property of _allImplementations(type, (t) => t.properties)) {\n _validatePropertyImplementation(property, type);\n }\n }\n }\n\n /**\n * Lists all \"implementations\" from the given type, using the provided\n * implementation getter. Note that abstract members may be part of the\n * result (in particular, if `type` is an interface type, or if it's an\n * abstract class with unimplemented members) -- I just couldn't come up\n * with a name that actually describes this.\n *\n * @param type the type which implemented members are needed.\n * @param getter the getter to obtain methods or properties from the type.\n *\n * @returns a list of members (possibly empty, always defined)\n */\n function _allImplementations<T extends spec.Property | spec.Method>(\n type: spec.ClassType | spec.InterfaceType,\n getter: (type: spec.ClassType | spec.InterfaceType) => T[] | undefined,\n ): T[] {\n const result = new Array<T>();\n const known = new Set<string>();\n\n for (const member of getter(type) ?? []) {\n result.push(member);\n known.add(member.name);\n }\n\n if (spec.isClassType(type) && type.base) {\n // We have a parent class, collect their concrete members, too (recursively)...\n const base = _dereference(type.base, assembly, validator);\n assert(base != null && spec.isClassType(base));\n for (const member of _allImplementations(base, getter)) {\n if (known.has(member.name)) {\n continue;\n }\n // The member is copied, so that its `overrides` property won't be\n // altered, since this member is \"borrowed\" from a parent type. We\n // only check it, but should not record `overrides` relationships to\n // it as those could be invalid per the parent type (i.e: the parent\n // member may not be able to implement an interface, if that type does\n // not actually declare implementing that).\n const memberCopy = { ...member };\n // Forward the related node if there's one, so diagnostics are bound.\n const node = bindings.getRelatedNode(member);\n if (node != null) {\n bindings.setRelatedNode(memberCopy, node);\n }\n\n result.push(memberCopy);\n known.add(member.name);\n }\n }\n\n return result;\n }\n\n function _validateMethodOverride(method: spec.Method, type: spec.ClassType): boolean {\n if (!type.base) {\n return false;\n }\n const baseType = _dereference(type.base, assembly, validator) as spec.ClassType;\n if (!baseType) {\n return false;\n }\n const overridden = (baseType.methods ?? []).find((m) => m.name === method.name);\n if (!overridden) {\n return _validateMethodOverride(method, baseType);\n }\n _assertSignaturesMatch(overridden, method, `${type.fqn}#${method.name}`, `overriding ${baseType.fqn}`);\n method.overrides = baseType.fqn;\n return true;\n }\n\n function _validatePropertyOverride(property: spec.Property, type: spec.ClassType): boolean {\n if (!type.base) {\n return false;\n }\n const baseType = _dereference(type.base, assembly, validator) as spec.ClassType;\n if (!baseType) {\n return false;\n }\n const overridden = (baseType.properties ?? []).find((p) => p.name === property.name);\n if (!overridden) {\n return _validatePropertyOverride(property, baseType);\n }\n _assertPropertiesMatch(overridden, property, `${type.fqn}#${property.name}`, `overriding ${baseType.fqn}`);\n property.overrides = baseType.fqn;\n return true;\n }\n\n function _validateMethodImplementation(method: spec.Method, type: spec.ClassType | spec.InterfaceType): boolean {\n if (!type.interfaces) {\n // Abstract classes may not directly implement all members, need to check their supertypes...\n if (spec.isClassType(type) && type.base && type.abstract) {\n return _validateMethodImplementation(method, _dereference(type.base, assembly, validator) as spec.ClassType);\n }\n return false;\n }\n for (const iface of type.interfaces) {\n const ifaceType = _dereference(iface, assembly, validator) as spec.InterfaceType;\n const implemented = (ifaceType.methods ?? []).find((m) => m.name === method.name);\n if (implemented) {\n _assertSignaturesMatch(implemented, method, `${type.fqn}#${method.name}`, `implementing ${ifaceType.fqn}`);\n // We won't replace a previous overrides declaration from a method override, as those have\n // higher precedence than an initial implementation.\n method.overrides = method.overrides ?? iface;\n return true;\n }\n if (_validateMethodImplementation(method, ifaceType)) {\n return true;\n }\n }\n return false;\n }\n\n function _validatePropertyImplementation(\n property: spec.Property,\n type: spec.ClassType | spec.InterfaceType,\n ): boolean {\n if (!type.interfaces) {\n // Abstract classes may not directly implement all members, need to check their supertypes...\n if (spec.isClassType(type) && type.base && type.abstract) {\n return _validatePropertyImplementation(\n property,\n _dereference(type.base, assembly, validator) as spec.ClassType,\n );\n }\n return false;\n }\n for (const iface of type.interfaces) {\n const ifaceType = _dereference(iface, assembly, validator) as spec.InterfaceType;\n const implemented = (ifaceType.properties ?? []).find((p) => p.name === property.name);\n if (implemented) {\n _assertPropertiesMatch(\n implemented,\n property,\n `${type.fqn}#${property.name}`,\n `implementing ${ifaceType.fqn}`,\n );\n // We won't replace a previous overrides declaration from a property override, as those\n // have higher precedence than an initial implementation.\n property.overrides = property.overrides ?? ifaceType.fqn;\n return true;\n }\n if (_validatePropertyImplementation(property, ifaceType)) {\n return true;\n }\n }\n return false;\n }\n\n function _assertSignaturesMatch(expected: spec.Method, actual: spec.Method, label: string, action: string) {\n if (!!expected.protected !== !!actual.protected) {\n const expVisibility = expected.protected ? 'protected' : 'public';\n const actVisibility = actual.protected ? 'protected' : 'public';\n diagnostic(\n JsiiDiagnostic.JSII_5002_OVERRIDE_CHANGES_VISIBILITY.createDetached(\n label,\n action,\n actVisibility,\n expVisibility,\n ),\n );\n }\n if (!deepEqual(actual.returns, expected.returns)) {\n const expType = spec.describeTypeReference(expected.returns?.type);\n const actType = spec.describeTypeReference(actual.returns?.type);\n diagnostic(\n JsiiDiagnostic.JSII_5003_OVERRIDE_CHANGES_RETURN_TYPE.createDetached(label, action, actType, expType),\n );\n }\n const expectedParams = expected.parameters ?? [];\n const actualParams = actual.parameters ?? [];\n if (expectedParams.length !== actualParams.length) {\n diagnostic(\n JsiiDiagnostic.JSII_5005_OVERRIDE_CHANGES_PARAM_COUNT.createDetached(\n label,\n action,\n actualParams.length,\n expectedParams.length,\n ),\n );\n return;\n }\n for (let i = 0; i < expectedParams.length; i++) {\n const expParam = expectedParams[i];\n const actParam = actualParams[i];\n if (!deepEqual(expParam.type, actParam.type)) {\n diagnostic(\n JsiiDiagnostic.JSII_5006_OVERRIDE_CHANGES_PARAM_TYPE.createDetached(label, action, actParam, expParam),\n );\n }\n // Not-ing those to force the values to a strictly boolean context (they're optional, undefined means false)\n if (expParam.variadic !== actParam.variadic) {\n diagnostic(\n JsiiDiagnostic.JSII_5007_OVERRIDE_CHANGES_VARIADIC.createDetached(\n label,\n action,\n actParam.variadic,\n expParam.variadic,\n ),\n );\n }\n if (expParam.optional !== actParam.optional) {\n diagnostic(\n JsiiDiagnostic.JSII_5008_OVERRIDE_CHANGES_PARAM_OPTIONAL.createDetached(label, action, actParam, expParam),\n );\n }\n }\n }\n\n function _assertPropertiesMatch(expected: spec.Property, actual: spec.Property, label: string, action: string) {\n const actualNode = bindings.getPropertyRelatedNode(actual);\n const expectedNode = bindings.getPropertyRelatedNode(expected);\n if (!!expected.protected !== !!actual.protected) {\n const expVisibility = expected.protected ? 'protected' : 'public';\n const actVisibility = actual.protected ? 'protected' : 'public';\n diagnostic(\n JsiiDiagnostic.JSII_5002_OVERRIDE_CHANGES_VISIBILITY.create(\n actualNode?.modifiers?.find(\n (mod) => mod.kind === ts.SyntaxKind.PublicKeyword || mod.kind === ts.SyntaxKind.ProtectedKeyword,\n ) ?? declarationName(actualNode),\n label,\n action,\n actVisibility,\n expVisibility,\n ).maybeAddRelatedInformation(\n expectedNode?.modifiers?.find(\n (mod) => mod.kind === ts.SyntaxKind.PublicKeyword || mod.kind === ts.SyntaxKind.ProtectedKeyword,\n ) ?? declarationName(expectedNode),\n 'The implemented declaration is here.',\n ),\n );\n }\n if (!deepEqual(expected.type, actual.type)) {\n diagnostic(\n JsiiDiagnostic.JSII_5004_OVERRIDE_CHANGES_PROP_TYPE.create(\n actualNode?.type ?? declarationName(actualNode),\n label,\n action,\n actual.type,\n expected.type,\n ).maybeAddRelatedInformation(\n expectedNode?.type ?? declarationName(expectedNode),\n 'The implemented declaration is here.',\n ),\n );\n }\n if (expected.immutable !== actual.immutable) {\n diagnostic(\n JsiiDiagnostic.JSII_5010_OVERRIDE_CHANGES_MUTABILITY.create(\n actualNode?.modifiers?.find((mod) => mod.kind === ts.SyntaxKind.ReadonlyKeyword) ??\n declarationName(actualNode),\n label,\n action,\n actual.immutable,\n expected.immutable,\n ).maybeAddRelatedInformation(\n expectedNode?.modifiers?.find((mod) => mod.kind === ts.SyntaxKind.ReadonlyKeyword) ??\n declarationName(expectedNode),\n 'The implemented declaration is here.',\n ),\n );\n }\n if (expected.optional !== actual.optional) {\n diagnostic(\n JsiiDiagnostic.JSII_5009_OVERRIDE_CHANGES_PROP_OPTIONAL.create(\n actualNode?.questionToken ?? actualNode?.type ?? declarationName(actualNode),\n label,\n action,\n actual.optional,\n expected.optional,\n ).maybeAddRelatedInformation(\n expectedNode?.questionToken ?? expectedNode?.type ?? declarationName(expectedNode),\n 'The implemented declaration is here.',\n ),\n );\n }\n }\n }\n\n /**\n * Abstract classes that implement an interface should have a declaration for every member.\n *\n * For non-optional members, TypeScript already enforces this. This leaves the user the\n * ability to forget optional properties (`readonly prop?: string`).\n *\n * At least our codegen for this case fails in C#, and I'm not convinced it does the right\n * thing in Java either. So we will disallow this, and require users to declare these\n * fields on the class. It can always be `public abstract readonly prop?: string` if they\n * don't want to give an implementation yet.\n */\n function _abstractClassesMustImplementAllProperties(\n validator: Validator,\n assembly: spec.Assembly,\n diagnostic: DiagnosticEmitter,\n ) {\n for (const type of _allTypes(assembly)) {\n if (!spec.isClassType(type) || !type.abstract) {\n continue;\n }\n\n const classProps = collectClassProps(type, new Set());\n\n for (const implFqn of type.interfaces ?? []) {\n checkInterfacePropsImplemented(implFqn, type, classProps);\n }\n }\n\n /**\n * Return all property names declared on this class and its base classes\n */\n function collectClassProps(type: spec.ClassType, into: Set<string>): Set<string> {\n for (const prop of type.properties ?? []) {\n into.add(prop.name);\n }\n\n if (type.base) {\n const base = _dereference(type.base, assembly, validator);\n if (spec.isClassType(base)) {\n collectClassProps(base, into);\n }\n }\n\n return into;\n }\n\n function checkInterfacePropsImplemented(interfaceFqn: string, cls: spec.ClassType, propNames: Set<string>) {\n const intf = _dereference(interfaceFqn, assembly, validator);\n if (!spec.isInterfaceType(intf)) {\n return;\n }\n\n // We only have to check for optional properties, because anything required\n // would have been caught by the TypeScript compiler already.\n for (const prop of intf.properties ?? []) {\n if (!prop.optional) {\n continue;\n }\n\n if (!propNames.has(prop.name)) {\n diagnostic(\n JsiiDiagnostic.JSII_5021_ABSTRACT_CLASS_MISSING_PROP_IMPL.create(\n bindings.getClassOrInterfaceRelatedNode(cls),\n intf,\n cls,\n prop.name,\n ).maybeAddRelatedInformation(bindings.getPropertyRelatedNode(prop), 'The implemented declaration is here.'),\n );\n }\n }\n\n for (const extFqn of intf.interfaces ?? []) {\n checkInterfacePropsImplemented(extFqn, cls, propNames);\n }\n }\n }\n\n function _staticMembersAndNestedTypesMustNotSharePascalCaseName(\n _: Validator,\n assembly: spec.Assembly,\n diagnostic: DiagnosticEmitter,\n ) {\n for (const nestedType of Object.values(assembly.types ?? {})) {\n if (nestedType.namespace == null) {\n continue;\n }\n const nestingType = assembly.types![`${assembly.name}.${nestedType.namespace}`];\n if (nestingType == null) {\n continue;\n }\n const nestedTypeName = Case.pascal(nestedType.name);\n for (const { name, member } of staticMembers(nestingType)) {\n if (name === nestedTypeName) {\n let diag = JsiiDiagnostic.JSII_5020_STATIC_MEMBER_CONFLICTS_WITH_NESTED_TYPE.create(\n getRelatedNode(member)!,\n nestingType,\n member,\n nestedType,\n );\n const nestedTypeNode = getRelatedNode(nestedType);\n if (nestedTypeNode != null) {\n diag = diag.addRelatedInformation(nestedTypeNode, 'This is the conflicting nested type declaration');\n }\n diagnostic(diag);\n }\n }\n }\n\n function staticMembers(type: spec.Type) {\n if (spec.isClassOrInterfaceType(type)) {\n return [\n ...(type.methods?.filter((method) => method.static) ?? []),\n ...(type.properties?.filter((prop) => prop.static) ?? []),\n ].map((member) => ({ name: Case.pascal(member.name), member }));\n }\n return type.members.map((member) => ({ name: member.name, member }));\n }\n }\n}\n\nfunction _allTypes(assm: spec.Assembly): spec.Type[] {\n return Object.values(assm.types ?? {});\n}\n\nfunction _allMethods(assm: spec.Assembly): Array<{ member: spec.Method; type: spec.Type }> {\n const methods = new Array<{ member: spec.Method; type: spec.Type }>();\n for (const type of _allTypes(assm)) {\n if (!spec.isClassOrInterfaceType(type)) {\n continue;\n }\n if (!type.methods) {\n continue;\n }\n for (const method of type.methods) methods.push({ member: method, type });\n }\n return methods;\n}\n\nfunction _allProperties(assm: spec.Assembly): Array<{ member: spec.Property; type: spec.Type }> {\n const properties = new Array<{ member: spec.Property; type: spec.Type }>();\n for (const type of _allTypes(assm)) {\n if (!spec.isClassOrInterfaceType(type)) {\n continue;\n }\n if (!type.properties) {\n continue;\n }\n for (const property of type.properties) properties.push({ member: property, type });\n }\n return properties;\n}\n\nfunction _allMembers(assm: spec.Assembly): Array<{ member: spec.Property | spec.Method; type: spec.Type }> {\n return [..._allMethods(assm), ..._allProperties(assm)];\n}\n\ninterface AnnotatedTypeReference extends spec.NamedTypeReference {\n readonly node: ts.Node | undefined;\n}\n\nfunction _allTypeReferences(assm: spec.Assembly): readonly AnnotatedTypeReference[] {\n const typeReferences = new Array<AnnotatedTypeReference>();\n for (const type of _allTypes(assm)) {\n if (!spec.isClassOrInterfaceType(type)) {\n continue;\n }\n if (spec.isClassType(type)) {\n const node = bindings.getClassRelatedNode(type);\n if (type.base) {\n typeReferences.push({\n fqn: type.base,\n node: node?.heritageClauses?.find((hc) => hc.token === ts.SyntaxKind.ExtendsKeyword)?.types[0],\n });\n }\n if (type.initializer?.parameters) {\n for (const param of type.initializer.parameters) {\n _collectTypeReferences(param.type, bindings.getParameterRelatedNode(param)?.type);\n }\n }\n }\n if (type.interfaces) {\n const node = bindings.getClassOrInterfaceRelatedNode(type);\n for (const iface of type.interfaces) {\n typeReferences.push({\n fqn: iface,\n node: node?.heritageClauses?.find(\n (hc) =>\n hc.token ===\n (spec.isInterfaceType(type) ? ts.SyntaxKind.ImplementsKeyword : ts.SyntaxKind.ExtendsKeyword),\n ),\n });\n }\n }\n }\n for (const { member: prop } of _allProperties(assm)) {\n _collectTypeReferences(prop.type, bindings.getPropertyRelatedNode(prop)?.type);\n }\n for (const { member: meth } of _allMethods(assm)) {\n if (meth.returns) {\n _collectTypeReferences(meth.returns.type, bindings.getMethodRelatedNode(meth)?.type);\n }\n for (const param of meth.parameters ?? []) {\n _collectTypeReferences(param.type, bindings.getParameterRelatedNode(param)?.type);\n }\n }\n return typeReferences;\n\n function _collectTypeReferences(type: spec.TypeReference, node: ts.Node | undefined): void {\n if (spec.isNamedTypeReference(type)) {\n typeReferences.push({ ...type, node });\n } else if (spec.isCollectionTypeReference(type)) {\n _collectTypeReferences(type.collection.elementtype, node);\n } else if (spec.isUnionTypeReference(type)) {\n for (const t of type.union.types) _collectTypeReferences(t, node);\n }\n }\n}\n\nfunction _dereference(\n typeRef: string | spec.NamedTypeReference,\n assembly: spec.Assembly,\n validator: Validator,\n): spec.Type | undefined {\n if (typeof typeRef !== 'string') {\n typeRef = typeRef.fqn;\n }\n const [assm] = typeRef.split('.');\n if (assembly.name === assm) {\n return assembly.types?.[typeRef];\n }\n const foreignAssm = validator.projectInfo.dependencyClosure.find((dep) => dep.name === assm);\n return foreignAssm?.types?.[typeRef];\n}\n\nfunction _isEmpty(array: undefined | any[]): array is undefined {\n return array == null || array.length === 0;\n}\n\n/**\n * Return whether an identifier only consists of upperchase characters, digits and underscores\n *\n * We have our own check here (isConstantCase) which is more lenient than what\n * `case.constant()` prescribes. We also want to allow combinations of letters\n * and digits without underscores: `C5A`, which `case` would force to `C5_A`.\n * The hint we print will still use `case.constant()` but that is fine.\n */\nfunction isConstantCase(x: string) {\n return !/[^A-Z0-9_]/.exec(x);\n}\n\n/**\n * Obtains the name of the given declaration, if it has one, or returns the declaration itself.\n * This function is meant to be used as a convenience to obtain the `ts.Node` to bind a\n * `JsiiDianostic` instance on.\n *\n * It may return `undefined` but is typed as `ts.Node` so that it is easier to use with\n * `JsiiDiagnostic` factories.\n *\n * @param decl the declaration which name is needed.\n *\n * @returns the name of the declaration if it has one, or the declaration itself. Might return\n * `undefined` if the provided declaration is undefined.\n */\nfunction declarationName(decl: ts.Declaration | ts.Expression | undefined): ts.Node {\n if (decl == null) {\n // Pretend we returned a node - this is used to create diagnostics, worst case it'll be unbound.\n return decl as any;\n }\n return ts.getNameOfDeclaration(decl) ?? decl;\n}\n"]}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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","sourcesContent":["import * as assert from 'node:assert';\nimport * as spec from '@jsii/spec';\nimport * as deepEqual from 'fast-deep-equal';\nimport * as ts from 'typescript';\nimport * as Case from './case';\nimport { Emitter } from './emitter';\nimport { JsiiDiagnostic } from './jsii-diagnostic';\nimport { getRelatedNode } from './node-bindings';\nimport * as bindings from './node-bindings';\nimport { ProjectInfo } from './project-info';\n\nexport class Validator implements Emitter {\n public static VALIDATIONS: ValidationFunction[] = _defaultValidations();\n\n public constructor(public readonly projectInfo: ProjectInfo, public readonly assembly: spec.Assembly) {}\n\n public emit(): ts.EmitResult {\n const diagnostics = new Array<ts.Diagnostic>();\n\n for (const validation of Validator.VALIDATIONS) {\n validation(this, this.assembly, diagnostics.push.bind(diagnostics));\n }\n\n return {\n diagnostics: diagnostics,\n emitSkipped: diagnostics.some((diag) => diag.category === ts.DiagnosticCategory.Error),\n };\n }\n}\n\nexport type DiagnosticEmitter = (diag: JsiiDiagnostic) => void;\nexport type ValidationFunction = (validator: Validator, assembly: spec.Assembly, diagnostic: DiagnosticEmitter) => void;\n\nfunction _defaultValidations(): ValidationFunction[] {\n return [\n _enumMembersMustUserUpperSnakeCase,\n _memberNamesMustUseCamelCase,\n _staticConstantNamesMustUseUpperSnakeCase,\n _memberNamesMustNotLookLikeJavaGettersOrSetters,\n _allTypeReferencesAreValid,\n _inehritanceDoesNotChangeContracts,\n _staticMembersAndNestedTypesMustNotSharePascalCaseName,\n _abstractClassesMustImplementAllProperties,\n ];\n\n function _enumMembersMustUserUpperSnakeCase(_: Validator, assembly: spec.Assembly, diagnostic: DiagnosticEmitter) {\n for (const type of _allTypes(assembly)) {\n if (!spec.isEnumType(type)) {\n continue;\n }\n\n for (const member of type.members) {\n if (member.name && !isConstantCase(member.name)) {\n diagnostic(JsiiDiagnostic.JSII_8001_ALL_CAPS_ENUM_MEMBERS.createDetached(member.name, type.fqn));\n }\n }\n }\n }\n\n function _memberNamesMustUseCamelCase(_: Validator, assembly: spec.Assembly, diagnostic: DiagnosticEmitter) {\n for (const { member, type } of _allMembers(assembly)) {\n if (member.static && (member as spec.Property).const) {\n continue;\n }\n if (member.name && member.name !== Case.camel(member.name)) {\n diagnostic(JsiiDiagnostic.JSII_8002_CAMEL_CASED_MEMBERS.createDetached(member.name, type.fqn));\n }\n }\n }\n\n function _staticConstantNamesMustUseUpperSnakeCase(\n _: Validator,\n assembly: spec.Assembly,\n diagnostic: DiagnosticEmitter,\n ) {\n for (const { member, type } of _allMembers(assembly)) {\n if (!member.static || !(member as spec.Property).const) {\n continue;\n }\n if (\n member.name &&\n !isConstantCase(member.name) &&\n member.name !== Case.pascal(member.name) &&\n member.name !== Case.camel(member.name)\n ) {\n diagnostic(JsiiDiagnostic.JSII_8003_STATIC_CONST_CASING.createDetached(member.name, type.name));\n }\n }\n }\n\n function _memberNamesMustNotLookLikeJavaGettersOrSetters(\n _: Validator,\n assembly: spec.Assembly,\n diagnostic: DiagnosticEmitter,\n ) {\n for (const { member, type } of _allMembers(assembly)) {\n if (!member.name) {\n continue;\n }\n const snakeName = Case.snake(member.name);\n if (snakeName.startsWith('get_') && _isEmpty((member as spec.Method).parameters)) {\n diagnostic(JsiiDiagnostic.JSII_5000_JAVA_GETTERS.createDetached(member.name, type.name));\n } else if (snakeName.startsWith('set_') && ((member as spec.Method).parameters ?? []).length === 1) {\n diagnostic(JsiiDiagnostic.JSII_5001_JAVA_SETTERS.createDetached(member.name, type.name));\n }\n }\n }\n\n function _allTypeReferencesAreValid(validator: Validator, assembly: spec.Assembly, diagnostic: DiagnosticEmitter) {\n for (const typeRef of _allTypeReferences(assembly)) {\n const [assm] = typeRef.fqn.split('.');\n if (assembly.name === assm) {\n if (!(typeRef.fqn in (assembly.types ?? {}))) {\n diagnostic(\n JsiiDiagnostic.JSII_3000_EXPORTED_API_USES_HIDDEN_TYPE.create(\n typeRef.node!, // Pretend there is always a value\n typeRef.fqn,\n ),\n );\n }\n continue;\n }\n const foreignAssm = validator.projectInfo.dependencyClosure.find((dep) => dep.name === assm);\n if (!foreignAssm) {\n diagnostic(JsiiDiagnostic.JSII_9000_UNKNOWN_MODULE.createDetached(assm));\n continue;\n }\n if (!(typeRef.fqn in (foreignAssm.types ?? {}))) {\n diagnostic(JsiiDiagnostic.JSII_9001_TYPE_NOT_FOUND.createDetached(typeRef));\n }\n }\n }\n\n function _inehritanceDoesNotChangeContracts(\n validator: Validator,\n assembly: spec.Assembly,\n diagnostic: DiagnosticEmitter,\n ) {\n for (const type of _allTypes(assembly)) {\n if (spec.isClassType(type)) {\n for (const method of type.methods ?? []) {\n if (!method.static) {\n _validateMethodOverride(method, type);\n }\n }\n for (const property of type.properties ?? []) {\n if (!property.static) {\n _validatePropertyOverride(property, type);\n }\n }\n }\n if (spec.isClassOrInterfaceType(type) && (type.interfaces?.length ?? 0) > 0) {\n for (const method of _allImplementations(type, (t) => t.methods)) {\n _validateMethodImplementation(method, type);\n }\n for (const property of _allImplementations(type, (t) => t.properties)) {\n _validatePropertyImplementation(property, type);\n }\n }\n }\n\n // Validate static members separately - they cannot be covariant\n for (const type of _allTypes(assembly)) {\n if (spec.isClassType(type) && type.base) {\n const baseType = _dereference(type.base, assembly, validator) as spec.ClassType;\n if (baseType) {\n for (const method of type.methods ?? []) {\n if (method.static) {\n _validateStaticMethodOverride(method, type, baseType);\n }\n }\n for (const property of type.properties ?? []) {\n if (property.static) {\n _validateStaticPropertyOverride(property, type, baseType);\n }\n }\n }\n }\n }\n\n /**\n * Lists all \"implementations\" from the given type, using the provided\n * implementation getter. Note that abstract members may be part of the\n * result (in particular, if `type` is an interface type, or if it's an\n * abstract class with unimplemented members) -- I just couldn't come up\n * with a name that actually describes this.\n *\n * @param type the type which implemented members are needed.\n * @param getter the getter to obtain methods or properties from the type.\n *\n * @returns a list of members (possibly empty, always defined)\n */\n function _allImplementations<T extends spec.Property | spec.Method>(\n type: spec.ClassType | spec.InterfaceType,\n getter: (type: spec.ClassType | spec.InterfaceType) => T[] | undefined,\n ): T[] {\n const result = new Array<T>();\n const known = new Set<string>();\n\n for (const member of getter(type) ?? []) {\n result.push(member);\n known.add(member.name);\n }\n\n if (spec.isClassType(type) && type.base) {\n // We have a parent class, collect their concrete members, too (recursively)...\n const base = _dereference(type.base, assembly, validator);\n assert(base != null && spec.isClassType(base));\n for (const member of _allImplementations(base, getter)) {\n if (known.has(member.name)) {\n continue;\n }\n // The member is copied, so that its `overrides` property won't be\n // altered, since this member is \"borrowed\" from a parent type. We\n // only check it, but should not record `overrides` relationships to\n // it as those could be invalid per the parent type (i.e: the parent\n // member may not be able to implement an interface, if that type does\n // not actually declare implementing that).\n const memberCopy = { ...member };\n // Forward the related node if there's one, so diagnostics are bound.\n const node = bindings.getRelatedNode(member);\n if (node != null) {\n bindings.setRelatedNode(memberCopy, node);\n }\n\n result.push(memberCopy);\n known.add(member.name);\n }\n }\n\n return result;\n }\n\n function _validateMethodOverride(method: spec.Method, type: spec.ClassType): boolean {\n if (!type.base) {\n return false;\n }\n const baseType = _dereference(type.base, assembly, validator) as spec.ClassType;\n if (!baseType) {\n return false;\n }\n const overridden = (baseType.methods ?? []).find((m) => m.name === method.name);\n if (!overridden) {\n return _validateMethodOverride(method, baseType);\n }\n _assertSignaturesMatch(overridden, method, `${type.fqn}#${method.name}`, `overriding ${baseType.fqn}`);\n method.overrides = baseType.fqn;\n return true;\n }\n\n function _validatePropertyOverride(property: spec.Property, type: spec.ClassType): boolean {\n if (!type.base) {\n return false;\n }\n const baseType = _dereference(type.base, assembly, validator) as spec.ClassType;\n if (!baseType) {\n return false;\n }\n const overridden = (baseType.properties ?? []).find((p) => p.name === property.name);\n if (!overridden) {\n return _validatePropertyOverride(property, baseType);\n }\n _assertPropertiesMatch(overridden, property, `${type.fqn}#${property.name}`, `overriding ${baseType.fqn}`);\n property.overrides = baseType.fqn;\n return true;\n }\n\n function _validateMethodImplementation(method: spec.Method, type: spec.ClassType | spec.InterfaceType): boolean {\n if (!type.interfaces) {\n // Abstract classes may not directly implement all members, need to check their supertypes...\n if (spec.isClassType(type) && type.base && type.abstract) {\n return _validateMethodImplementation(method, _dereference(type.base, assembly, validator) as spec.ClassType);\n }\n return false;\n }\n for (const iface of type.interfaces) {\n const ifaceType = _dereference(iface, assembly, validator) as spec.InterfaceType;\n const implemented = (ifaceType.methods ?? []).find((m) => m.name === method.name);\n if (implemented) {\n _assertSignaturesMatch(implemented, method, `${type.fqn}#${method.name}`, `implementing ${ifaceType.fqn}`);\n // We won't replace a previous overrides declaration from a method override, as those have\n // higher precedence than an initial implementation.\n method.overrides = method.overrides ?? iface;\n return true;\n }\n if (_validateMethodImplementation(method, ifaceType)) {\n return true;\n }\n }\n return false;\n }\n\n function _validatePropertyImplementation(\n property: spec.Property,\n type: spec.ClassType | spec.InterfaceType,\n ): boolean {\n if (!type.interfaces) {\n // Abstract classes may not directly implement all members, need to check their supertypes...\n if (spec.isClassType(type) && type.base && type.abstract) {\n return _validatePropertyImplementation(\n property,\n _dereference(type.base, assembly, validator) as spec.ClassType,\n );\n }\n return false;\n }\n for (const iface of type.interfaces) {\n const ifaceType = _dereference(iface, assembly, validator) as spec.InterfaceType;\n const implemented = (ifaceType.properties ?? []).find((p) => p.name === property.name);\n if (implemented) {\n _assertPropertiesMatch(\n implemented,\n property,\n `${type.fqn}#${property.name}`,\n `implementing ${ifaceType.fqn}`,\n );\n // We won't replace a previous overrides declaration from a property override, as those\n // have higher precedence than an initial implementation.\n property.overrides = property.overrides ?? ifaceType.fqn;\n return true;\n }\n if (_validatePropertyImplementation(property, ifaceType)) {\n return true;\n }\n }\n return false;\n }\n\n function _assertSignaturesMatch(expected: spec.Method, actual: spec.Method, label: string, action: string) {\n if (!!expected.protected !== !!actual.protected) {\n const expVisibility = expected.protected ? 'protected' : 'public';\n const actVisibility = actual.protected ? 'protected' : 'public';\n diagnostic(\n JsiiDiagnostic.JSII_5002_OVERRIDE_CHANGES_VISIBILITY.createDetached(\n label,\n action,\n actVisibility,\n expVisibility,\n ),\n );\n }\n // Allow covariant return types - actual return type can be more specific than expected\n if (!deepEqual(actual.returns, expected.returns)) {\n const actualReturnType = actual.returns?.type;\n const expectedReturnType = expected.returns?.type;\n\n // Check if this is a valid covariant return type (actual is more specific than expected)\n const isCovariantReturn =\n actualReturnType && expectedReturnType && _isCovariantOf(actualReturnType, expectedReturnType);\n\n if (!isCovariantReturn) {\n const expType = spec.describeTypeReference(expectedReturnType);\n const actType = spec.describeTypeReference(actualReturnType);\n diagnostic(\n JsiiDiagnostic.JSII_5003_OVERRIDE_CHANGES_RETURN_TYPE.createDetached(label, action, actType, expType),\n );\n }\n }\n const expectedParams = expected.parameters ?? [];\n const actualParams = actual.parameters ?? [];\n if (expectedParams.length !== actualParams.length) {\n diagnostic(\n JsiiDiagnostic.JSII_5005_OVERRIDE_CHANGES_PARAM_COUNT.createDetached(\n label,\n action,\n actualParams.length,\n expectedParams.length,\n ),\n );\n return;\n }\n for (let i = 0; i < expectedParams.length; i++) {\n const expParam = expectedParams[i];\n const actParam = actualParams[i];\n if (!deepEqual(expParam.type, actParam.type)) {\n diagnostic(\n JsiiDiagnostic.JSII_5006_OVERRIDE_CHANGES_PARAM_TYPE.createDetached(label, action, actParam, expParam),\n );\n }\n // Not-ing those to force the values to a strictly boolean context (they're optional, undefined means false)\n if (expParam.variadic !== actParam.variadic) {\n diagnostic(\n JsiiDiagnostic.JSII_5007_OVERRIDE_CHANGES_VARIADIC.createDetached(\n label,\n action,\n actParam.variadic,\n expParam.variadic,\n ),\n );\n }\n if (expParam.optional !== actParam.optional) {\n diagnostic(\n JsiiDiagnostic.JSII_5008_OVERRIDE_CHANGES_PARAM_OPTIONAL.createDetached(label, action, actParam, expParam),\n );\n }\n }\n }\n\n function _isCovariantOf(candidateType: spec.TypeReference, expectedType: spec.TypeReference): boolean {\n // Same type is always covariant\n if (deepEqual(candidateType, expectedType)) {\n return true;\n }\n\n if (!spec.isNamedTypeReference(candidateType) || !spec.isNamedTypeReference(expectedType)) {\n return false;\n }\n\n const candidateTypeSpec = _dereference(candidateType.fqn, assembly, validator);\n const expectedTypeSpec = _dereference(expectedType.fqn, assembly, validator);\n\n if (!candidateTypeSpec || !expectedTypeSpec) {\n return false;\n }\n\n // Handle class-to-class inheritance\n if (spec.isClassType(candidateTypeSpec) && spec.isClassType(expectedTypeSpec)) {\n // Check if candidateType extends expectedType (directly or indirectly)\n return _classExtendsClass(candidateTypeSpec, expectedType.fqn);\n }\n\n // Handle class implementing interface\n if (spec.isClassType(candidateTypeSpec) && spec.isInterfaceType(expectedTypeSpec)) {\n return _classImplementsInterface(candidateTypeSpec, expectedType.fqn);\n }\n\n return false;\n }\n\n function _classExtendsClass(classType: spec.ClassType, targetFqn: string): boolean {\n let current = classType;\n while (current.base) {\n if (current.base === targetFqn) {\n return true;\n }\n const baseType = _dereference(current.base, assembly, validator);\n if (!spec.isClassType(baseType)) {\n break;\n }\n current = baseType;\n }\n return false;\n }\n\n function _classImplementsInterface(classType: spec.ClassType, interfaceFqn: string): boolean {\n // Check direct interfaces\n if (classType.interfaces?.includes(interfaceFqn)) {\n return true;\n }\n\n // Check inherited interfaces\n if (classType.interfaces) {\n for (const iface of classType.interfaces) {\n const ifaceType = _dereference(iface, assembly, validator);\n if (spec.isInterfaceType(ifaceType) && _interfaceExtendsInterface(ifaceType, interfaceFqn)) {\n return true;\n }\n }\n }\n\n // Check base class interfaces\n if (classType.base) {\n const baseType = _dereference(classType.base, assembly, validator);\n if (spec.isClassType(baseType)) {\n return _classImplementsInterface(baseType, interfaceFqn);\n }\n }\n\n return false;\n }\n\n function _interfaceExtendsInterface(interfaceType: spec.InterfaceType, targetFqn: string): boolean {\n if (interfaceType.fqn === targetFqn) {\n return true;\n }\n\n if (interfaceType.interfaces) {\n for (const iface of interfaceType.interfaces) {\n if (iface === targetFqn) {\n return true;\n }\n const ifaceType = _dereference(iface, assembly, validator);\n if (spec.isInterfaceType(ifaceType) && _interfaceExtendsInterface(ifaceType, targetFqn)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n function _validateStaticMethodOverride(method: spec.Method, type: spec.ClassType, baseType: spec.ClassType): void {\n const overridden = (baseType.methods ?? []).find((m) => m.name === method.name && m.static);\n if (overridden) {\n // Static methods must have exact same signature - no covariance allowed\n if (!deepEqual(method.returns, overridden.returns)) {\n diagnostic(\n JsiiDiagnostic.JSII_5003_OVERRIDE_CHANGES_RETURN_TYPE.createDetached(\n `${type.fqn}#${method.name}`,\n `overriding ${baseType.fqn}`,\n spec.describeTypeReference(method.returns?.type),\n spec.describeTypeReference(overridden.returns?.type),\n ),\n );\n }\n }\n }\n\n function _validateStaticPropertyOverride(\n property: spec.Property,\n type: spec.ClassType,\n baseType: spec.ClassType,\n ): void {\n const overridden = (baseType.properties ?? []).find((p) => p.name === property.name && p.static);\n if (overridden) {\n // Static properties must have exact same type - no covariance allowed\n if (!deepEqual(property.type, overridden.type)) {\n diagnostic(\n JsiiDiagnostic.JSII_5004_OVERRIDE_CHANGES_PROP_TYPE.createDetached(\n `${type.fqn}#${property.name}`,\n `overriding ${baseType.fqn}`,\n property.type,\n overridden.type,\n ),\n );\n }\n }\n }\n\n function _assertPropertiesMatch(expected: spec.Property, actual: spec.Property, label: string, action: string) {\n const actualNode = bindings.getPropertyRelatedNode(actual);\n const expectedNode = bindings.getPropertyRelatedNode(expected);\n if (!!expected.protected !== !!actual.protected) {\n const expVisibility = expected.protected ? 'protected' : 'public';\n const actVisibility = actual.protected ? 'protected' : 'public';\n diagnostic(\n JsiiDiagnostic.JSII_5002_OVERRIDE_CHANGES_VISIBILITY.create(\n actualNode?.modifiers?.find(\n (mod) => mod.kind === ts.SyntaxKind.PublicKeyword || mod.kind === ts.SyntaxKind.ProtectedKeyword,\n ) ?? declarationName(actualNode),\n label,\n action,\n actVisibility,\n expVisibility,\n ).maybeAddRelatedInformation(\n expectedNode?.modifiers?.find(\n (mod) => mod.kind === ts.SyntaxKind.PublicKeyword || mod.kind === ts.SyntaxKind.ProtectedKeyword,\n ) ?? declarationName(expectedNode),\n 'The implemented declaration is here.',\n ),\n );\n }\n\n if (!_isCovariantOf(actual.type, expected.type)) {\n diagnostic(\n JsiiDiagnostic.JSII_5004_OVERRIDE_CHANGES_PROP_TYPE.create(\n actualNode?.type ?? declarationName(actualNode),\n label,\n action,\n actual.type,\n expected.type,\n ).maybeAddRelatedInformation(\n expectedNode?.type ?? declarationName(expectedNode),\n 'The implemented declaration is here.',\n ),\n );\n }\n if (expected.immutable !== actual.immutable) {\n diagnostic(\n JsiiDiagnostic.JSII_5010_OVERRIDE_CHANGES_MUTABILITY.create(\n actualNode?.modifiers?.find((mod) => mod.kind === ts.SyntaxKind.ReadonlyKeyword) ??\n declarationName(actualNode),\n label,\n action,\n actual.immutable,\n expected.immutable,\n ).maybeAddRelatedInformation(\n expectedNode?.modifiers?.find((mod) => mod.kind === ts.SyntaxKind.ReadonlyKeyword) ??\n declarationName(expectedNode),\n 'The implemented declaration is here.',\n ),\n );\n }\n if (expected.optional !== actual.optional) {\n diagnostic(\n JsiiDiagnostic.JSII_5009_OVERRIDE_CHANGES_PROP_OPTIONAL.create(\n actualNode?.questionToken ?? actualNode?.type ?? declarationName(actualNode),\n label,\n action,\n actual.optional,\n expected.optional,\n ).maybeAddRelatedInformation(\n expectedNode?.questionToken ?? expectedNode?.type ?? declarationName(expectedNode),\n 'The implemented declaration is here.',\n ),\n );\n }\n }\n }\n\n /**\n * Abstract classes that implement an interface should have a declaration for every member.\n *\n * For non-optional members, TypeScript already enforces this. This leaves the user the\n * ability to forget optional properties (`readonly prop?: string`).\n *\n * At least our codegen for this case fails in C#, and I'm not convinced it does the right\n * thing in Java either. So we will disallow this, and require users to declare these\n * fields on the class. It can always be `public abstract readonly prop?: string` if they\n * don't want to give an implementation yet.\n */\n function _abstractClassesMustImplementAllProperties(\n validator: Validator,\n assembly: spec.Assembly,\n diagnostic: DiagnosticEmitter,\n ) {\n for (const type of _allTypes(assembly)) {\n if (!spec.isClassType(type) || !type.abstract) {\n continue;\n }\n\n const classProps = collectClassProps(type, new Set());\n\n for (const implFqn of type.interfaces ?? []) {\n checkInterfacePropsImplemented(implFqn, type, classProps);\n }\n }\n\n /**\n * Return all property names declared on this class and its base classes\n */\n function collectClassProps(type: spec.ClassType, into: Set<string>): Set<string> {\n for (const prop of type.properties ?? []) {\n into.add(prop.name);\n }\n\n if (type.base) {\n const base = _dereference(type.base, assembly, validator);\n if (spec.isClassType(base)) {\n collectClassProps(base, into);\n }\n }\n\n return into;\n }\n\n function checkInterfacePropsImplemented(interfaceFqn: string, cls: spec.ClassType, propNames: Set<string>) {\n const intf = _dereference(interfaceFqn, assembly, validator);\n if (!spec.isInterfaceType(intf)) {\n return;\n }\n\n // We only have to check for optional properties, because anything required\n // would have been caught by the TypeScript compiler already.\n for (const prop of intf.properties ?? []) {\n if (!prop.optional) {\n continue;\n }\n\n if (!propNames.has(prop.name)) {\n diagnostic(\n JsiiDiagnostic.JSII_5021_ABSTRACT_CLASS_MISSING_PROP_IMPL.create(\n bindings.getClassOrInterfaceRelatedNode(cls),\n intf,\n cls,\n prop.name,\n ).maybeAddRelatedInformation(bindings.getPropertyRelatedNode(prop), 'The implemented declaration is here.'),\n );\n }\n }\n\n for (const extFqn of intf.interfaces ?? []) {\n checkInterfacePropsImplemented(extFqn, cls, propNames);\n }\n }\n }\n\n function _staticMembersAndNestedTypesMustNotSharePascalCaseName(\n _: Validator,\n assembly: spec.Assembly,\n diagnostic: DiagnosticEmitter,\n ) {\n for (const nestedType of Object.values(assembly.types ?? {})) {\n if (nestedType.namespace == null) {\n continue;\n }\n const nestingType = assembly.types![`${assembly.name}.${nestedType.namespace}`];\n if (nestingType == null) {\n continue;\n }\n const nestedTypeName = Case.pascal(nestedType.name);\n for (const { name, member } of staticMembers(nestingType)) {\n if (name === nestedTypeName) {\n let diag = JsiiDiagnostic.JSII_5020_STATIC_MEMBER_CONFLICTS_WITH_NESTED_TYPE.create(\n getRelatedNode(member)!,\n nestingType,\n member,\n nestedType,\n );\n const nestedTypeNode = getRelatedNode(nestedType);\n if (nestedTypeNode != null) {\n diag = diag.addRelatedInformation(nestedTypeNode, 'This is the conflicting nested type declaration');\n }\n diagnostic(diag);\n }\n }\n }\n\n function staticMembers(type: spec.Type) {\n if (spec.isClassOrInterfaceType(type)) {\n return [\n ...(type.methods?.filter((method) => method.static) ?? []),\n ...(type.properties?.filter((prop) => prop.static) ?? []),\n ].map((member) => ({ name: Case.pascal(member.name), member }));\n }\n return type.members.map((member) => ({ name: member.name, member }));\n }\n }\n}\n\nfunction _allTypes(assm: spec.Assembly): spec.Type[] {\n return Object.values(assm.types ?? {});\n}\n\nfunction _allMethods(assm: spec.Assembly): Array<{ member: spec.Method; type: spec.Type }> {\n const methods = new Array<{ member: spec.Method; type: spec.Type }>();\n for (const type of _allTypes(assm)) {\n if (!spec.isClassOrInterfaceType(type)) {\n continue;\n }\n if (!type.methods) {\n continue;\n }\n for (const method of type.methods) methods.push({ member: method, type });\n }\n return methods;\n}\n\nfunction _allProperties(assm: spec.Assembly): Array<{ member: spec.Property; type: spec.Type }> {\n const properties = new Array<{ member: spec.Property; type: spec.Type }>();\n for (const type of _allTypes(assm)) {\n if (!spec.isClassOrInterfaceType(type)) {\n continue;\n }\n if (!type.properties) {\n continue;\n }\n for (const property of type.properties) properties.push({ member: property, type });\n }\n return properties;\n}\n\nfunction _allMembers(assm: spec.Assembly): Array<{ member: spec.Property | spec.Method; type: spec.Type }> {\n return [..._allMethods(assm), ..._allProperties(assm)];\n}\n\ninterface AnnotatedTypeReference extends spec.NamedTypeReference {\n readonly node: ts.Node | undefined;\n}\n\nfunction _allTypeReferences(assm: spec.Assembly): readonly AnnotatedTypeReference[] {\n const typeReferences = new Array<AnnotatedTypeReference>();\n for (const type of _allTypes(assm)) {\n if (!spec.isClassOrInterfaceType(type)) {\n continue;\n }\n if (spec.isClassType(type)) {\n const node = bindings.getClassRelatedNode(type);\n if (type.base) {\n typeReferences.push({\n fqn: type.base,\n node: node?.heritageClauses?.find((hc) => hc.token === ts.SyntaxKind.ExtendsKeyword)?.types[0],\n });\n }\n if (type.initializer?.parameters) {\n for (const param of type.initializer.parameters) {\n _collectTypeReferences(param.type, bindings.getParameterRelatedNode(param)?.type);\n }\n }\n }\n if (type.interfaces) {\n const node = bindings.getClassOrInterfaceRelatedNode(type);\n for (const iface of type.interfaces) {\n typeReferences.push({\n fqn: iface,\n node: node?.heritageClauses?.find(\n (hc) =>\n hc.token ===\n (spec.isInterfaceType(type) ? ts.SyntaxKind.ImplementsKeyword : ts.SyntaxKind.ExtendsKeyword),\n ),\n });\n }\n }\n }\n for (const { member: prop } of _allProperties(assm)) {\n _collectTypeReferences(prop.type, bindings.getPropertyRelatedNode(prop)?.type);\n }\n for (const { member: meth } of _allMethods(assm)) {\n if (meth.returns) {\n _collectTypeReferences(meth.returns.type, bindings.getMethodRelatedNode(meth)?.type);\n }\n for (const param of meth.parameters ?? []) {\n _collectTypeReferences(param.type, bindings.getParameterRelatedNode(param)?.type);\n }\n }\n return typeReferences;\n\n function _collectTypeReferences(type: spec.TypeReference, node: ts.Node | undefined): void {\n if (spec.isNamedTypeReference(type)) {\n typeReferences.push({ ...type, node });\n } else if (spec.isCollectionTypeReference(type)) {\n _collectTypeReferences(type.collection.elementtype, node);\n } else if (spec.isUnionTypeReference(type)) {\n for (const t of type.union.types) _collectTypeReferences(t, node);\n }\n }\n}\n\nfunction _dereference(\n typeRef: string | spec.NamedTypeReference,\n assembly: spec.Assembly,\n validator: Validator,\n): spec.Type | undefined {\n if (typeof typeRef !== 'string') {\n typeRef = typeRef.fqn;\n }\n const [assm] = typeRef.split('.');\n if (assembly.name === assm) {\n return assembly.types?.[typeRef];\n }\n const foreignAssm = validator.projectInfo.dependencyClosure.find((dep) => dep.name === assm);\n return foreignAssm?.types?.[typeRef];\n}\n\nfunction _isEmpty(array: undefined | any[]): array is undefined {\n return array == null || array.length === 0;\n}\n\n/**\n * Return whether an identifier only consists of upperchase characters, digits and underscores\n *\n * We have our own check here (isConstantCase) which is more lenient than what\n * `case.constant()` prescribes. We also want to allow combinations of letters\n * and digits without underscores: `C5A`, which `case` would force to `C5_A`.\n * The hint we print will still use `case.constant()` but that is fine.\n */\nfunction isConstantCase(x: string) {\n return !/[^A-Z0-9_]/.exec(x);\n}\n\n/**\n * Obtains the name of the given declaration, if it has one, or returns the declaration itself.\n * This function is meant to be used as a convenience to obtain the `ts.Node` to bind a\n * `JsiiDianostic` instance on.\n *\n * It may return `undefined` but is typed as `ts.Node` so that it is easier to use with\n * `JsiiDiagnostic` factories.\n *\n * @param decl the declaration which name is needed.\n *\n * @returns the name of the declaration if it has one, or the declaration itself. Might return\n * `undefined` if the provided declaration is undefined.\n */\nfunction declarationName(decl: ts.Declaration | ts.Expression | undefined): ts.Node {\n if (decl == null) {\n // Pretend we returned a node - this is used to create diagnostics, worst case it'll be unbound.\n return decl as any;\n }\n return ts.getNameOfDeclaration(decl) ?? decl;\n}\n"]}
package/lib/version.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /** The short version number for this JSII compiler (e.g: `X.Y.Z`) */
2
- export declare const SHORT_VERSION = "5.9.5-dev.1";
2
+ export declare const SHORT_VERSION = "5.9.5-dev.3";
3
3
  /** The qualified version number for this JSII compiler (e.g: `X.Y.Z (build #######)`) */
4
- export declare const VERSION = "5.9.5-dev.1 (build 6c1dc5c)";
4
+ export declare const VERSION = "5.9.5-dev.3 (build 87b90cc)";
5
5
  /** The release line identifier for this JSII compiler (e.g: `X.Y`) */
6
6
  export declare const RELEASE_LINE = "5.9";
7
7
  //# sourceMappingURL=version.d.ts.map
package/lib/version.js CHANGED
@@ -4,9 +4,9 @@ exports.RELEASE_LINE = exports.VERSION = exports.SHORT_VERSION = void 0;
4
4
  const typescript_1 = require("typescript");
5
5
  // GENERATED: This file is generated by build-tools/code-gen.ts -- Do not edit by hand!
6
6
  /** The short version number for this JSII compiler (e.g: `X.Y.Z`) */
7
- exports.SHORT_VERSION = '5.9.5-dev.1';
7
+ exports.SHORT_VERSION = '5.9.5-dev.3';
8
8
  /** The qualified version number for this JSII compiler (e.g: `X.Y.Z (build #######)`) */
9
- exports.VERSION = '5.9.5-dev.1 (build 6c1dc5c)';
9
+ exports.VERSION = '5.9.5-dev.3 (build 87b90cc)';
10
10
  /** The release line identifier for this JSII compiler (e.g: `X.Y`) */
11
11
  exports.RELEASE_LINE = typescript_1.versionMajorMinor;
12
12
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAE/C,uFAAuF;AAEvF,qEAAqE;AACxD,QAAA,aAAa,GAAG,aAAa,CAAC;AAE3C,yFAAyF;AAC5E,QAAA,OAAO,GAAG,6BAA6B,CAAC;AAErD,sEAAsE;AACzD,QAAA,YAAY,GAAG,8BAAiB,CAAC","sourcesContent":["import { versionMajorMinor } from 'typescript';\n\n// GENERATED: This file is generated by build-tools/code-gen.ts -- Do not edit by hand!\n\n/** The short version number for this JSII compiler (e.g: `X.Y.Z`) */\nexport const SHORT_VERSION = '5.9.5-dev.1';\n\n/** The qualified version number for this JSII compiler (e.g: `X.Y.Z (build #######)`) */\nexport const VERSION = '5.9.5-dev.1 (build 6c1dc5c)';\n\n/** The release line identifier for this JSII compiler (e.g: `X.Y`) */\nexport const RELEASE_LINE = versionMajorMinor;\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAE/C,uFAAuF;AAEvF,qEAAqE;AACxD,QAAA,aAAa,GAAG,aAAa,CAAC;AAE3C,yFAAyF;AAC5E,QAAA,OAAO,GAAG,6BAA6B,CAAC;AAErD,sEAAsE;AACzD,QAAA,YAAY,GAAG,8BAAiB,CAAC","sourcesContent":["import { versionMajorMinor } from 'typescript';\n\n// GENERATED: This file is generated by build-tools/code-gen.ts -- Do not edit by hand!\n\n/** The short version number for this JSII compiler (e.g: `X.Y.Z`) */\nexport const SHORT_VERSION = '5.9.5-dev.3';\n\n/** The qualified version number for this JSII compiler (e.g: `X.Y.Z (build #######)`) */\nexport const VERSION = '5.9.5-dev.3 (build 87b90cc)';\n\n/** The release line identifier for this JSII compiler (e.g: `X.Y`) */\nexport const RELEASE_LINE = versionMajorMinor;\n"]}
package/package.json CHANGED
@@ -43,7 +43,7 @@
43
43
  "@types/jest": "^29.5.14",
44
44
  "@types/lockfile": "^1.0.4",
45
45
  "@types/node": "^18",
46
- "@types/semver": "^7.7.0",
46
+ "@types/semver": "^7.7.1",
47
47
  "@types/tar": "^6.1.13",
48
48
  "@typescript-eslint/eslint-plugin": "^8",
49
49
  "@typescript-eslint/parser": "^8",
@@ -92,7 +92,7 @@
92
92
  "publishConfig": {
93
93
  "access": "public"
94
94
  },
95
- "version": "5.9.5-dev.1",
95
+ "version": "5.9.5-dev.3",
96
96
  "types": "lib/index.d.ts",
97
97
  "exports": {
98
98
  ".": "./lib/index.js",