jsii-rosetta 5.9.8-dev.1 → 5.9.8-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.
@@ -16,6 +16,10 @@ export type JsiiType = {
16
16
  } | {
17
17
  kind: 'builtIn';
18
18
  builtIn: BuiltInType;
19
+ } | {
20
+ kind: 'intersection';
21
+ branches: JsiiType[];
22
+ branchSymbols: (ts.Symbol | undefined)[];
19
23
  };
20
24
  export declare function determineJsiiType(typeChecker: ts.TypeChecker, type: ts.Type): JsiiType;
21
25
  export type ObjectLiteralAnalysis = ObjectLiteralStruct | {
@@ -56,10 +56,17 @@ function determineJsiiType(typeChecker, type) {
56
56
  if (typeScriptBuiltInType) {
57
57
  return { kind: 'builtIn', builtIn: typeScriptBuiltInType };
58
58
  }
59
- if (type.isUnion() || type.isIntersection()) {
59
+ if (type.isIntersection()) {
60
+ return {
61
+ kind: 'intersection',
62
+ branches: type.types.map((t) => determineJsiiType(typeChecker, t)),
63
+ branchSymbols: type.types.map((t) => t.symbol),
64
+ };
65
+ }
66
+ if (type.isUnion()) {
60
67
  return {
61
68
  kind: 'error',
62
- message: `Type unions or intersections are not supported in examples, got: ${typeChecker.typeToString(type)}`,
69
+ message: `Type unions are not supported in examples, got: ${typeChecker.typeToString(type)}`,
63
70
  };
64
71
  }
65
72
  return { kind: 'unknown' };
@@ -1 +1 @@
1
- {"version":3,"file":"jsii-types.js","sourceRoot":"","sources":["../../src/jsii/jsii-types.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ts from 'typescript';\n\nimport { hasAnyFlag, analyzeStructType, JsiiSymbol } from './jsii-utils';\nimport { inferredTypeOfExpression, BuiltInType, builtInTypeName, mapElementType } from '../typescript/types';\n\n// eslint-disable-next-line prettier/prettier\nexport type JsiiType =\n | { kind: 'unknown' }\n | { kind: 'error'; message: string }\n | { kind: 'map' | 'list'; elementType: JsiiType; elementTypeSymbol: ts.Symbol | undefined }\n | { kind: 'namedType'; name: string }\n | { kind: 'builtIn'; builtIn: BuiltInType };\n\nexport function determineJsiiType(typeChecker: ts.TypeChecker, type: ts.Type): JsiiType {\n // this means the snippet didn't have enough info for the TypeScript compiler to figure out the type -\n // so, just render the fallback\n if ((type as any).intrinsicName === 'error') {\n return { kind: 'unknown' };\n }\n\n // The non-nullable version of `void` is `never`, so check first...\n if ((type.flags & (ts.TypeFlags.Void | ts.TypeFlags.VoidLike)) !== 0) {\n return { kind: 'builtIn', builtIn: 'void' };\n }\n // The non-nullable version of `unknown` is some ObjectType, so check first...\n if ((type.flags & (ts.TypeFlags.Unknown | ts.TypeFlags.Any)) !== 0) {\n return { kind: 'builtIn', builtIn: 'any' };\n }\n\n type = type.getNonNullableType();\n\n const mapValuesType = mapElementType(type, typeChecker);\n if (mapValuesType.result === 'map') {\n return {\n kind: 'map',\n elementType: mapValuesType.elementType\n ? determineJsiiType(typeChecker, mapValuesType.elementType)\n : { kind: 'builtIn', builtIn: 'any' },\n elementTypeSymbol: mapValuesType.elementType?.symbol,\n };\n }\n\n if (type.symbol?.name === 'Array') {\n const typeRef = type as ts.TypeReference;\n\n if (typeRef.typeArguments?.length === 1) {\n return {\n kind: 'list',\n elementType: determineJsiiType(typeChecker, typeRef.typeArguments[0]),\n elementTypeSymbol: typeRef.typeArguments[0].symbol,\n };\n }\n\n return {\n kind: 'list',\n elementType: { kind: 'builtIn', builtIn: 'any' },\n elementTypeSymbol: undefined,\n };\n }\n\n // User-defined or aliased type\n if (type.aliasSymbol) {\n return { kind: 'namedType', name: type.aliasSymbol.name };\n }\n if (type.symbol) {\n return { kind: 'namedType', name: type.symbol.name };\n }\n\n const typeScriptBuiltInType = builtInTypeName(type);\n if (typeScriptBuiltInType) {\n return { kind: 'builtIn', builtIn: typeScriptBuiltInType };\n }\n\n if (type.isUnion() || type.isIntersection()) {\n return {\n kind: 'error',\n message: `Type unions or intersections are not supported in examples, got: ${typeChecker.typeToString(type)}`,\n };\n }\n\n return { kind: 'unknown' };\n}\n\nexport type ObjectLiteralAnalysis = ObjectLiteralStruct | { readonly kind: 'map' } | { readonly kind: 'unknown' };\n\nexport type ObjectLiteralStruct =\n | { readonly kind: 'struct'; readonly type: ts.Type; readonly jsiiSym: JsiiSymbol }\n | { readonly kind: 'local-struct'; readonly type: ts.Type };\n\nexport function analyzeObjectLiteral(\n typeChecker: ts.TypeChecker,\n node: ts.ObjectLiteralExpression,\n): ObjectLiteralAnalysis {\n const type = inferredTypeOfExpression(typeChecker, node);\n if (!type) {\n return { kind: 'unknown' };\n }\n\n const call = findEnclosingCallExpression(node);\n const isDeclaredCall = !!(call && typeChecker.getResolvedSignature(call)?.declaration);\n\n if (hasAnyFlag(type.flags, ts.TypeFlags.Any)) {\n // The type checker by itself won't tell us the difference between an `any` that\n // was literally declared as a type in the code, vs an `any` it assumes because it\n // can't find a function's type declaration.\n //\n // Search for the function's declaration and only if we can't find it,\n // the type is actually unknown (otherwise it's a literal 'any').\n return isDeclaredCall ? { kind: 'map' } : { kind: 'unknown' };\n }\n\n // If the type is a union between a struct and something else, return the first possible struct\n const structCandidates = type.isUnion() ? type.types : [type];\n for (const candidate of structCandidates) {\n const structType = analyzeStructType(typeChecker, candidate);\n if (structType) {\n return structType;\n }\n }\n\n return { kind: 'map' };\n}\n\nfunction findEnclosingCallExpression(node?: ts.Node): ts.CallLikeExpression | undefined {\n while (node) {\n if (ts.isCallLikeExpression(node)) {\n return node;\n }\n node = node.parent;\n }\n\n return undefined;\n}\n"]}
1
+ {"version":3,"file":"jsii-types.js","sourceRoot":"","sources":["../../src/jsii/jsii-types.ts"],"names":[],"mappings":";;AAcA,8CA4EC;AAQD,oDAgCC;AAlID,iCAAiC;AAEjC,6CAAyE;AACzE,+CAA6G;AAW7G,SAAgB,iBAAiB,CAAC,WAA2B,EAAE,IAAa;IAC1E,sGAAsG;IACtG,+BAA+B;IAC/B,IAAK,IAAY,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;QAC5C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IAED,mEAAmE;IACnE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACrE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC9C,CAAC;IACD,8EAA8E;IAC9E,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACnE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC7C,CAAC;IAED,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAEjC,MAAM,aAAa,GAAG,IAAA,sBAAc,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACxD,IAAI,aAAa,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QACnC,OAAO;YACL,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,aAAa,CAAC,WAAW;gBACpC,CAAC,CAAC,iBAAiB,CAAC,WAAW,EAAE,aAAa,CAAC,WAAW,CAAC;gBAC3D,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;YACvC,iBAAiB,EAAE,aAAa,CAAC,WAAW,EAAE,MAAM;SACrD,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAwB,CAAC;QAEzC,IAAI,OAAO,CAAC,aAAa,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBACrE,iBAAiB,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM;aACnD,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;YAChD,iBAAiB,EAAE,SAAS;SAC7B,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,qBAAqB,GAAG,IAAA,uBAAe,EAAC,IAAI,CAAC,CAAC;IACpD,IAAI,qBAAqB,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;IAC7D,CAAC;IAED,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QAC1B,OAAO;YACL,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAClE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;SAC/C,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACnB,OAAO;YACL,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,mDAAmD,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;SAC7F,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC;AAQD,SAAgB,oBAAoB,CAClC,WAA2B,EAC3B,IAAgC;IAEhC,MAAM,IAAI,GAAG,IAAA,gCAAwB,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,IAAI,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;IAEvF,IAAI,IAAA,uBAAU,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,gFAAgF;QAChF,kFAAkF;QAClF,4CAA4C;QAC5C,EAAE;QACF,sEAAsE;QACtE,iEAAiE;QACjE,OAAO,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAChE,CAAC;IAED,+FAA+F;IAC/F,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9D,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,IAAA,8BAAiB,EAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC7D,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAc;IACjD,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import * as ts from 'typescript';\n\nimport { hasAnyFlag, analyzeStructType, JsiiSymbol } from './jsii-utils';\nimport { inferredTypeOfExpression, BuiltInType, builtInTypeName, mapElementType } from '../typescript/types';\n\n// eslint-disable-next-line prettier/prettier\nexport type JsiiType =\n | { kind: 'unknown' }\n | { kind: 'error'; message: string }\n | { kind: 'map' | 'list'; elementType: JsiiType; elementTypeSymbol: ts.Symbol | undefined }\n | { kind: 'namedType'; name: string }\n | { kind: 'builtIn'; builtIn: BuiltInType }\n | { kind: 'intersection'; branches: JsiiType[]; branchSymbols: (ts.Symbol | undefined)[] };\n\nexport function determineJsiiType(typeChecker: ts.TypeChecker, type: ts.Type): JsiiType {\n // this means the snippet didn't have enough info for the TypeScript compiler to figure out the type -\n // so, just render the fallback\n if ((type as any).intrinsicName === 'error') {\n return { kind: 'unknown' };\n }\n\n // The non-nullable version of `void` is `never`, so check first...\n if ((type.flags & (ts.TypeFlags.Void | ts.TypeFlags.VoidLike)) !== 0) {\n return { kind: 'builtIn', builtIn: 'void' };\n }\n // The non-nullable version of `unknown` is some ObjectType, so check first...\n if ((type.flags & (ts.TypeFlags.Unknown | ts.TypeFlags.Any)) !== 0) {\n return { kind: 'builtIn', builtIn: 'any' };\n }\n\n type = type.getNonNullableType();\n\n const mapValuesType = mapElementType(type, typeChecker);\n if (mapValuesType.result === 'map') {\n return {\n kind: 'map',\n elementType: mapValuesType.elementType\n ? determineJsiiType(typeChecker, mapValuesType.elementType)\n : { kind: 'builtIn', builtIn: 'any' },\n elementTypeSymbol: mapValuesType.elementType?.symbol,\n };\n }\n\n if (type.symbol?.name === 'Array') {\n const typeRef = type as ts.TypeReference;\n\n if (typeRef.typeArguments?.length === 1) {\n return {\n kind: 'list',\n elementType: determineJsiiType(typeChecker, typeRef.typeArguments[0]),\n elementTypeSymbol: typeRef.typeArguments[0].symbol,\n };\n }\n\n return {\n kind: 'list',\n elementType: { kind: 'builtIn', builtIn: 'any' },\n elementTypeSymbol: undefined,\n };\n }\n\n // User-defined or aliased type\n if (type.aliasSymbol) {\n return { kind: 'namedType', name: type.aliasSymbol.name };\n }\n if (type.symbol) {\n return { kind: 'namedType', name: type.symbol.name };\n }\n\n const typeScriptBuiltInType = builtInTypeName(type);\n if (typeScriptBuiltInType) {\n return { kind: 'builtIn', builtIn: typeScriptBuiltInType };\n }\n\n if (type.isIntersection()) {\n return {\n kind: 'intersection',\n branches: type.types.map((t) => determineJsiiType(typeChecker, t)),\n branchSymbols: type.types.map((t) => t.symbol),\n };\n }\n\n if (type.isUnion()) {\n return {\n kind: 'error',\n message: `Type unions are not supported in examples, got: ${typeChecker.typeToString(type)}`,\n };\n }\n\n return { kind: 'unknown' };\n}\n\nexport type ObjectLiteralAnalysis = ObjectLiteralStruct | { readonly kind: 'map' } | { readonly kind: 'unknown' };\n\nexport type ObjectLiteralStruct =\n | { readonly kind: 'struct'; readonly type: ts.Type; readonly jsiiSym: JsiiSymbol }\n | { readonly kind: 'local-struct'; readonly type: ts.Type };\n\nexport function analyzeObjectLiteral(\n typeChecker: ts.TypeChecker,\n node: ts.ObjectLiteralExpression,\n): ObjectLiteralAnalysis {\n const type = inferredTypeOfExpression(typeChecker, node);\n if (!type) {\n return { kind: 'unknown' };\n }\n\n const call = findEnclosingCallExpression(node);\n const isDeclaredCall = !!(call && typeChecker.getResolvedSignature(call)?.declaration);\n\n if (hasAnyFlag(type.flags, ts.TypeFlags.Any)) {\n // The type checker by itself won't tell us the difference between an `any` that\n // was literally declared as a type in the code, vs an `any` it assumes because it\n // can't find a function's type declaration.\n //\n // Search for the function's declaration and only if we can't find it,\n // the type is actually unknown (otherwise it's a literal 'any').\n return isDeclaredCall ? { kind: 'map' } : { kind: 'unknown' };\n }\n\n // If the type is a union between a struct and something else, return the first possible struct\n const structCandidates = type.isUnion() ? type.types : [type];\n for (const candidate of structCandidates) {\n const structType = analyzeStructType(typeChecker, candidate);\n if (structType) {\n return structType;\n }\n }\n\n return { kind: 'map' };\n}\n\nfunction findEnclosingCallExpression(node?: ts.Node): ts.CallLikeExpression | undefined {\n while (node) {\n if (ts.isCallLikeExpression(node)) {\n return node;\n }\n node = node.parent;\n }\n\n return undefined;\n}\n"]}
@@ -434,6 +434,9 @@ class CSharpVisitor extends default_1.DefaultVisitor {
434
434
  return `IDictionary<string, ${doRender(jsiiType.elementType)}>`;
435
435
  case 'list':
436
436
  return `${doRender(jsiiType.elementType)}[]`;
437
+ case 'intersection':
438
+ const renderedBranches = jsiiType.branches.map(doRender);
439
+ return `${renderedBranches[0]} /* & ${renderedBranches.slice(1).join(' & ')} */`;
437
440
  case 'namedType':
438
441
  return jsiiType.name;
439
442
  case 'builtIn':
@@ -1 +1 @@
1
- {"version":3,"file":"csharp.js","sourceRoot":"","sources":["../../src/languages/csharp.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ts from 'typescript';\n\nimport { DefaultVisitor } from './default';\nimport { TargetLanguage } from './target-language';\nimport { determineJsiiType, JsiiType, ObjectLiteralStruct } from '../jsii/jsii-types';\nimport { JsiiSymbol, simpleName, namespaceName } from '../jsii/jsii-utils';\nimport { jsiiTargetParameter } from '../jsii/packages';\nimport { OTree, NO_SYNTAX } from '../o-tree';\nimport { AstRenderer, nimpl } from '../renderer';\nimport {\n matchAst,\n nodeOfType,\n quoteStringLiteral,\n visibility,\n isReadOnly,\n findSuperCall,\n privatePropertyNames,\n findEnclosingClassDeclaration,\n} from '../typescript/ast-utils';\nimport { ImportStatement } from '../typescript/imports';\nimport {\n typeContainsUndefined,\n parameterAcceptsUndefined,\n inferMapElementType,\n determineReturnType,\n} from '../typescript/types';\nimport { flat, fmap } from '../util';\n\ninterface CSharpLanguageContext {\n /**\n * Used to capitalize member accesses\n */\n readonly propertyOrMethod: boolean;\n\n /**\n * So we know how to render property signatures\n */\n readonly inStructInterface: boolean;\n\n /**\n * So we know how to render property signatures\n */\n readonly inRegularInterface: boolean;\n\n /**\n * So we know how to render property assignments\n */\n readonly inKeyValueList: boolean;\n\n /**\n * Whether a string literal is currently in the position of having to render as an identifier (LHS in property assignment)\n */\n readonly stringAsIdentifier: boolean;\n\n /**\n * Whether an identifier literal is currently in the position of having to render as a string (LHS in property assignment)\n */\n readonly identifierAsString: boolean;\n\n /**\n * When parsing an object literal and no type information is available, prefer parsing it as a struct to parsing it as a map\n */\n readonly preferObjectLiteralAsStruct: boolean;\n\n /**\n * When encountering these properties, render them as lowercase instead of uppercase\n */\n readonly privatePropertyNames: string[];\n}\n\ntype CSharpRenderer = AstRenderer<CSharpLanguageContext>;\n\nexport class CSharpVisitor extends DefaultVisitor<CSharpLanguageContext> {\n /**\n * Translation version\n *\n * Bump this when you change something in the implementation to invalidate\n * existing cached translations.\n */\n public static readonly VERSION = '1';\n\n public readonly language = TargetLanguage.CSHARP;\n\n public readonly defaultContext = {\n propertyOrMethod: false,\n inStructInterface: false,\n inRegularInterface: false,\n inKeyValueList: false,\n stringAsIdentifier: false,\n identifierAsString: false,\n preferObjectLiteralAsStruct: true,\n privatePropertyNames: [],\n };\n\n /**\n * Aliases for modules\n *\n * If these are encountered in the LHS of a property access, they will be dropped.\n */\n private readonly dropPropertyAccesses = new Set<string>();\n\n /**\n * Already imported modules so we don't emit duplicate imports\n */\n private readonly alreadyImportedNamespaces = new Set<string>();\n\n /**\n * A map to undo import renames\n *\n * We will always reference the original name in the translation.\n *\n * Maps a local-name to a C# name.\n */\n private readonly renamedSymbols = new Map<string, string>();\n\n public mergeContext(old: CSharpLanguageContext, update: Partial<CSharpLanguageContext>): CSharpLanguageContext {\n return Object.assign({}, old, update);\n }\n\n public override identifier(\n node: ts.Identifier | ts.StringLiteral | ts.NoSubstitutionTemplateLiteral,\n renderer: CSharpRenderer,\n ) {\n let text = node.text;\n\n if (renderer.currentContext.identifierAsString) {\n return new OTree([JSON.stringify(text)]);\n }\n\n // Uppercase methods and properties, leave the rest as-is\n if (renderer.currentContext.propertyOrMethod && !renderer.currentContext.privatePropertyNames.includes(text)) {\n text = ucFirst(text);\n }\n\n return new OTree([text]);\n }\n\n public override importStatement(importStatement: ImportStatement, context: CSharpRenderer): OTree {\n const guessedNamespace = guessDotnetNamespace(importStatement.packageName);\n const namespace = fmap(importStatement.moduleSymbol, findDotnetName) ?? guessedNamespace;\n\n if (importStatement.imports.import === 'full') {\n this.dropPropertyAccesses.add(importStatement.imports.sourceName);\n this.alreadyImportedNamespaces.add(namespace);\n return new OTree([`using ${namespace};`], [], { canBreakLine: true });\n }\n if (importStatement.imports.import === 'selective') {\n const statements = new Array<string>();\n\n for (const el of importStatement.imports.elements) {\n const dotnetNs = fmap(el.importedSymbol, findDotnetName) ?? `${guessedNamespace}.${ucFirst(el.sourceName)}`;\n\n // If this is an alias, we only honor it if it's NOT for sure a module\n // (could be an alias import of a class or enum).\n if (el.alias && el.importedSymbol?.symbolType !== 'module') {\n this.renamedSymbols.set(el.alias, simpleName(dotnetNs));\n statements.push(`using ${ucFirst(el.alias)} = ${dotnetNs};`);\n continue;\n }\n\n // If we are importing a module directly, drop the occurrences of that\n // identifier further down (turn `mod.MyClass` into `MyClass`).\n if (el.importedSymbol?.symbolType === 'module') {\n this.dropPropertyAccesses.add(el.alias ?? el.sourceName);\n }\n\n // Output an import statement for the containing namespace\n const importableNamespace = el.importedSymbol?.symbolType === 'module' ? dotnetNs : namespaceName(dotnetNs);\n if (this.alreadyImportedNamespaces.has(importableNamespace)) {\n continue;\n }\n\n this.alreadyImportedNamespaces.add(importableNamespace);\n statements.push(`using ${importableNamespace};`);\n }\n\n return new OTree([], statements, { canBreakLine: true, separator: '\\n' });\n }\n\n return nimpl(importStatement.node, context);\n }\n\n public override functionDeclaration(node: ts.FunctionDeclaration, renderer: CSharpRenderer): OTree {\n return this.functionLike(node, renderer);\n }\n\n public override constructorDeclaration(node: ts.ConstructorDeclaration, renderer: CSharpRenderer): OTree {\n return this.functionLike(node, renderer, { isConstructor: true });\n }\n\n public override methodDeclaration(node: ts.MethodDeclaration, renderer: CSharpRenderer): OTree {\n return this.functionLike(node, renderer);\n }\n\n public override methodSignature(node: ts.MethodSignature, renderer: CSharpRenderer): OTree {\n return new OTree(\n [\n this.renderTypeNode(node.type, false, renderer),\n ' ',\n renderer.updateContext({ propertyOrMethod: true }).convert(node.name),\n '(',\n new OTree([], renderer.convertAll(node.parameters), {\n separator: ', ',\n }),\n ');',\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n // tslint:disable-next-line:max-line-length\n public functionLike(\n node: ts.FunctionLikeDeclaration | ts.ConstructorDeclaration | ts.MethodDeclaration,\n renderer: CSharpRenderer,\n opts: { isConstructor?: boolean } = {},\n ): OTree {\n const methodName = opts.isConstructor\n ? findEnclosingClassDeclaration(node)?.name?.text ?? 'MyClass'\n : renderer.updateContext({ propertyOrMethod: true }).convert(node.name);\n\n const retType = determineReturnType(renderer.typeChecker, node);\n const returnType = opts.isConstructor ? '' : this.renderType(node, retType, false, 'void', renderer);\n\n const baseConstructorCall = new Array<string | OTree>();\n if (opts.isConstructor) {\n const superCall = findSuperCall(node.body, renderer);\n if (superCall) {\n baseConstructorCall.push(': base(', this.argumentList(superCall.arguments, renderer), ') ');\n }\n }\n\n const ret = new OTree(\n [\n visibility(node),\n ' ',\n returnType,\n returnType ? ' ' : '',\n methodName,\n '(',\n new OTree([], renderer.convertAll(node.parameters), {\n separator: ', ',\n }),\n ') ',\n ...baseConstructorCall,\n ],\n [renderer.convert(node.body)],\n {\n canBreakLine: true,\n },\n );\n\n return ret;\n }\n\n public override propertyDeclaration(node: ts.PropertyDeclaration, renderer: CSharpRenderer): OTree {\n const vis = visibility(node);\n const propertyOrMethod = vis !== 'private'; // Capitalize non-private fields\n\n if (vis === 'private' || node.initializer) {\n // Emit member field\n return new OTree(\n [\n vis,\n isReadOnly(node) ? ' readonly' : '',\n ' ',\n this.renderTypeNode(node.type, node.questionToken !== undefined, renderer),\n ' ',\n renderer.updateContext({ propertyOrMethod }).convert(node.name),\n ...(node.initializer ? [' = ', renderer.convert(node.initializer)] : []),\n ';',\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n // Emit property. No functional difference but slightly more idiomatic\n return new OTree(\n [\n vis,\n ' ',\n this.renderTypeNode(node.type, node.questionToken !== undefined, renderer),\n ' ',\n renderer.updateContext({ propertyOrMethod }).convert(node.name),\n ' ',\n isReadOnly(node) ? '{ get; }' : '{ get; set; }',\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n public override printStatement(args: ts.NodeArray<ts.Expression>, renderer: CSharpRenderer) {\n const renderedArgs =\n args.length === 1\n ? renderer.convertAll(args)\n : [\n '$\"',\n new OTree(\n [],\n args.map((a) => new OTree(['{', renderer.convert(a), '}'])),\n { separator: ' ' },\n ),\n '\"',\n ];\n\n return new OTree(['Console.WriteLine(', ...renderedArgs, ')']);\n }\n\n public override superCallExpression(_node: ts.CallExpression, _renderer: CSharpRenderer): OTree {\n // super() call rendered as part of the constructor already\n return NO_SYNTAX;\n }\n\n public override stringLiteral(\n node: ts.StringLiteral | ts.NoSubstitutionTemplateLiteral,\n renderer: CSharpRenderer,\n ): OTree {\n if (renderer.currentContext.stringAsIdentifier) {\n return this.identifier(node, renderer);\n }\n if (node.text.includes('\\n')) {\n // Multi-line string literals (@\"string\") in C# do not do escaping. Only \" needs to be doubled.\n return new OTree(['@\"', node.text.replace(/\"/g, '\"\"'), '\"']);\n }\n return new OTree([JSON.stringify(node.text)]);\n }\n\n public override expressionStatement(node: ts.ExpressionStatement, renderer: CSharpRenderer): OTree {\n const inner = renderer.convert(node.expression);\n if (inner.isEmpty) {\n return inner;\n }\n return new OTree([inner, ';'], [], { canBreakLine: true });\n }\n\n public override propertyAccessExpression(node: ts.PropertyAccessExpression, renderer: CSharpRenderer): OTree {\n const lhs = renderer.textOf(node.expression);\n\n // Suppress the LHS of the dot operator if it's \"this.\" (not necessary in C#)\n // or if it's an imported module reference (C# has namespace-wide imports).\n const objectExpression =\n lhs === 'this' || this.dropPropertyAccesses.has(lhs)\n ? []\n : [renderer.updateContext({ propertyOrMethod: false }).convert(node.expression), '.'];\n\n return new OTree([...objectExpression, renderer.updateContext({ propertyOrMethod: true }).convert(node.name)]);\n }\n\n public override parameterDeclaration(node: ts.ParameterDeclaration, renderer: CSharpRenderer): OTree {\n return new OTree([\n ...(node.dotDotDotToken ? ['params '] : []), // Varargs. Render with 'params' keyword\n this.renderTypeNode(node.type, node.questionToken !== undefined, renderer),\n ' ',\n renderer.convert(node.name),\n ...(parameterAcceptsUndefined(node, node.type && renderer.typeOfType(node.type))\n ? ['=', node.initializer ? renderer.convert(node.initializer) : 'null']\n : []),\n ]);\n }\n\n public override propertySignature(node: ts.PropertySignature, renderer: CSharpRenderer): OTree {\n const canSet = renderer.currentContext.inStructInterface || !isReadOnly(node);\n\n return new OTree(\n [\n !renderer.currentContext.inRegularInterface ? `${visibility(node)} ` : NO_SYNTAX,\n this.renderTypeNode(node.type, node.questionToken !== undefined, renderer),\n ' ',\n renderer.updateContext({ propertyOrMethod: true }).convert(node.name),\n ' ',\n canSet ? '{ get; set; }' : '{ get; }',\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n /**\n * Do some work on property accesses to translate common JavaScript-isms to language-specific idioms\n */\n public override regularCallExpression(node: ts.CallExpression, renderer: CSharpRenderer): OTree {\n return new OTree([\n renderer.updateContext({ propertyOrMethod: true }).convert(node.expression),\n '(',\n this.argumentList(node.arguments, renderer),\n ')',\n ]);\n }\n\n public override classDeclaration(node: ts.ClassDeclaration, renderer: CSharpRenderer): OTree {\n return new OTree(\n ['class ', renderer.convert(node.name), ...this.classHeritage(node, renderer), '\\n{'],\n renderer\n .updateContext({\n privatePropertyNames: privatePropertyNames(node.members, renderer),\n })\n .convertAll(node.members),\n {\n indent: 4,\n canBreakLine: true,\n suffix: '\\n}',\n },\n );\n }\n\n public override structInterfaceDeclaration(node: ts.InterfaceDeclaration, renderer: CSharpRenderer): OTree {\n return new OTree(\n ['class ', renderer.convert(node.name), ...this.classHeritage(node, renderer), '\\n{'],\n renderer.updateContext({ inStructInterface: true }).convertAll(node.members),\n {\n indent: 4,\n canBreakLine: true,\n suffix: '\\n}',\n },\n );\n }\n\n public override regularInterfaceDeclaration(node: ts.InterfaceDeclaration, renderer: CSharpRenderer): OTree {\n return new OTree(\n ['interface ', renderer.convert(node.name), ...this.classHeritage(node, renderer), '\\n{'],\n renderer.updateContext({ inRegularInterface: true }).convertAll(node.members),\n {\n indent: 4,\n canBreakLine: true,\n suffix: '\\n}',\n },\n );\n }\n\n public override block(node: ts.Block, children: CSharpRenderer): OTree {\n return new OTree(['\\n{'], [...children.convertAll(node.statements)], {\n indent: 4,\n suffix: '\\n}',\n });\n }\n\n public override unknownTypeObjectLiteralExpression(\n node: ts.ObjectLiteralExpression,\n renderer: CSharpRenderer,\n ): OTree {\n if (renderer.currentContext.preferObjectLiteralAsStruct) {\n // Type information missing and from context we prefer a struct\n return new OTree(['new Struct { '], renderer.convertAll(node.properties), {\n suffix: renderer.mirrorNewlineBefore(node.properties[0], '}', ' '),\n separator: ', ',\n indent: 4,\n });\n }\n // Type information missing and from context we prefer a map\n return this.keyValueObjectLiteralExpression(node, renderer);\n }\n\n public override knownStructObjectLiteralExpression(\n node: ts.ObjectLiteralExpression,\n structType: ObjectLiteralStruct,\n renderer: CSharpRenderer,\n ): OTree {\n return new OTree(['new ', structType.type.symbol.name, ' { '], renderer.convertAll(node.properties), {\n suffix: renderer.mirrorNewlineBefore(node.properties[0], '}', ' '),\n separator: ', ',\n indent: 4,\n });\n }\n\n public override keyValueObjectLiteralExpression(node: ts.ObjectLiteralExpression, renderer: CSharpRenderer): OTree {\n // Try to infer an element type from the elements\n const valueType = inferMapElementType(node.properties, renderer.typeChecker);\n\n return new OTree(\n ['new Dictionary<string, ', this.renderType(node, valueType, false, 'object', renderer), '> { '],\n renderer.updateContext({ inKeyValueList: true }).convertAll(node.properties),\n {\n suffix: renderer.mirrorNewlineBefore(node.properties[0], '}', ' '),\n separator: ', ',\n indent: 4,\n },\n );\n }\n\n public override shorthandPropertyAssignment(node: ts.ShorthandPropertyAssignment, renderer: CSharpRenderer): OTree {\n return this.renderPropertyAssignment(node.name, node.name, renderer);\n }\n\n public override propertyAssignment(node: ts.PropertyAssignment, renderer: CSharpRenderer): OTree {\n return this.renderPropertyAssignment(node.name, node.initializer, renderer);\n }\n\n public renderPropertyAssignment(key: ts.Node, value: ts.Node, renderer: CSharpRenderer): OTree {\n if (renderer.currentContext.inKeyValueList) {\n return new OTree(\n [\n '{ ',\n renderer\n .updateContext({\n propertyOrMethod: false,\n identifierAsString: !ts.isComputedPropertyName(key),\n })\n .convert(key),\n ', ',\n renderer.updateContext({ inKeyValueList: false }).convert(value),\n ' }',\n ],\n [],\n { canBreakLine: true },\n );\n }\n return new OTree(\n [\n renderer.updateContext({ propertyOrMethod: true, stringAsIdentifier: true }).convert(key),\n ' = ',\n renderer.convert(value),\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n public override arrayLiteralExpression(node: ts.ArrayLiteralExpression, renderer: CSharpRenderer): OTree {\n return new OTree(['new [] { '], renderer.convertAll(node.elements), {\n separator: ', ',\n suffix: ' }',\n indent: 4,\n });\n }\n\n public override ifStatement(node: ts.IfStatement, renderer: CSharpRenderer): OTree {\n const ifStmt = new OTree(\n ['if (', renderer.convert(node.expression), ') '],\n [renderer.convert(node.thenStatement)],\n { canBreakLine: true },\n );\n const elseStmt = node.elseStatement\n ? new OTree(['else '], [renderer.convert(node.elseStatement)], {\n canBreakLine: true,\n })\n : undefined;\n\n return elseStmt\n ? new OTree([], [ifStmt, elseStmt], {\n separator: '\\n',\n canBreakLine: true,\n })\n : ifStmt;\n }\n\n public override forOfStatement(node: ts.ForOfStatement, renderer: CSharpRenderer): OTree {\n // This is what a \"for (const x of ...)\" looks like in the AST\n let variableName = '???';\n\n matchAst(\n node.initializer,\n nodeOfType(ts.SyntaxKind.VariableDeclarationList, nodeOfType('var', ts.SyntaxKind.VariableDeclaration)),\n (bindings) => {\n variableName = renderer.textOf(bindings.var.name);\n },\n );\n\n return new OTree(\n ['for (var ', variableName, ' in ', renderer.convert(node.expression), ') '],\n [renderer.convert(node.statement)],\n { canBreakLine: true },\n );\n }\n\n public override asExpression(node: ts.AsExpression, context: CSharpRenderer): OTree {\n return new OTree(['(', this.renderTypeNode(node.type, false, context), ')', context.convert(node.expression)]);\n }\n\n public override variableDeclaration(node: ts.VariableDeclaration, renderer: CSharpRenderer): OTree {\n let typeOrVar = 'var';\n\n const fallback = node.type?.getText() ?? 'var';\n const type =\n (node.type && renderer.typeOfType(node.type)) ??\n (node.initializer && renderer.typeOfExpression(node.initializer));\n\n const varType = this.renderType(node, type, false, fallback, renderer);\n // If there is an initializer, and the value isn't \"IDictionary<...\", we always use var, as this is the\n // recommendation from Roslyn.\n if (varType !== 'object' && (varType.startsWith('IDictionary<') || node.initializer == null)) {\n typeOrVar = varType;\n }\n\n if (!node.initializer) {\n return new OTree([typeOrVar, ' ', renderer.convert(node.name), ';']);\n }\n\n return new OTree(\n [\n typeOrVar,\n ' ',\n renderer.convert(node.name),\n ' = ',\n renderer.updateContext({ preferObjectLiteralAsStruct: false }).convert(node.initializer),\n ';',\n ],\n undefined,\n { canBreakLine: true },\n );\n }\n\n public override templateExpression(node: ts.TemplateExpression, context: CSharpRenderer): OTree {\n // If this is a multi-line string literal, we need not quote much, as @\"string\" literals in C#\n // do not perform any quoting. The literal quotes in the text however must be doubled.\n const isMultiLine =\n !!node.head.rawText?.includes('\\n') || node.templateSpans.some((span) => span.literal.rawText?.includes('\\n'));\n\n const parts = new Array<string>();\n if (node.head.rawText) {\n parts.push(isMultiLine ? node.head.rawText.replace(/\"/g, '\"\"') : quoteStringLiteral(node.head.rawText));\n }\n for (const span of node.templateSpans) {\n parts.push(`{${context.textOf(span.expression)}}`);\n if (span.literal.rawText) {\n parts.push(isMultiLine ? span.literal.rawText.replace(/\"/g, '\"\"') : quoteStringLiteral(span.literal.rawText));\n }\n }\n\n return new OTree([isMultiLine ? '$@\"' : '$\"', ...parts, '\"']);\n }\n\n protected override argumentList(args: readonly ts.Node[] | undefined, renderer: CSharpRenderer): OTree {\n return new OTree([], args ? renderer.updateContext({ preferObjectLiteralAsStruct: true }).convertAll(args) : [], {\n separator: ', ',\n });\n }\n\n private renderTypeNode(typeNode: ts.TypeNode | undefined, questionMark: boolean, renderer: CSharpRenderer): string {\n if (!typeNode) {\n return 'void';\n }\n return this.renderType(typeNode, renderer.typeOfType(typeNode), questionMark, renderer.textOf(typeNode), renderer);\n }\n\n private renderType(\n typeNode: ts.Node,\n type: ts.Type | undefined,\n questionMark: boolean,\n fallback: string,\n renderer: CSharpRenderer,\n ): string {\n if (type === undefined) {\n return fallback;\n }\n\n const renderedType = doRender(determineJsiiType(renderer.typeChecker, type));\n\n const suffix = questionMark || typeContainsUndefined(type) ? '?' : '';\n\n return renderedType + suffix;\n\n // eslint-disable-next-line consistent-return\n function doRender(jsiiType: JsiiType): string {\n switch (jsiiType.kind) {\n case 'unknown':\n return fallback;\n case 'error':\n renderer.report(typeNode, jsiiType.message);\n return fallback;\n case 'map':\n return `IDictionary<string, ${doRender(jsiiType.elementType)}>`;\n case 'list':\n return `${doRender(jsiiType.elementType)}[]`;\n case 'namedType':\n return jsiiType.name;\n case 'builtIn':\n switch (jsiiType.builtIn) {\n case 'boolean':\n return 'boolean';\n case 'number':\n return 'int';\n case 'string':\n return 'string';\n case 'any':\n return 'object';\n case 'void':\n return 'void';\n }\n }\n }\n }\n\n private classHeritage(node: ts.ClassDeclaration | ts.InterfaceDeclaration, renderer: CSharpRenderer) {\n const heritage = flat(Array.from(node.heritageClauses ?? []).map((h) => Array.from(h.types))).map((t) =>\n renderer.convert(t.expression),\n );\n\n return heritage.length > 0 ? [' : ', new OTree([], heritage, { separator: ', ' })] : [];\n }\n}\n\n/**\n * Uppercase the first letter\n */\nfunction ucFirst(x: string) {\n return x.slice(0, 1).toUpperCase() + x.slice(1);\n}\n\n/**\n * Find the Java name of a module or type\n */\nfunction findDotnetName(jsiiSymbol: JsiiSymbol): string | undefined {\n if (!jsiiSymbol.sourceAssembly?.assembly) {\n // Don't have accurate info, just guess\n return jsiiSymbol.symbolType !== 'module' ? simpleName(jsiiSymbol.fqn) : guessDotnetNamespace(jsiiSymbol.fqn);\n }\n\n const asm = jsiiSymbol.sourceAssembly?.assembly;\n return recurse(jsiiSymbol.fqn);\n\n function recurse(fqn: string): string {\n if (fqn === asm.name) {\n return jsiiTargetParameter(asm, 'dotnet.namespace') ?? guessDotnetNamespace(fqn);\n }\n if (asm.submodules?.[fqn]) {\n const modName = jsiiTargetParameter(asm.submodules[fqn], 'dotnet.namespace');\n if (modName) {\n return modName;\n }\n }\n\n return `${recurse(namespaceName(fqn))}.${ucFirst(simpleName(jsiiSymbol.fqn))}`;\n }\n}\n\nfunction guessDotnetNamespace(ref: string) {\n return ref\n .split(/[^a-zA-Z0-9]+/g)\n .filter((s) => s !== '')\n .map(ucFirst)\n .join('.');\n}\n"]}
1
+ {"version":3,"file":"csharp.js","sourceRoot":"","sources":["../../src/languages/csharp.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ts from 'typescript';\n\nimport { DefaultVisitor } from './default';\nimport { TargetLanguage } from './target-language';\nimport { determineJsiiType, JsiiType, ObjectLiteralStruct } from '../jsii/jsii-types';\nimport { JsiiSymbol, simpleName, namespaceName } from '../jsii/jsii-utils';\nimport { jsiiTargetParameter } from '../jsii/packages';\nimport { OTree, NO_SYNTAX } from '../o-tree';\nimport { AstRenderer, nimpl } from '../renderer';\nimport {\n matchAst,\n nodeOfType,\n quoteStringLiteral,\n visibility,\n isReadOnly,\n findSuperCall,\n privatePropertyNames,\n findEnclosingClassDeclaration,\n} from '../typescript/ast-utils';\nimport { ImportStatement } from '../typescript/imports';\nimport {\n typeContainsUndefined,\n parameterAcceptsUndefined,\n inferMapElementType,\n determineReturnType,\n} from '../typescript/types';\nimport { flat, fmap } from '../util';\n\ninterface CSharpLanguageContext {\n /**\n * Used to capitalize member accesses\n */\n readonly propertyOrMethod: boolean;\n\n /**\n * So we know how to render property signatures\n */\n readonly inStructInterface: boolean;\n\n /**\n * So we know how to render property signatures\n */\n readonly inRegularInterface: boolean;\n\n /**\n * So we know how to render property assignments\n */\n readonly inKeyValueList: boolean;\n\n /**\n * Whether a string literal is currently in the position of having to render as an identifier (LHS in property assignment)\n */\n readonly stringAsIdentifier: boolean;\n\n /**\n * Whether an identifier literal is currently in the position of having to render as a string (LHS in property assignment)\n */\n readonly identifierAsString: boolean;\n\n /**\n * When parsing an object literal and no type information is available, prefer parsing it as a struct to parsing it as a map\n */\n readonly preferObjectLiteralAsStruct: boolean;\n\n /**\n * When encountering these properties, render them as lowercase instead of uppercase\n */\n readonly privatePropertyNames: string[];\n}\n\ntype CSharpRenderer = AstRenderer<CSharpLanguageContext>;\n\nexport class CSharpVisitor extends DefaultVisitor<CSharpLanguageContext> {\n /**\n * Translation version\n *\n * Bump this when you change something in the implementation to invalidate\n * existing cached translations.\n */\n public static readonly VERSION = '1';\n\n public readonly language = TargetLanguage.CSHARP;\n\n public readonly defaultContext = {\n propertyOrMethod: false,\n inStructInterface: false,\n inRegularInterface: false,\n inKeyValueList: false,\n stringAsIdentifier: false,\n identifierAsString: false,\n preferObjectLiteralAsStruct: true,\n privatePropertyNames: [],\n };\n\n /**\n * Aliases for modules\n *\n * If these are encountered in the LHS of a property access, they will be dropped.\n */\n private readonly dropPropertyAccesses = new Set<string>();\n\n /**\n * Already imported modules so we don't emit duplicate imports\n */\n private readonly alreadyImportedNamespaces = new Set<string>();\n\n /**\n * A map to undo import renames\n *\n * We will always reference the original name in the translation.\n *\n * Maps a local-name to a C# name.\n */\n private readonly renamedSymbols = new Map<string, string>();\n\n public mergeContext(old: CSharpLanguageContext, update: Partial<CSharpLanguageContext>): CSharpLanguageContext {\n return Object.assign({}, old, update);\n }\n\n public override identifier(\n node: ts.Identifier | ts.StringLiteral | ts.NoSubstitutionTemplateLiteral,\n renderer: CSharpRenderer,\n ) {\n let text = node.text;\n\n if (renderer.currentContext.identifierAsString) {\n return new OTree([JSON.stringify(text)]);\n }\n\n // Uppercase methods and properties, leave the rest as-is\n if (renderer.currentContext.propertyOrMethod && !renderer.currentContext.privatePropertyNames.includes(text)) {\n text = ucFirst(text);\n }\n\n return new OTree([text]);\n }\n\n public override importStatement(importStatement: ImportStatement, context: CSharpRenderer): OTree {\n const guessedNamespace = guessDotnetNamespace(importStatement.packageName);\n const namespace = fmap(importStatement.moduleSymbol, findDotnetName) ?? guessedNamespace;\n\n if (importStatement.imports.import === 'full') {\n this.dropPropertyAccesses.add(importStatement.imports.sourceName);\n this.alreadyImportedNamespaces.add(namespace);\n return new OTree([`using ${namespace};`], [], { canBreakLine: true });\n }\n if (importStatement.imports.import === 'selective') {\n const statements = new Array<string>();\n\n for (const el of importStatement.imports.elements) {\n const dotnetNs = fmap(el.importedSymbol, findDotnetName) ?? `${guessedNamespace}.${ucFirst(el.sourceName)}`;\n\n // If this is an alias, we only honor it if it's NOT for sure a module\n // (could be an alias import of a class or enum).\n if (el.alias && el.importedSymbol?.symbolType !== 'module') {\n this.renamedSymbols.set(el.alias, simpleName(dotnetNs));\n statements.push(`using ${ucFirst(el.alias)} = ${dotnetNs};`);\n continue;\n }\n\n // If we are importing a module directly, drop the occurrences of that\n // identifier further down (turn `mod.MyClass` into `MyClass`).\n if (el.importedSymbol?.symbolType === 'module') {\n this.dropPropertyAccesses.add(el.alias ?? el.sourceName);\n }\n\n // Output an import statement for the containing namespace\n const importableNamespace = el.importedSymbol?.symbolType === 'module' ? dotnetNs : namespaceName(dotnetNs);\n if (this.alreadyImportedNamespaces.has(importableNamespace)) {\n continue;\n }\n\n this.alreadyImportedNamespaces.add(importableNamespace);\n statements.push(`using ${importableNamespace};`);\n }\n\n return new OTree([], statements, { canBreakLine: true, separator: '\\n' });\n }\n\n return nimpl(importStatement.node, context);\n }\n\n public override functionDeclaration(node: ts.FunctionDeclaration, renderer: CSharpRenderer): OTree {\n return this.functionLike(node, renderer);\n }\n\n public override constructorDeclaration(node: ts.ConstructorDeclaration, renderer: CSharpRenderer): OTree {\n return this.functionLike(node, renderer, { isConstructor: true });\n }\n\n public override methodDeclaration(node: ts.MethodDeclaration, renderer: CSharpRenderer): OTree {\n return this.functionLike(node, renderer);\n }\n\n public override methodSignature(node: ts.MethodSignature, renderer: CSharpRenderer): OTree {\n return new OTree(\n [\n this.renderTypeNode(node.type, false, renderer),\n ' ',\n renderer.updateContext({ propertyOrMethod: true }).convert(node.name),\n '(',\n new OTree([], renderer.convertAll(node.parameters), {\n separator: ', ',\n }),\n ');',\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n // tslint:disable-next-line:max-line-length\n public functionLike(\n node: ts.FunctionLikeDeclaration | ts.ConstructorDeclaration | ts.MethodDeclaration,\n renderer: CSharpRenderer,\n opts: { isConstructor?: boolean } = {},\n ): OTree {\n const methodName = opts.isConstructor\n ? findEnclosingClassDeclaration(node)?.name?.text ?? 'MyClass'\n : renderer.updateContext({ propertyOrMethod: true }).convert(node.name);\n\n const retType = determineReturnType(renderer.typeChecker, node);\n const returnType = opts.isConstructor ? '' : this.renderType(node, retType, false, 'void', renderer);\n\n const baseConstructorCall = new Array<string | OTree>();\n if (opts.isConstructor) {\n const superCall = findSuperCall(node.body, renderer);\n if (superCall) {\n baseConstructorCall.push(': base(', this.argumentList(superCall.arguments, renderer), ') ');\n }\n }\n\n const ret = new OTree(\n [\n visibility(node),\n ' ',\n returnType,\n returnType ? ' ' : '',\n methodName,\n '(',\n new OTree([], renderer.convertAll(node.parameters), {\n separator: ', ',\n }),\n ') ',\n ...baseConstructorCall,\n ],\n [renderer.convert(node.body)],\n {\n canBreakLine: true,\n },\n );\n\n return ret;\n }\n\n public override propertyDeclaration(node: ts.PropertyDeclaration, renderer: CSharpRenderer): OTree {\n const vis = visibility(node);\n const propertyOrMethod = vis !== 'private'; // Capitalize non-private fields\n\n if (vis === 'private' || node.initializer) {\n // Emit member field\n return new OTree(\n [\n vis,\n isReadOnly(node) ? ' readonly' : '',\n ' ',\n this.renderTypeNode(node.type, node.questionToken !== undefined, renderer),\n ' ',\n renderer.updateContext({ propertyOrMethod }).convert(node.name),\n ...(node.initializer ? [' = ', renderer.convert(node.initializer)] : []),\n ';',\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n // Emit property. No functional difference but slightly more idiomatic\n return new OTree(\n [\n vis,\n ' ',\n this.renderTypeNode(node.type, node.questionToken !== undefined, renderer),\n ' ',\n renderer.updateContext({ propertyOrMethod }).convert(node.name),\n ' ',\n isReadOnly(node) ? '{ get; }' : '{ get; set; }',\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n public override printStatement(args: ts.NodeArray<ts.Expression>, renderer: CSharpRenderer) {\n const renderedArgs =\n args.length === 1\n ? renderer.convertAll(args)\n : [\n '$\"',\n new OTree(\n [],\n args.map((a) => new OTree(['{', renderer.convert(a), '}'])),\n { separator: ' ' },\n ),\n '\"',\n ];\n\n return new OTree(['Console.WriteLine(', ...renderedArgs, ')']);\n }\n\n public override superCallExpression(_node: ts.CallExpression, _renderer: CSharpRenderer): OTree {\n // super() call rendered as part of the constructor already\n return NO_SYNTAX;\n }\n\n public override stringLiteral(\n node: ts.StringLiteral | ts.NoSubstitutionTemplateLiteral,\n renderer: CSharpRenderer,\n ): OTree {\n if (renderer.currentContext.stringAsIdentifier) {\n return this.identifier(node, renderer);\n }\n if (node.text.includes('\\n')) {\n // Multi-line string literals (@\"string\") in C# do not do escaping. Only \" needs to be doubled.\n return new OTree(['@\"', node.text.replace(/\"/g, '\"\"'), '\"']);\n }\n return new OTree([JSON.stringify(node.text)]);\n }\n\n public override expressionStatement(node: ts.ExpressionStatement, renderer: CSharpRenderer): OTree {\n const inner = renderer.convert(node.expression);\n if (inner.isEmpty) {\n return inner;\n }\n return new OTree([inner, ';'], [], { canBreakLine: true });\n }\n\n public override propertyAccessExpression(node: ts.PropertyAccessExpression, renderer: CSharpRenderer): OTree {\n const lhs = renderer.textOf(node.expression);\n\n // Suppress the LHS of the dot operator if it's \"this.\" (not necessary in C#)\n // or if it's an imported module reference (C# has namespace-wide imports).\n const objectExpression =\n lhs === 'this' || this.dropPropertyAccesses.has(lhs)\n ? []\n : [renderer.updateContext({ propertyOrMethod: false }).convert(node.expression), '.'];\n\n return new OTree([...objectExpression, renderer.updateContext({ propertyOrMethod: true }).convert(node.name)]);\n }\n\n public override parameterDeclaration(node: ts.ParameterDeclaration, renderer: CSharpRenderer): OTree {\n return new OTree([\n ...(node.dotDotDotToken ? ['params '] : []), // Varargs. Render with 'params' keyword\n this.renderTypeNode(node.type, node.questionToken !== undefined, renderer),\n ' ',\n renderer.convert(node.name),\n ...(parameterAcceptsUndefined(node, node.type && renderer.typeOfType(node.type))\n ? ['=', node.initializer ? renderer.convert(node.initializer) : 'null']\n : []),\n ]);\n }\n\n public override propertySignature(node: ts.PropertySignature, renderer: CSharpRenderer): OTree {\n const canSet = renderer.currentContext.inStructInterface || !isReadOnly(node);\n\n return new OTree(\n [\n !renderer.currentContext.inRegularInterface ? `${visibility(node)} ` : NO_SYNTAX,\n this.renderTypeNode(node.type, node.questionToken !== undefined, renderer),\n ' ',\n renderer.updateContext({ propertyOrMethod: true }).convert(node.name),\n ' ',\n canSet ? '{ get; set; }' : '{ get; }',\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n /**\n * Do some work on property accesses to translate common JavaScript-isms to language-specific idioms\n */\n public override regularCallExpression(node: ts.CallExpression, renderer: CSharpRenderer): OTree {\n return new OTree([\n renderer.updateContext({ propertyOrMethod: true }).convert(node.expression),\n '(',\n this.argumentList(node.arguments, renderer),\n ')',\n ]);\n }\n\n public override classDeclaration(node: ts.ClassDeclaration, renderer: CSharpRenderer): OTree {\n return new OTree(\n ['class ', renderer.convert(node.name), ...this.classHeritage(node, renderer), '\\n{'],\n renderer\n .updateContext({\n privatePropertyNames: privatePropertyNames(node.members, renderer),\n })\n .convertAll(node.members),\n {\n indent: 4,\n canBreakLine: true,\n suffix: '\\n}',\n },\n );\n }\n\n public override structInterfaceDeclaration(node: ts.InterfaceDeclaration, renderer: CSharpRenderer): OTree {\n return new OTree(\n ['class ', renderer.convert(node.name), ...this.classHeritage(node, renderer), '\\n{'],\n renderer.updateContext({ inStructInterface: true }).convertAll(node.members),\n {\n indent: 4,\n canBreakLine: true,\n suffix: '\\n}',\n },\n );\n }\n\n public override regularInterfaceDeclaration(node: ts.InterfaceDeclaration, renderer: CSharpRenderer): OTree {\n return new OTree(\n ['interface ', renderer.convert(node.name), ...this.classHeritage(node, renderer), '\\n{'],\n renderer.updateContext({ inRegularInterface: true }).convertAll(node.members),\n {\n indent: 4,\n canBreakLine: true,\n suffix: '\\n}',\n },\n );\n }\n\n public override block(node: ts.Block, children: CSharpRenderer): OTree {\n return new OTree(['\\n{'], [...children.convertAll(node.statements)], {\n indent: 4,\n suffix: '\\n}',\n });\n }\n\n public override unknownTypeObjectLiteralExpression(\n node: ts.ObjectLiteralExpression,\n renderer: CSharpRenderer,\n ): OTree {\n if (renderer.currentContext.preferObjectLiteralAsStruct) {\n // Type information missing and from context we prefer a struct\n return new OTree(['new Struct { '], renderer.convertAll(node.properties), {\n suffix: renderer.mirrorNewlineBefore(node.properties[0], '}', ' '),\n separator: ', ',\n indent: 4,\n });\n }\n // Type information missing and from context we prefer a map\n return this.keyValueObjectLiteralExpression(node, renderer);\n }\n\n public override knownStructObjectLiteralExpression(\n node: ts.ObjectLiteralExpression,\n structType: ObjectLiteralStruct,\n renderer: CSharpRenderer,\n ): OTree {\n return new OTree(['new ', structType.type.symbol.name, ' { '], renderer.convertAll(node.properties), {\n suffix: renderer.mirrorNewlineBefore(node.properties[0], '}', ' '),\n separator: ', ',\n indent: 4,\n });\n }\n\n public override keyValueObjectLiteralExpression(node: ts.ObjectLiteralExpression, renderer: CSharpRenderer): OTree {\n // Try to infer an element type from the elements\n const valueType = inferMapElementType(node.properties, renderer.typeChecker);\n\n return new OTree(\n ['new Dictionary<string, ', this.renderType(node, valueType, false, 'object', renderer), '> { '],\n renderer.updateContext({ inKeyValueList: true }).convertAll(node.properties),\n {\n suffix: renderer.mirrorNewlineBefore(node.properties[0], '}', ' '),\n separator: ', ',\n indent: 4,\n },\n );\n }\n\n public override shorthandPropertyAssignment(node: ts.ShorthandPropertyAssignment, renderer: CSharpRenderer): OTree {\n return this.renderPropertyAssignment(node.name, node.name, renderer);\n }\n\n public override propertyAssignment(node: ts.PropertyAssignment, renderer: CSharpRenderer): OTree {\n return this.renderPropertyAssignment(node.name, node.initializer, renderer);\n }\n\n public renderPropertyAssignment(key: ts.Node, value: ts.Node, renderer: CSharpRenderer): OTree {\n if (renderer.currentContext.inKeyValueList) {\n return new OTree(\n [\n '{ ',\n renderer\n .updateContext({\n propertyOrMethod: false,\n identifierAsString: !ts.isComputedPropertyName(key),\n })\n .convert(key),\n ', ',\n renderer.updateContext({ inKeyValueList: false }).convert(value),\n ' }',\n ],\n [],\n { canBreakLine: true },\n );\n }\n return new OTree(\n [\n renderer.updateContext({ propertyOrMethod: true, stringAsIdentifier: true }).convert(key),\n ' = ',\n renderer.convert(value),\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n public override arrayLiteralExpression(node: ts.ArrayLiteralExpression, renderer: CSharpRenderer): OTree {\n return new OTree(['new [] { '], renderer.convertAll(node.elements), {\n separator: ', ',\n suffix: ' }',\n indent: 4,\n });\n }\n\n public override ifStatement(node: ts.IfStatement, renderer: CSharpRenderer): OTree {\n const ifStmt = new OTree(\n ['if (', renderer.convert(node.expression), ') '],\n [renderer.convert(node.thenStatement)],\n { canBreakLine: true },\n );\n const elseStmt = node.elseStatement\n ? new OTree(['else '], [renderer.convert(node.elseStatement)], {\n canBreakLine: true,\n })\n : undefined;\n\n return elseStmt\n ? new OTree([], [ifStmt, elseStmt], {\n separator: '\\n',\n canBreakLine: true,\n })\n : ifStmt;\n }\n\n public override forOfStatement(node: ts.ForOfStatement, renderer: CSharpRenderer): OTree {\n // This is what a \"for (const x of ...)\" looks like in the AST\n let variableName = '???';\n\n matchAst(\n node.initializer,\n nodeOfType(ts.SyntaxKind.VariableDeclarationList, nodeOfType('var', ts.SyntaxKind.VariableDeclaration)),\n (bindings) => {\n variableName = renderer.textOf(bindings.var.name);\n },\n );\n\n return new OTree(\n ['for (var ', variableName, ' in ', renderer.convert(node.expression), ') '],\n [renderer.convert(node.statement)],\n { canBreakLine: true },\n );\n }\n\n public override asExpression(node: ts.AsExpression, context: CSharpRenderer): OTree {\n return new OTree(['(', this.renderTypeNode(node.type, false, context), ')', context.convert(node.expression)]);\n }\n\n public override variableDeclaration(node: ts.VariableDeclaration, renderer: CSharpRenderer): OTree {\n let typeOrVar = 'var';\n\n const fallback = node.type?.getText() ?? 'var';\n const type =\n (node.type && renderer.typeOfType(node.type)) ??\n (node.initializer && renderer.typeOfExpression(node.initializer));\n\n const varType = this.renderType(node, type, false, fallback, renderer);\n // If there is an initializer, and the value isn't \"IDictionary<...\", we always use var, as this is the\n // recommendation from Roslyn.\n if (varType !== 'object' && (varType.startsWith('IDictionary<') || node.initializer == null)) {\n typeOrVar = varType;\n }\n\n if (!node.initializer) {\n return new OTree([typeOrVar, ' ', renderer.convert(node.name), ';']);\n }\n\n return new OTree(\n [\n typeOrVar,\n ' ',\n renderer.convert(node.name),\n ' = ',\n renderer.updateContext({ preferObjectLiteralAsStruct: false }).convert(node.initializer),\n ';',\n ],\n undefined,\n { canBreakLine: true },\n );\n }\n\n public override templateExpression(node: ts.TemplateExpression, context: CSharpRenderer): OTree {\n // If this is a multi-line string literal, we need not quote much, as @\"string\" literals in C#\n // do not perform any quoting. The literal quotes in the text however must be doubled.\n const isMultiLine =\n !!node.head.rawText?.includes('\\n') || node.templateSpans.some((span) => span.literal.rawText?.includes('\\n'));\n\n const parts = new Array<string>();\n if (node.head.rawText) {\n parts.push(isMultiLine ? node.head.rawText.replace(/\"/g, '\"\"') : quoteStringLiteral(node.head.rawText));\n }\n for (const span of node.templateSpans) {\n parts.push(`{${context.textOf(span.expression)}}`);\n if (span.literal.rawText) {\n parts.push(isMultiLine ? span.literal.rawText.replace(/\"/g, '\"\"') : quoteStringLiteral(span.literal.rawText));\n }\n }\n\n return new OTree([isMultiLine ? '$@\"' : '$\"', ...parts, '\"']);\n }\n\n protected override argumentList(args: readonly ts.Node[] | undefined, renderer: CSharpRenderer): OTree {\n return new OTree([], args ? renderer.updateContext({ preferObjectLiteralAsStruct: true }).convertAll(args) : [], {\n separator: ', ',\n });\n }\n\n private renderTypeNode(typeNode: ts.TypeNode | undefined, questionMark: boolean, renderer: CSharpRenderer): string {\n if (!typeNode) {\n return 'void';\n }\n return this.renderType(typeNode, renderer.typeOfType(typeNode), questionMark, renderer.textOf(typeNode), renderer);\n }\n\n private renderType(\n typeNode: ts.Node,\n type: ts.Type | undefined,\n questionMark: boolean,\n fallback: string,\n renderer: CSharpRenderer,\n ): string {\n if (type === undefined) {\n return fallback;\n }\n\n const renderedType = doRender(determineJsiiType(renderer.typeChecker, type));\n\n const suffix = questionMark || typeContainsUndefined(type) ? '?' : '';\n\n return renderedType + suffix;\n\n // eslint-disable-next-line consistent-return\n function doRender(jsiiType: JsiiType): string {\n switch (jsiiType.kind) {\n case 'unknown':\n return fallback;\n case 'error':\n renderer.report(typeNode, jsiiType.message);\n return fallback;\n case 'map':\n return `IDictionary<string, ${doRender(jsiiType.elementType)}>`;\n case 'list':\n return `${doRender(jsiiType.elementType)}[]`;\n case 'intersection':\n const renderedBranches = jsiiType.branches.map(doRender);\n return `${renderedBranches[0]} /* & ${renderedBranches.slice(1).join(' & ')} */`;\n case 'namedType':\n return jsiiType.name;\n case 'builtIn':\n switch (jsiiType.builtIn) {\n case 'boolean':\n return 'boolean';\n case 'number':\n return 'int';\n case 'string':\n return 'string';\n case 'any':\n return 'object';\n case 'void':\n return 'void';\n }\n }\n }\n }\n\n private classHeritage(node: ts.ClassDeclaration | ts.InterfaceDeclaration, renderer: CSharpRenderer) {\n const heritage = flat(Array.from(node.heritageClauses ?? []).map((h) => Array.from(h.types))).map((t) =>\n renderer.convert(t.expression),\n );\n\n return heritage.length > 0 ? [' : ', new OTree([], heritage, { separator: ', ' })] : [];\n }\n}\n\n/**\n * Uppercase the first letter\n */\nfunction ucFirst(x: string) {\n return x.slice(0, 1).toUpperCase() + x.slice(1);\n}\n\n/**\n * Find the Java name of a module or type\n */\nfunction findDotnetName(jsiiSymbol: JsiiSymbol): string | undefined {\n if (!jsiiSymbol.sourceAssembly?.assembly) {\n // Don't have accurate info, just guess\n return jsiiSymbol.symbolType !== 'module' ? simpleName(jsiiSymbol.fqn) : guessDotnetNamespace(jsiiSymbol.fqn);\n }\n\n const asm = jsiiSymbol.sourceAssembly?.assembly;\n return recurse(jsiiSymbol.fqn);\n\n function recurse(fqn: string): string {\n if (fqn === asm.name) {\n return jsiiTargetParameter(asm, 'dotnet.namespace') ?? guessDotnetNamespace(fqn);\n }\n if (asm.submodules?.[fqn]) {\n const modName = jsiiTargetParameter(asm.submodules[fqn], 'dotnet.namespace');\n if (modName) {\n return modName;\n }\n }\n\n return `${recurse(namespaceName(fqn))}.${ucFirst(simpleName(jsiiSymbol.fqn))}`;\n }\n}\n\nfunction guessDotnetNamespace(ref: string) {\n return ref\n .split(/[^a-zA-Z0-9]+/g)\n .filter((s) => s !== '')\n .map(ucFirst)\n .join('.');\n}\n"]}
@@ -675,6 +675,9 @@ class GoVisitor extends default_1.DefaultVisitor {
675
675
  return `[]${doRender(jType.elementType, true, jType.elementTypeSymbol)}`;
676
676
  case 'namedType':
677
677
  return this.goName(jType.name, renderer, typeSym);
678
+ case 'intersection':
679
+ const renderedBranches = jType.branches.map((t, i) => doRender(t, false, jType.branchSymbols[i]));
680
+ return `interface { ${renderedBranches.join('; ')} }`;
678
681
  case 'builtIn':
679
682
  switch (jType.builtIn) {
680
683
  case 'boolean':
@@ -703,11 +706,17 @@ class GoVisitor extends default_1.DefaultVisitor {
703
706
  const indexSignature = ts.SymbolFlags.Signature | ts.SymbolFlags.Transient;
704
707
  const cacheKey = symbol != null && (symbol.flags & indexSignature) === indexSignature ? input : symbol ?? input;
705
708
  const prev = this.idMap.get(cacheKey) ?? this.idMap.get(input);
709
+ const symbolExported = symbol?.declarations?.[0] && ts.getCombinedModifierFlags(symbol?.declarations?.[0]) & ts.ModifierFlags.Export;
710
+ // For some reason we are considering a global flag here; that solves cases
711
+ // where the type is being declared, but it doesn't solve cases where the
712
+ // type is being referenced. Also consider a potential `export` keyword on
713
+ // the type declaration.
714
+ const isExp = renderer.currentContext.isExported || symbolExported;
706
715
  if (prev) {
707
716
  // If an identifier has been renamed go get it
708
717
  text = prev.formatted;
709
718
  }
710
- else if (renderer.currentContext.isExported && !renderer.currentContext.inMapLiteral) {
719
+ else if (isExp && !renderer.currentContext.inMapLiteral) {
711
720
  // Uppercase exported and public symbols/members
712
721
  text = ucFirst(text);
713
722
  }