jsii-rosetta 5.9.49 → 6.0.0-dev.0

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.
Files changed (77) hide show
  1. package/README.md +2 -3
  2. package/lib/commands/coverage.js +34 -1
  3. package/lib/commands/coverage.js.map +1 -1
  4. package/lib/commands/extract.js +35 -2
  5. package/lib/commands/extract.js.map +1 -1
  6. package/lib/commands/infuse.js +36 -3
  7. package/lib/commands/infuse.js.map +1 -1
  8. package/lib/commands/trim-cache.js +34 -1
  9. package/lib/commands/trim-cache.js.map +1 -1
  10. package/lib/find-utils.js +34 -1
  11. package/lib/find-utils.js.map +1 -1
  12. package/lib/fixtures.js +35 -2
  13. package/lib/fixtures.js.map +1 -1
  14. package/lib/jsii/assemblies.js +36 -3
  15. package/lib/jsii/assemblies.js.map +1 -1
  16. package/lib/jsii/fingerprinting.js +36 -3
  17. package/lib/jsii/fingerprinting.js.map +1 -1
  18. package/lib/jsii/jsii-types.js +34 -1
  19. package/lib/jsii/jsii-types.js.map +1 -1
  20. package/lib/jsii/jsii-utils.js +35 -2
  21. package/lib/jsii/jsii-utils.js.map +1 -1
  22. package/lib/json.js +5 -2
  23. package/lib/json.js.map +1 -1
  24. package/lib/languages/csharp.js +34 -1
  25. package/lib/languages/csharp.js.map +1 -1
  26. package/lib/languages/default.js +34 -1
  27. package/lib/languages/default.js.map +1 -1
  28. package/lib/languages/go.js +34 -1
  29. package/lib/languages/go.js.map +1 -1
  30. package/lib/languages/java.js +34 -1
  31. package/lib/languages/java.js.map +1 -1
  32. package/lib/languages/python.js +34 -1
  33. package/lib/languages/python.js.map +1 -1
  34. package/lib/languages/target-language.js +5 -2
  35. package/lib/languages/target-language.js.map +1 -1
  36. package/lib/logging.js +34 -1
  37. package/lib/logging.js.map +1 -1
  38. package/lib/main.js +36 -3
  39. package/lib/main.js.map +1 -1
  40. package/lib/markdown/extract-snippets.js +34 -1
  41. package/lib/markdown/extract-snippets.js.map +1 -1
  42. package/lib/markdown/markdown.js +34 -1
  43. package/lib/markdown/markdown.js.map +1 -1
  44. package/lib/renderer.js +34 -1
  45. package/lib/renderer.js.map +1 -1
  46. package/lib/rosetta-reader.js +34 -1
  47. package/lib/rosetta-reader.js.map +1 -1
  48. package/lib/rosetta-translator.js +34 -1
  49. package/lib/rosetta-translator.js.map +1 -1
  50. package/lib/snippet-dependencies.js +44 -8
  51. package/lib/snippet-dependencies.js.map +1 -1
  52. package/lib/submodule-reference.js +34 -1
  53. package/lib/submodule-reference.js.map +1 -1
  54. package/lib/support.js +34 -1
  55. package/lib/support.js.map +1 -1
  56. package/lib/tablets/key.js +34 -1
  57. package/lib/tablets/key.js.map +1 -1
  58. package/lib/tablets/tablets.js +36 -3
  59. package/lib/tablets/tablets.js.map +1 -1
  60. package/lib/translate.js +36 -3
  61. package/lib/translate.js.map +1 -1
  62. package/lib/translate_all.js +37 -4
  63. package/lib/translate_all.js.map +1 -1
  64. package/lib/translate_all_worker.js +35 -2
  65. package/lib/translate_all_worker.js.map +1 -1
  66. package/lib/typescript/ast-utils.js +34 -1
  67. package/lib/typescript/ast-utils.js.map +1 -1
  68. package/lib/typescript/imports.js +34 -1
  69. package/lib/typescript/imports.js.map +1 -1
  70. package/lib/typescript/syntax-kind-counter.js +34 -1
  71. package/lib/typescript/syntax-kind-counter.js.map +1 -1
  72. package/lib/typescript/ts-compiler.js +37 -1
  73. package/lib/typescript/ts-compiler.js.map +1 -1
  74. package/lib/typescript/types.js +34 -1
  75. package/lib/typescript/types.js.map +1 -1
  76. package/package.json +9 -8
  77. package/releases.json +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"translate.js","sourceRoot":"","sources":["../src/translate.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from 'node:path';\nimport { inspect } from 'node:util';\nimport * as ts from 'typescript';\n\nimport { TARGET_LANGUAGES, TargetLanguage } from './languages';\nimport { RecordReferencesVisitor } from './languages/record-references';\nimport { supportsTransitiveSubmoduleAccess } from './languages/target-language';\nimport * as logging from './logging';\nimport { renderTree } from './o-tree';\nimport { AstRenderer, AstHandler, AstRendererOptions } from './renderer';\nimport { TypeScriptSnippet, completeSource, SnippetParameters, formatLocation } from './snippet';\nimport { SubmoduleReference, SubmoduleReferenceMap } from './submodule-reference';\nimport { ORIGINAL_SNIPPET_KEY } from './tablets/schema';\nimport { TranslatedSnippet } from './tablets/tablets';\nimport { SyntaxKindCounter } from './typescript/syntax-kind-counter';\nimport { TypeScriptCompiler, CompilationResult, BatchCompilationResult } from './typescript/ts-compiler';\nimport { Spans } from './typescript/visible-spans';\nimport { annotateStrictDiagnostic, File, hasStrictBranding, mkDict } from './util';\n\nexport interface TranslateResult {\n translation: string;\n diagnostics: readonly RosettaDiagnostic[];\n}\n\nexport function translateTypeScript(\n source: File,\n visitor: AstHandler<any>,\n options: SnippetTranslatorOptions = {},\n): TranslateResult {\n const translator = new SnippetTranslator(\n { visibleSource: source.contents, location: { api: { api: 'file', fileName: source.fileName } } },\n options,\n );\n const translated = translator.renderUsing(visitor);\n\n return {\n translation: translated,\n diagnostics: translator.diagnostics.map(rosettaDiagFromTypescript),\n };\n}\n\n/**\n * Translate one or more TypeScript snippets into other languages\n *\n * Can be configured to fully typecheck the samples, or perform only syntactical\n * translation.\n */\nexport class Translator {\n private readonly compiler = new TypeScriptCompiler();\n #diagnostics: ts.Diagnostic[] = [];\n\n public get diagnostics(): readonly RosettaDiagnostic[] {\n return ts.sortAndDeduplicateDiagnostics(this.#diagnostics).map(rosettaDiagFromTypescript);\n }\n\n public constructor(private readonly includeCompilerDiagnostics: boolean) {}\n\n /**\n * Return the snippet translator for the given snippet\n *\n * We used to cache these, but each translator holds on to quite a bit of memory,\n * so we don't do that anymore.\n */\n public translatorFor(snippet: TypeScriptSnippet) {\n const translator = new SnippetTranslator(snippet, {\n compiler: this.compiler,\n includeCompilerDiagnostics: this.includeCompilerDiagnostics,\n });\n return translator;\n }\n\n /**\n * Translates a single snippet in its own TS context.\n */\n public translate(snip: TypeScriptSnippet, languages: readonly TargetLanguage[] = Object.values(TargetLanguage)) {\n const translator = this.translatorFor(snip);\n const translated = this.translateSnippet(snip, translator, languages);\n return translated;\n }\n\n /**\n * Translates a batch of snippets, using a shared TS context.\n */\n public translateSnippets(\n snippets: TypeScriptSnippet[],\n languages: readonly TargetLanguage[] = Object.values(TargetLanguage),\n ): TranslatedSnippet[] {\n const start = performance.now();\n logging.debug(`Translating batch of ${snippets.length} snippets`);\n\n const res = this.translateBatch(snippets, languages);\n\n const duration = performance.now() - start;\n logging.debug(\n `Completed batch ${inspect({\n duration: `${(duration / 1000).toFixed(2)}s`,\n })}`,\n );\n\n return res;\n }\n\n private translateBatch(\n snippets: TypeScriptSnippet[],\n languages: readonly TargetLanguage[] = Object.values(TargetLanguage),\n ): TranslatedSnippet[] {\n const translatedSnippets: TranslatedSnippet[] = [];\n\n const batchTranslator = new BatchSnippetTranslator(snippets, {\n compiler: this.compiler,\n includeCompilerDiagnostics: this.includeCompilerDiagnostics,\n });\n\n for (const [snippet, translator] of batchTranslator) {\n translatedSnippets.push(this.translateSnippet(snippet, translator, languages));\n }\n\n return translatedSnippets;\n }\n\n private translateSnippet(\n snippet: TypeScriptSnippet,\n translator: ISnippetTranslator,\n languages: readonly TargetLanguage[],\n ): TranslatedSnippet {\n const translations = mkDict(\n languages.flatMap((lang, idx, array) => {\n if (array.slice(0, idx).includes(lang)) {\n return [];\n }\n const languageConverterFactory = TARGET_LANGUAGES[lang];\n const translated = translator.renderUsing(languageConverterFactory.createVisitor());\n return [[lang, { source: translated, version: languageConverterFactory.version }] as const];\n }),\n );\n\n if (snippet.parameters?.infused === undefined) {\n this.#diagnostics.push(...translator.diagnostics);\n }\n\n return TranslatedSnippet.fromSchema({\n translations: {\n ...translations,\n [ORIGINAL_SNIPPET_KEY]: { source: snippet.visibleSource, version: '0' },\n },\n location: snippet.location,\n didCompile: translator.didSuccessfullyCompile,\n fqnsReferenced: translator.fqnsReferenced(),\n fullSource: completeSource(snippet),\n syntaxKindCounter: translator.syntaxKindCounter(),\n });\n }\n}\n\nexport interface ISnippetTranslator {\n readonly diagnostics: readonly ts.Diagnostic[];\n readonly didSuccessfullyCompile: boolean | undefined;\n\n renderUsing(visitor: AstHandler<any>): string;\n syntaxKindCounter(): Partial<Record<ts.SyntaxKind, number>>;\n fqnsReferenced(): string[];\n}\n\nexport interface SnippetTranslatorOptions extends AstRendererOptions {\n /**\n * Re-use the given compiler if given\n */\n readonly compiler?: TypeScriptCompiler;\n\n /**\n * Include compiler errors in return diagnostics\n *\n * If false, only translation diagnostics will be returned.\n *\n * @default false\n */\n readonly includeCompilerDiagnostics?: boolean;\n}\n\n/**\n * Internal implementation of a single TypeScript snippet translator.\n *\n * Consumers should either use `SnippetTranslator` or `BatchSnippetTranslator`.\n */\nclass InternalSnippetTranslator implements ISnippetTranslator {\n public readonly translateDiagnostics: ts.Diagnostic[] = [];\n public readonly compileDiagnostics: ts.Diagnostic[] = [];\n\n private readonly visibleSpans: Spans;\n private readonly tryCompile: boolean;\n private readonly submoduleReferences: SubmoduleReferenceMap;\n\n public constructor(\n snippet: TypeScriptSnippet,\n private readonly compilation: CompilationResult,\n private readonly options: SnippetTranslatorOptions,\n ) {\n // Respect '/// !hide' and '/// !show' directives\n // Use the actual compiled source text to ensure spans match the AST\n this.visibleSpans = Spans.visibleSpansFromSource(compilation.rootFile.text);\n\n // Find submodule references on explicit imports\n this.submoduleReferences = SubmoduleReference.inSourceFile(\n compilation.rootFile,\n this.compilation.program.getTypeChecker(),\n );\n\n // This makes it about 5x slower, so only do it on demand\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.tryCompile = (this.options.includeCompilerDiagnostics || snippet.strict) ?? false;\n if (this.tryCompile) {\n const program = this.compilation.program;\n const diagnostics = [\n ...neverThrowing(program.getGlobalDiagnostics)(),\n ...neverThrowing(program.getSyntacticDiagnostics)(this.compilation.rootFile),\n ...neverThrowing(program.getDeclarationDiagnostics)(this.compilation.rootFile),\n ...neverThrowing(program.getSemanticDiagnostics)(this.compilation.rootFile),\n ];\n\n if (snippet.strict) {\n // In a strict assembly, so we'll need to brand all diagnostics here...\n for (const diag of diagnostics) {\n annotateStrictDiagnostic(diag);\n }\n }\n this.compileDiagnostics.push(...diagnostics);\n }\n }\n\n /**\n * Returns a boolean if compilation was attempted, and undefined if it was not.\n */\n public get didSuccessfullyCompile() {\n return this.tryCompile ? this.compileDiagnostics.length === 0 : undefined;\n }\n\n public renderUsing(visitor: AstHandler<any>) {\n const converter = new AstRenderer(\n this.compilation.rootFile,\n this.compilation.program.getTypeChecker(),\n visitor,\n this.options,\n // If we support transitive submodule access, don't provide a submodule reference map.\n supportsTransitiveSubmoduleAccess(visitor.language) ? undefined : this.submoduleReferences,\n );\n const converted = converter.convert(this.compilation.rootFile);\n this.translateDiagnostics.push(...filterVisibleDiagnostics(converter.diagnostics, this.visibleSpans));\n return renderTree(converted, { indentChar: visitor.indentChar, visibleSpans: this.visibleSpans });\n }\n\n public syntaxKindCounter(): Partial<Record<ts.SyntaxKind, number>> {\n const kindCounter = new SyntaxKindCounter(this.visibleSpans);\n return kindCounter.countKinds(this.compilation.rootFile);\n }\n\n public fqnsReferenced() {\n const visitor = new RecordReferencesVisitor(this.visibleSpans);\n const converter = new AstRenderer(\n this.compilation.rootFile,\n this.compilation.program.getTypeChecker(),\n visitor,\n this.options,\n this.submoduleReferences,\n );\n converter.convert(this.compilation.rootFile);\n return visitor.fqnsReferenced();\n }\n\n public get diagnostics(): readonly ts.Diagnostic[] {\n return ts.sortAndDeduplicateDiagnostics(this.compileDiagnostics.concat(this.translateDiagnostics));\n }\n}\n\n/**\n * Translate a single TypeScript snippet\n */\nexport class SnippetTranslator extends InternalSnippetTranslator {\n public constructor(snippet: TypeScriptSnippet, options: SnippetTranslatorOptions = {}) {\n const compiler = options.compiler ?? new TypeScriptCompiler();\n const source = completeSource(snippet);\n const fakeCurrentDirectory = snippet.parameters?.[SnippetParameters.$COMPILATION_DIRECTORY] ?? process.cwd();\n const compilation = compiler.compileBatchInMemory(\n [\n {\n filename: removeSlashes(formatLocation(snippet.location)),\n contents: source,\n },\n ],\n fakeCurrentDirectory,\n );\n\n super(\n snippet,\n {\n program: compilation.program,\n rootFile: compilation.rootFiles[0],\n },\n options,\n );\n }\n}\n\nexport interface BatchSnippetTranslatorOptions extends SnippetTranslatorOptions {\n /**\n * What directory to pretend the file is in (system parameter)\n *\n * Attached when compiling a literate file, as they compile in\n * the location where they are stored.\n *\n * @default - current working directory\n */\n readonly compilationDirectory?: string;\n}\n\n/**\n * Translate a single TypeScript snippet\n */\nexport class BatchSnippetTranslator {\n private readonly compilation: BatchCompilationResult;\n\n public constructor(\n private readonly snippets: TypeScriptSnippet[],\n private readonly options: BatchSnippetTranslatorOptions = {},\n ) {\n const compiler = options.compiler ?? new TypeScriptCompiler();\n const workingDir = options.compilationDirectory ?? process.cwd();\n\n const sources = snippets.map((snippet) => {\n const snippetLoc = snippet.parameters?.[SnippetParameters.$COMPILATION_DIRECTORY];\n const filename = removeSlashes(formatLocation(snippet.location));\n\n return {\n filename: snippetLoc ? path.relative(workingDir, path.join(snippetLoc, filename)) : filename,\n contents: completeSource(snippet),\n };\n });\n this.compilation = compiler.compileBatchInMemory(sources, workingDir);\n }\n\n *[Symbol.iterator](): Generator<[TypeScriptSnippet, ISnippetTranslator], void, unknown> {\n for (const [idx, snippet] of this.snippets.entries()) {\n const rootFile = this.compilation.rootFiles[idx];\n\n const translator: ISnippetTranslator = new InternalSnippetTranslator(\n snippet,\n {\n program: this.compilation.program,\n rootFile,\n },\n this.options,\n );\n\n yield [snippet, translator];\n }\n }\n}\n\n/**\n * Intercepts all exceptions thrown by the wrapped call, and logs them to\n * console.error instead of re-throwing, then returns an empty array. This\n * is here to avoid compiler crashes due to broken code examples that cause\n * the TypeScript compiler to hit a \"Debug Failure\".\n */\nfunction neverThrowing<A extends unknown[], R>(call: (...args: A) => readonly R[]): (...args: A) => readonly R[] {\n return (...args: A) => {\n try {\n return call(...args);\n } catch (err: any) {\n const isExpectedTypescriptError = err.message.includes('Debug Failure');\n\n if (!isExpectedTypescriptError) {\n console.error(`Failed to execute ${call.name}: ${err}`);\n }\n\n return [];\n }\n };\n}\n\n/**\n * Hide diagnostics that are rosetta-sourced if they are reported against a non-visible span\n */\nfunction filterVisibleDiagnostics(diags: readonly ts.Diagnostic[], visibleSpans: Spans): ts.Diagnostic[] {\n return diags.filter((d) => d.source !== 'rosetta' || d.start === undefined || visibleSpans.containsPosition(d.start));\n}\n\n/**\n * A translation of a TypeScript diagnostic into a data-only representation for Rosetta\n *\n * We cannot use the original `ts.Diagnostic` since it holds on to way too much\n * state (the source file and by extension the entire parse tree), which grows\n * too big to be properly serialized by a worker and also takes too much memory.\n *\n * Reduce it down to only the information we need.\n */\nexport interface SnippetTimingInfo {\n readonly name: string;\n readonly snippetKey: string;\n readonly durationMs: number;\n}\n\nexport interface RosettaDiagnostic {\n /**\n * If this is an error diagnostic or not\n */\n readonly isError: boolean;\n\n /**\n * If the diagnostic was emitted from an assembly that has its 'strict' flag set\n */\n readonly isFromStrictAssembly: boolean;\n\n /**\n * The formatted message, ready to be printed (will have colors and newlines in it)\n *\n * Ends in a newline.\n */\n readonly formattedMessage: string;\n\n /**\n * Optional timing information for snippet translation\n */\n readonly timingInfo?: SnippetTimingInfo;\n}\n\nexport function makeRosettaDiagnostic(isError: boolean, formattedMessage: string): RosettaDiagnostic {\n return { isError, formattedMessage, isFromStrictAssembly: false };\n}\n\nexport function makeTimingDiagnostic(snippetKey: string, name: string, durationMs: number): RosettaDiagnostic {\n return {\n isError: false,\n isFromStrictAssembly: false,\n formattedMessage: '',\n timingInfo: { snippetKey, name, durationMs },\n };\n}\n\nexport function extractTimingInfo(diagnostics: readonly RosettaDiagnostic[]): {\n timings: SnippetTimingInfo[];\n diagnostics: RosettaDiagnostic[];\n} {\n const timings: SnippetTimingInfo[] = [];\n const regular: RosettaDiagnostic[] = [];\n\n for (const diag of diagnostics) {\n if (diag.timingInfo) {\n timings.push(diag.timingInfo);\n } else {\n regular.push(diag);\n }\n }\n\n return { timings, diagnostics: regular };\n}\n\nexport function formatTimingTable(timings: SnippetTimingInfo[]): string {\n if (timings.length === 0) {\n return '';\n }\n\n const totalTime = timings.reduce((sum, t) => sum + t.durationMs, 0);\n const sorted = timings.sort((a, b) => b.durationMs - a.durationMs).slice(0, 10);\n\n const lines = [\n '',\n '=== Top 10 Slowest Snippets ===',\n 'Rank | Time (s) | % of Total | Snippet ',\n '-----|----------|------------|--------------------------------',\n ];\n\n for (const [idx, timing] of sorted.entries()) {\n const timeS = (timing.durationMs / 1000).toFixed(2).padStart(8);\n const pct = ((timing.durationMs / totalTime) * 100).toFixed(1).padStart(9) + '%';\n lines.push(`${(idx + 1).toString().padEnd(4)} | ${timeS} | ${pct} | ${timing.name}`);\n }\n\n lines.push('');\n lines.push(`Total translation time: ${(totalTime / 1000).toFixed(2)}s`);\n lines.push('');\n\n return lines.join('\\n');\n}\n\n/**\n * Turn TypeScript diagnostics into Rosetta diagnostics\n */\nexport function rosettaDiagFromTypescript(diag: ts.Diagnostic): RosettaDiagnostic {\n return {\n isError: diag.category === ts.DiagnosticCategory.Error,\n isFromStrictAssembly: hasStrictBranding(diag),\n formattedMessage: ts.formatDiagnosticsWithColorAndContext([diag], DIAG_HOST),\n };\n}\n\nconst DIAG_HOST = {\n getCurrentDirectory() {\n return '.';\n },\n getCanonicalFileName(fileName: string) {\n return fileName;\n },\n getNewLine() {\n return '\\n';\n },\n};\n\n/**\n * Remove slashes from a \"where\" description, as the TS compiler will interpret it as a directory\n * and we can't have that for compiling literate files\n */\nfunction removeSlashes(x: string) {\n return x.replace(/\\/|\\\\/g, '.');\n}\n"]}
1
+ {"version":3,"file":"translate.js","sourceRoot":"","sources":["../src/translate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,kDAeC;AAkYD,sDAEC;AAED,oDAOC;AAED,8CAgBC;AAED,8CA0BC;AAKD,8DAMC;AA7eD,gDAAkC;AAClC,yCAAoC;AACpC,+CAAiC;AAEjC,2CAA+D;AAC/D,qEAAwE;AACxE,iEAAgF;AAChF,mDAAqC;AACrC,qCAAsC;AACtC,yCAAyE;AACzE,uCAAiG;AACjG,+DAAkF;AAClF,6CAAwD;AACxD,+CAAsD;AACtD,0EAAqE;AACrE,0DAAyG;AACzG,8DAAmD;AACnD,iCAAmF;AAOnF,SAAgB,mBAAmB,CACjC,MAAY,EACZ,OAAwB,EACxB,UAAoC,EAAE;IAEtC,MAAM,UAAU,GAAG,IAAI,iBAAiB,CACtC,EAAE,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,EACjG,OAAO,CACR,CAAC;IACF,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEnD,OAAO;QACL,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,yBAAyB,CAAC;KACnE,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAa,UAAU;IAIrB,IAAW,WAAW;QACpB,OAAO,EAAE,CAAC,6BAA6B,CAAC,uBAAA,IAAI,+BAAa,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAC5F,CAAC;IAED,YAAoC,0BAAmC;QAAnC,+BAA0B,GAA1B,0BAA0B,CAAS;QAPtD,aAAQ,GAAG,IAAI,gCAAkB,EAAE,CAAC;QACrD,kCAAgC,EAAE,EAAC;IAMuC,CAAC;IAE3E;;;;;OAKG;IACI,aAAa,CAAC,OAA0B;QAC7C,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,OAAO,EAAE;YAChD,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;SAC5D,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,IAAuB,EAAE,YAAuC,MAAM,CAAC,MAAM,CAAC,0BAAc,CAAC;QAC5G,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACtE,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACI,iBAAiB,CACtB,QAA6B,EAC7B,YAAuC,MAAM,CAAC,MAAM,CAAC,0BAAc,CAAC;QAEpE,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAC;QAElE,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAErD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAC3C,OAAO,CAAC,KAAK,CACX,mBAAmB,IAAA,mBAAO,EAAC;YACzB,QAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;SAC7C,CAAC,EAAE,CACL,CAAC;QAEF,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,cAAc,CACpB,QAA6B,EAC7B,YAAuC,MAAM,CAAC,MAAM,CAAC,0BAAc,CAAC;QAEpE,MAAM,kBAAkB,GAAwB,EAAE,CAAC;QAEnD,MAAM,eAAe,GAAG,IAAI,sBAAsB,CAAC,QAAQ,EAAE;YAC3D,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;SAC5D,CAAC,CAAC;QAEH,KAAK,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,eAAe,EAAE,CAAC;YACpD,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;QACjF,CAAC;QAED,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAEO,gBAAgB,CACtB,OAA0B,EAC1B,UAA8B,EAC9B,SAAoC;QAEpC,MAAM,YAAY,GAAG,IAAA,aAAM,EACzB,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;YACrC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,wBAAwB,GAAG,4BAAgB,CAAC,IAAI,CAAC,CAAC;YACxD,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,wBAAwB,CAAC,aAAa,EAAE,CAAC,CAAC;YACpF,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,wBAAwB,CAAC,OAAO,EAAE,CAAU,CAAC,CAAC;QAC9F,CAAC,CAAC,CACH,CAAC;QAEF,IAAI,OAAO,CAAC,UAAU,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9C,uBAAA,IAAI,+BAAa,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,2BAAiB,CAAC,UAAU,CAAC;YAClC,YAAY,EAAE;gBACZ,GAAG,YAAY;gBACf,CAAC,6BAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE;aACxE;YACD,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU,EAAE,UAAU,CAAC,sBAAsB;YAC7C,cAAc,EAAE,UAAU,CAAC,cAAc,EAAE;YAC3C,UAAU,EAAE,IAAA,wBAAc,EAAC,OAAO,CAAC;YACnC,iBAAiB,EAAE,UAAU,CAAC,iBAAiB,EAAE;SAClD,CAAC,CAAC;IACL,CAAC;CACF;AAzGD,gCAyGC;;AA2BD;;;;GAIG;AACH,MAAM,yBAAyB;IAQ7B,YACE,OAA0B,EACT,WAA8B,EAC9B,OAAiC;QADjC,gBAAW,GAAX,WAAW,CAAmB;QAC9B,YAAO,GAAP,OAAO,CAA0B;QAVpC,yBAAoB,GAAoB,EAAE,CAAC;QAC3C,uBAAkB,GAAoB,EAAE,CAAC;QAWvD,iDAAiD;QACjD,oEAAoE;QACpE,IAAI,CAAC,YAAY,GAAG,qBAAK,CAAC,sBAAsB,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE5E,gDAAgD;QAChD,IAAI,CAAC,mBAAmB,GAAG,wCAAkB,CAAC,YAAY,CACxD,WAAW,CAAC,QAAQ,EACpB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,CAC1C,CAAC;QAEF,yDAAyD;QACzD,wEAAwE;QACxE,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;QACvF,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YACzC,MAAM,WAAW,GAAG;gBAClB,GAAG,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE;gBAChD,GAAG,aAAa,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;gBAC5E,GAAG,aAAa,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;gBAC9E,GAAG,aAAa,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;aAC5E,CAAC;YAEF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,uEAAuE;gBACvE,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;oBAC/B,IAAA,+BAAwB,EAAC,IAAI,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;YACD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAW,sBAAsB;QAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,CAAC;IAEM,WAAW,CAAC,OAAwB;QACzC,MAAM,SAAS,GAAG,IAAI,sBAAW,CAC/B,IAAI,CAAC,WAAW,CAAC,QAAQ,EACzB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,EACzC,OAAO,EACP,IAAI,CAAC,OAAO;QACZ,sFAAsF;QACtF,IAAA,mDAAiC,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAC3F,CAAC;QACF,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACtG,OAAO,IAAA,mBAAU,EAAC,SAAS,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACpG,CAAC;IAEM,iBAAiB;QACtB,MAAM,WAAW,GAAG,IAAI,uCAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7D,OAAO,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAEM,cAAc;QACnB,MAAM,OAAO,GAAG,IAAI,2CAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,IAAI,sBAAW,CAC/B,IAAI,CAAC,WAAW,CAAC,QAAQ,EACzB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,EACzC,OAAO,EACP,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,mBAAmB,CACzB,CAAC;QACF,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO,OAAO,CAAC,cAAc,EAAE,CAAC;IAClC,CAAC;IAED,IAAW,WAAW;QACpB,OAAO,EAAE,CAAC,6BAA6B,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACrG,CAAC;CACF;AAED;;GAEG;AACH,MAAa,iBAAkB,SAAQ,yBAAyB;IAC9D,YAAmB,OAA0B,EAAE,UAAoC,EAAE;QACnF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,gCAAkB,EAAE,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAA,wBAAc,EAAC,OAAO,CAAC,CAAC;QACvC,MAAM,oBAAoB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,2BAAiB,CAAC,sBAAsB,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC7G,MAAM,WAAW,GAAG,QAAQ,CAAC,oBAAoB,CAC/C;YACE;gBACE,QAAQ,EAAE,aAAa,CAAC,IAAA,wBAAc,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACzD,QAAQ,EAAE,MAAM;aACjB;SACF,EACD,oBAAoB,CACrB,CAAC;QAEF,KAAK,CACH,OAAO,EACP;YACE,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,QAAQ,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;SACnC,EACD,OAAO,CACR,CAAC;IACJ,CAAC;CACF;AAxBD,8CAwBC;AAcD;;GAEG;AACH,MAAa,sBAAsB;IAGjC,YACmB,QAA6B,EAC7B,UAAyC,EAAE;QAD3C,aAAQ,GAAR,QAAQ,CAAqB;QAC7B,YAAO,GAAP,OAAO,CAAoC;QAE5D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,gCAAkB,EAAE,CAAC;QAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,oBAAoB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAEjE,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACvC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,2BAAiB,CAAC,sBAAsB,CAAC,CAAC;YAClF,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAA,wBAAc,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;YAEjE,OAAO;gBACL,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;gBAC5F,QAAQ,EAAE,IAAA,wBAAc,EAAC,OAAO,CAAC;aAClC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACxE,CAAC;IAED,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChB,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAEjD,MAAM,UAAU,GAAuB,IAAI,yBAAyB,CAClE,OAAO,EACP;gBACE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO;gBACjC,QAAQ;aACT,EACD,IAAI,CAAC,OAAO,CACb,CAAC;YAEF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAtCD,wDAsCC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAyB,IAAkC;IAC/E,OAAO,CAAC,GAAG,IAAO,EAAE,EAAE;QACpB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,yBAAyB,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YAExE,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBAC/B,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;YAC1D,CAAC;YAED,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAAC,KAA+B,EAAE,YAAmB;IACpF,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACxH,CAAC;AAyCD,SAAgB,qBAAqB,CAAC,OAAgB,EAAE,gBAAwB;IAC9E,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC;AACpE,CAAC;AAED,SAAgB,oBAAoB,CAAC,UAAkB,EAAE,IAAY,EAAE,UAAkB;IACvF,OAAO;QACL,OAAO,EAAE,KAAK;QACd,oBAAoB,EAAE,KAAK;QAC3B,gBAAgB,EAAE,EAAE;QACpB,UAAU,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;KAC7C,CAAC;AACJ,CAAC;AAED,SAAgB,iBAAiB,CAAC,WAAyC;IAIzE,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAC3C,CAAC;AAED,SAAgB,iBAAiB,CAAC,OAA4B;IAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG;QACZ,EAAE;QACF,iCAAiC;QACjC,yCAAyC;QACzC,gEAAgE;KACjE,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACjF,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CAAC,IAAmB;IAC3D,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,kBAAkB,CAAC,KAAK;QACtD,oBAAoB,EAAE,IAAA,wBAAiB,EAAC,IAAI,CAAC;QAC7C,gBAAgB,EAAE,EAAE,CAAC,oCAAoC,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;KAC7E,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,GAAG;IAChB,mBAAmB;QACjB,OAAO,GAAG,CAAC;IACb,CAAC;IACD,oBAAoB,CAAC,QAAgB;QACnC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,UAAU;QACR,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF;;;GAGG;AACH,SAAS,aAAa,CAAC,CAAS;IAC9B,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC","sourcesContent":["import * as path from 'node:path';\nimport { inspect } from 'node:util';\nimport * as ts from 'typescript';\n\nimport { TARGET_LANGUAGES, TargetLanguage } from './languages';\nimport { RecordReferencesVisitor } from './languages/record-references';\nimport { supportsTransitiveSubmoduleAccess } from './languages/target-language';\nimport * as logging from './logging';\nimport { renderTree } from './o-tree';\nimport { AstRenderer, AstHandler, AstRendererOptions } from './renderer';\nimport { TypeScriptSnippet, completeSource, SnippetParameters, formatLocation } from './snippet';\nimport { SubmoduleReference, SubmoduleReferenceMap } from './submodule-reference';\nimport { ORIGINAL_SNIPPET_KEY } from './tablets/schema';\nimport { TranslatedSnippet } from './tablets/tablets';\nimport { SyntaxKindCounter } from './typescript/syntax-kind-counter';\nimport { TypeScriptCompiler, CompilationResult, BatchCompilationResult } from './typescript/ts-compiler';\nimport { Spans } from './typescript/visible-spans';\nimport { annotateStrictDiagnostic, File, hasStrictBranding, mkDict } from './util';\n\nexport interface TranslateResult {\n translation: string;\n diagnostics: readonly RosettaDiagnostic[];\n}\n\nexport function translateTypeScript(\n source: File,\n visitor: AstHandler<any>,\n options: SnippetTranslatorOptions = {},\n): TranslateResult {\n const translator = new SnippetTranslator(\n { visibleSource: source.contents, location: { api: { api: 'file', fileName: source.fileName } } },\n options,\n );\n const translated = translator.renderUsing(visitor);\n\n return {\n translation: translated,\n diagnostics: translator.diagnostics.map(rosettaDiagFromTypescript),\n };\n}\n\n/**\n * Translate one or more TypeScript snippets into other languages\n *\n * Can be configured to fully typecheck the samples, or perform only syntactical\n * translation.\n */\nexport class Translator {\n private readonly compiler = new TypeScriptCompiler();\n #diagnostics: ts.Diagnostic[] = [];\n\n public get diagnostics(): readonly RosettaDiagnostic[] {\n return ts.sortAndDeduplicateDiagnostics(this.#diagnostics).map(rosettaDiagFromTypescript);\n }\n\n public constructor(private readonly includeCompilerDiagnostics: boolean) {}\n\n /**\n * Return the snippet translator for the given snippet\n *\n * We used to cache these, but each translator holds on to quite a bit of memory,\n * so we don't do that anymore.\n */\n public translatorFor(snippet: TypeScriptSnippet) {\n const translator = new SnippetTranslator(snippet, {\n compiler: this.compiler,\n includeCompilerDiagnostics: this.includeCompilerDiagnostics,\n });\n return translator;\n }\n\n /**\n * Translates a single snippet in its own TS context.\n */\n public translate(snip: TypeScriptSnippet, languages: readonly TargetLanguage[] = Object.values(TargetLanguage)) {\n const translator = this.translatorFor(snip);\n const translated = this.translateSnippet(snip, translator, languages);\n return translated;\n }\n\n /**\n * Translates a batch of snippets, using a shared TS context.\n */\n public translateSnippets(\n snippets: TypeScriptSnippet[],\n languages: readonly TargetLanguage[] = Object.values(TargetLanguage),\n ): TranslatedSnippet[] {\n const start = performance.now();\n logging.debug(`Translating batch of ${snippets.length} snippets`);\n\n const res = this.translateBatch(snippets, languages);\n\n const duration = performance.now() - start;\n logging.debug(\n `Completed batch ${inspect({\n duration: `${(duration / 1000).toFixed(2)}s`,\n })}`,\n );\n\n return res;\n }\n\n private translateBatch(\n snippets: TypeScriptSnippet[],\n languages: readonly TargetLanguage[] = Object.values(TargetLanguage),\n ): TranslatedSnippet[] {\n const translatedSnippets: TranslatedSnippet[] = [];\n\n const batchTranslator = new BatchSnippetTranslator(snippets, {\n compiler: this.compiler,\n includeCompilerDiagnostics: this.includeCompilerDiagnostics,\n });\n\n for (const [snippet, translator] of batchTranslator) {\n translatedSnippets.push(this.translateSnippet(snippet, translator, languages));\n }\n\n return translatedSnippets;\n }\n\n private translateSnippet(\n snippet: TypeScriptSnippet,\n translator: ISnippetTranslator,\n languages: readonly TargetLanguage[],\n ): TranslatedSnippet {\n const translations = mkDict(\n languages.flatMap((lang, idx, array) => {\n if (array.slice(0, idx).includes(lang)) {\n return [];\n }\n const languageConverterFactory = TARGET_LANGUAGES[lang];\n const translated = translator.renderUsing(languageConverterFactory.createVisitor());\n return [[lang, { source: translated, version: languageConverterFactory.version }] as const];\n }),\n );\n\n if (snippet.parameters?.infused === undefined) {\n this.#diagnostics.push(...translator.diagnostics);\n }\n\n return TranslatedSnippet.fromSchema({\n translations: {\n ...translations,\n [ORIGINAL_SNIPPET_KEY]: { source: snippet.visibleSource, version: '0' },\n },\n location: snippet.location,\n didCompile: translator.didSuccessfullyCompile,\n fqnsReferenced: translator.fqnsReferenced(),\n fullSource: completeSource(snippet),\n syntaxKindCounter: translator.syntaxKindCounter(),\n });\n }\n}\n\nexport interface ISnippetTranslator {\n readonly diagnostics: readonly ts.Diagnostic[];\n readonly didSuccessfullyCompile: boolean | undefined;\n\n renderUsing(visitor: AstHandler<any>): string;\n syntaxKindCounter(): Partial<Record<ts.SyntaxKind, number>>;\n fqnsReferenced(): string[];\n}\n\nexport interface SnippetTranslatorOptions extends AstRendererOptions {\n /**\n * Re-use the given compiler if given\n */\n readonly compiler?: TypeScriptCompiler;\n\n /**\n * Include compiler errors in return diagnostics\n *\n * If false, only translation diagnostics will be returned.\n *\n * @default false\n */\n readonly includeCompilerDiagnostics?: boolean;\n}\n\n/**\n * Internal implementation of a single TypeScript snippet translator.\n *\n * Consumers should either use `SnippetTranslator` or `BatchSnippetTranslator`.\n */\nclass InternalSnippetTranslator implements ISnippetTranslator {\n public readonly translateDiagnostics: ts.Diagnostic[] = [];\n public readonly compileDiagnostics: ts.Diagnostic[] = [];\n\n private readonly visibleSpans: Spans;\n private readonly tryCompile: boolean;\n private readonly submoduleReferences: SubmoduleReferenceMap;\n\n public constructor(\n snippet: TypeScriptSnippet,\n private readonly compilation: CompilationResult,\n private readonly options: SnippetTranslatorOptions,\n ) {\n // Respect '/// !hide' and '/// !show' directives\n // Use the actual compiled source text to ensure spans match the AST\n this.visibleSpans = Spans.visibleSpansFromSource(compilation.rootFile.text);\n\n // Find submodule references on explicit imports\n this.submoduleReferences = SubmoduleReference.inSourceFile(\n compilation.rootFile,\n this.compilation.program.getTypeChecker(),\n );\n\n // This makes it about 5x slower, so only do it on demand\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.tryCompile = (this.options.includeCompilerDiagnostics || snippet.strict) ?? false;\n if (this.tryCompile) {\n const program = this.compilation.program;\n const diagnostics = [\n ...neverThrowing(program.getGlobalDiagnostics)(),\n ...neverThrowing(program.getSyntacticDiagnostics)(this.compilation.rootFile),\n ...neverThrowing(program.getDeclarationDiagnostics)(this.compilation.rootFile),\n ...neverThrowing(program.getSemanticDiagnostics)(this.compilation.rootFile),\n ];\n\n if (snippet.strict) {\n // In a strict assembly, so we'll need to brand all diagnostics here...\n for (const diag of diagnostics) {\n annotateStrictDiagnostic(diag);\n }\n }\n this.compileDiagnostics.push(...diagnostics);\n }\n }\n\n /**\n * Returns a boolean if compilation was attempted, and undefined if it was not.\n */\n public get didSuccessfullyCompile() {\n return this.tryCompile ? this.compileDiagnostics.length === 0 : undefined;\n }\n\n public renderUsing(visitor: AstHandler<any>) {\n const converter = new AstRenderer(\n this.compilation.rootFile,\n this.compilation.program.getTypeChecker(),\n visitor,\n this.options,\n // If we support transitive submodule access, don't provide a submodule reference map.\n supportsTransitiveSubmoduleAccess(visitor.language) ? undefined : this.submoduleReferences,\n );\n const converted = converter.convert(this.compilation.rootFile);\n this.translateDiagnostics.push(...filterVisibleDiagnostics(converter.diagnostics, this.visibleSpans));\n return renderTree(converted, { indentChar: visitor.indentChar, visibleSpans: this.visibleSpans });\n }\n\n public syntaxKindCounter(): Partial<Record<ts.SyntaxKind, number>> {\n const kindCounter = new SyntaxKindCounter(this.visibleSpans);\n return kindCounter.countKinds(this.compilation.rootFile);\n }\n\n public fqnsReferenced() {\n const visitor = new RecordReferencesVisitor(this.visibleSpans);\n const converter = new AstRenderer(\n this.compilation.rootFile,\n this.compilation.program.getTypeChecker(),\n visitor,\n this.options,\n this.submoduleReferences,\n );\n converter.convert(this.compilation.rootFile);\n return visitor.fqnsReferenced();\n }\n\n public get diagnostics(): readonly ts.Diagnostic[] {\n return ts.sortAndDeduplicateDiagnostics(this.compileDiagnostics.concat(this.translateDiagnostics));\n }\n}\n\n/**\n * Translate a single TypeScript snippet\n */\nexport class SnippetTranslator extends InternalSnippetTranslator {\n public constructor(snippet: TypeScriptSnippet, options: SnippetTranslatorOptions = {}) {\n const compiler = options.compiler ?? new TypeScriptCompiler();\n const source = completeSource(snippet);\n const fakeCurrentDirectory = snippet.parameters?.[SnippetParameters.$COMPILATION_DIRECTORY] ?? process.cwd();\n const compilation = compiler.compileBatchInMemory(\n [\n {\n filename: removeSlashes(formatLocation(snippet.location)),\n contents: source,\n },\n ],\n fakeCurrentDirectory,\n );\n\n super(\n snippet,\n {\n program: compilation.program,\n rootFile: compilation.rootFiles[0],\n },\n options,\n );\n }\n}\n\nexport interface BatchSnippetTranslatorOptions extends SnippetTranslatorOptions {\n /**\n * What directory to pretend the file is in (system parameter)\n *\n * Attached when compiling a literate file, as they compile in\n * the location where they are stored.\n *\n * @default - current working directory\n */\n readonly compilationDirectory?: string;\n}\n\n/**\n * Translate a single TypeScript snippet\n */\nexport class BatchSnippetTranslator {\n private readonly compilation: BatchCompilationResult;\n\n public constructor(\n private readonly snippets: TypeScriptSnippet[],\n private readonly options: BatchSnippetTranslatorOptions = {},\n ) {\n const compiler = options.compiler ?? new TypeScriptCompiler();\n const workingDir = options.compilationDirectory ?? process.cwd();\n\n const sources = snippets.map((snippet) => {\n const snippetLoc = snippet.parameters?.[SnippetParameters.$COMPILATION_DIRECTORY];\n const filename = removeSlashes(formatLocation(snippet.location));\n\n return {\n filename: snippetLoc ? path.relative(workingDir, path.join(snippetLoc, filename)) : filename,\n contents: completeSource(snippet),\n };\n });\n this.compilation = compiler.compileBatchInMemory(sources, workingDir);\n }\n\n *[Symbol.iterator](): Generator<[TypeScriptSnippet, ISnippetTranslator], void, unknown> {\n for (const [idx, snippet] of this.snippets.entries()) {\n const rootFile = this.compilation.rootFiles[idx];\n\n const translator: ISnippetTranslator = new InternalSnippetTranslator(\n snippet,\n {\n program: this.compilation.program,\n rootFile,\n },\n this.options,\n );\n\n yield [snippet, translator];\n }\n }\n}\n\n/**\n * Intercepts all exceptions thrown by the wrapped call, and logs them to\n * console.error instead of re-throwing, then returns an empty array. This\n * is here to avoid compiler crashes due to broken code examples that cause\n * the TypeScript compiler to hit a \"Debug Failure\".\n */\nfunction neverThrowing<A extends unknown[], R>(call: (...args: A) => readonly R[]): (...args: A) => readonly R[] {\n return (...args: A) => {\n try {\n return call(...args);\n } catch (err: any) {\n const isExpectedTypescriptError = err.message.includes('Debug Failure');\n\n if (!isExpectedTypescriptError) {\n console.error(`Failed to execute ${call.name}: ${err}`);\n }\n\n return [];\n }\n };\n}\n\n/**\n * Hide diagnostics that are rosetta-sourced if they are reported against a non-visible span\n */\nfunction filterVisibleDiagnostics(diags: readonly ts.Diagnostic[], visibleSpans: Spans): ts.Diagnostic[] {\n return diags.filter((d) => d.source !== 'rosetta' || d.start === undefined || visibleSpans.containsPosition(d.start));\n}\n\n/**\n * A translation of a TypeScript diagnostic into a data-only representation for Rosetta\n *\n * We cannot use the original `ts.Diagnostic` since it holds on to way too much\n * state (the source file and by extension the entire parse tree), which grows\n * too big to be properly serialized by a worker and also takes too much memory.\n *\n * Reduce it down to only the information we need.\n */\nexport interface SnippetTimingInfo {\n readonly name: string;\n readonly snippetKey: string;\n readonly durationMs: number;\n}\n\nexport interface RosettaDiagnostic {\n /**\n * If this is an error diagnostic or not\n */\n readonly isError: boolean;\n\n /**\n * If the diagnostic was emitted from an assembly that has its 'strict' flag set\n */\n readonly isFromStrictAssembly: boolean;\n\n /**\n * The formatted message, ready to be printed (will have colors and newlines in it)\n *\n * Ends in a newline.\n */\n readonly formattedMessage: string;\n\n /**\n * Optional timing information for snippet translation\n */\n readonly timingInfo?: SnippetTimingInfo;\n}\n\nexport function makeRosettaDiagnostic(isError: boolean, formattedMessage: string): RosettaDiagnostic {\n return { isError, formattedMessage, isFromStrictAssembly: false };\n}\n\nexport function makeTimingDiagnostic(snippetKey: string, name: string, durationMs: number): RosettaDiagnostic {\n return {\n isError: false,\n isFromStrictAssembly: false,\n formattedMessage: '',\n timingInfo: { snippetKey, name, durationMs },\n };\n}\n\nexport function extractTimingInfo(diagnostics: readonly RosettaDiagnostic[]): {\n timings: SnippetTimingInfo[];\n diagnostics: RosettaDiagnostic[];\n} {\n const timings: SnippetTimingInfo[] = [];\n const regular: RosettaDiagnostic[] = [];\n\n for (const diag of diagnostics) {\n if (diag.timingInfo) {\n timings.push(diag.timingInfo);\n } else {\n regular.push(diag);\n }\n }\n\n return { timings, diagnostics: regular };\n}\n\nexport function formatTimingTable(timings: SnippetTimingInfo[]): string {\n if (timings.length === 0) {\n return '';\n }\n\n const totalTime = timings.reduce((sum, t) => sum + t.durationMs, 0);\n const sorted = timings.sort((a, b) => b.durationMs - a.durationMs).slice(0, 10);\n\n const lines = [\n '',\n '=== Top 10 Slowest Snippets ===',\n 'Rank | Time (s) | % of Total | Snippet ',\n '-----|----------|------------|--------------------------------',\n ];\n\n for (const [idx, timing] of sorted.entries()) {\n const timeS = (timing.durationMs / 1000).toFixed(2).padStart(8);\n const pct = ((timing.durationMs / totalTime) * 100).toFixed(1).padStart(9) + '%';\n lines.push(`${(idx + 1).toString().padEnd(4)} | ${timeS} | ${pct} | ${timing.name}`);\n }\n\n lines.push('');\n lines.push(`Total translation time: ${(totalTime / 1000).toFixed(2)}s`);\n lines.push('');\n\n return lines.join('\\n');\n}\n\n/**\n * Turn TypeScript diagnostics into Rosetta diagnostics\n */\nexport function rosettaDiagFromTypescript(diag: ts.Diagnostic): RosettaDiagnostic {\n return {\n isError: diag.category === ts.DiagnosticCategory.Error,\n isFromStrictAssembly: hasStrictBranding(diag),\n formattedMessage: ts.formatDiagnosticsWithColorAndContext([diag], DIAG_HOST),\n };\n}\n\nconst DIAG_HOST = {\n getCurrentDirectory() {\n return '.';\n },\n getCanonicalFileName(fileName: string) {\n return fileName;\n },\n getNewLine() {\n return '\\n';\n },\n};\n\n/**\n * Remove slashes from a \"where\" description, as the TS compiler will interpret it as a directory\n * and we can't have that for compiling literate files\n */\nfunction removeSlashes(x: string) {\n return x.replace(/\\/|\\\\/g, '.');\n}\n"]}
@@ -1,10 +1,43 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.translateAll = translateAll;
4
- const os = require("node:os");
5
- const path = require("node:path");
6
- const workerpool = require("workerpool");
7
- const logging = require("./logging");
37
+ const os = __importStar(require("node:os"));
38
+ const path = __importStar(require("node:path"));
39
+ const workerpool = __importStar(require("workerpool"));
40
+ const logging = __importStar(require("./logging"));
8
41
  const tablets_1 = require("./tablets/tablets");
9
42
  const translate_1 = require("./translate");
10
43
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"translate_all.js","sourceRoot":"","sources":["../src/translate_all.ts"],"names":[],"mappings":"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","sourcesContent":["import * as os from 'node:os';\nimport * as path from 'node:path';\nimport * as workerpool from 'workerpool';\n\nimport * as logging from './logging';\nimport { TypeScriptSnippet } from './snippet';\nimport { TranslatedSnippet } from './tablets/tablets';\nimport { RosettaDiagnostic, SnippetTimingInfo, extractTimingInfo } from './translate';\nimport type { TranslateBatchRequest, TranslateBatchResponse } from './translate_all_worker';\n\n/**\n * Divide the work evenly over all processors by running 'translate_all_worker' in Worker Threads, then combine results\n *\n * The workers are fed small queues of work each. We used to divide the entire queue into N\n * but since the work is divided unevenly that led to some workers stopping early, idling while\n * waiting for more work.\n *\n * Never include 'translate_all_worker' directly, only do TypeScript type references (so that in\n * the script we may assume that 'worker_threads' successfully imports).\n */\nexport async function translateAll(\n snippets: TypeScriptSnippet[],\n includeCompilerDiagnostics: boolean,\n batchSize?: number,\n): Promise<TranslateAllResult> {\n // Use about half the advertised cores because hyperthreading doesn't seem to\n // help that much, or we become I/O-bound at some point. On my machine, using\n // more than half the cores actually makes it slower.\n // Cap to a reasonable top-level limit to prevent thrash on machines with many, many cores.\n const N = process.env.JSII_ROSETTA_MAX_WORKER_COUNT\n ? parseInt(process.env.JSII_ROSETTA_MAX_WORKER_COUNT)\n : Math.min(16, Math.max(1, Math.ceil(os.cpus().length / 2)));\n const snippetArr = Array.from(snippets);\n const batchesOf = batchSize ? ` (in batches of ${batchSize})` : '';\n logging.info(`Translating ${snippetArr.length} snippets using ${N} workers${batchesOf}`);\n\n const pool = workerpool.pool(path.join(__dirname, 'translate_all_worker.js'), {\n maxWorkers: N,\n });\n\n try {\n const shouldBatchCompilation = batchSize != null;\n const requests = batchSnippets(snippetArr, includeCompilerDiagnostics, batchSize, shouldBatchCompilation);\n\n const responses: TranslateBatchResponse[] = await Promise.all(\n requests.map((request) => pool.exec('translateBatch', [request])),\n );\n\n const allDiagnostics = new Array<RosettaDiagnostic>();\n const translatedSnippets = new Array<TranslatedSnippet>();\n\n // Combine results\n for (const response of responses) {\n allDiagnostics.push(...response.diagnostics);\n translatedSnippets.push(...response.translatedSchemas.map(TranslatedSnippet.fromSchema));\n }\n\n // Extract timing info if enabled\n const { timings, diagnostics } = extractTimingInfo(allDiagnostics);\n\n return {\n diagnostics,\n translatedSnippets,\n timings: process.env.TIMING === '1' ? timings : undefined,\n };\n } finally {\n // Not waiting on purpose\n void pool.terminate();\n }\n}\n\nfunction batchSnippets(\n snippets: TypeScriptSnippet[],\n includeCompilerDiagnostics: boolean,\n batchSize = 10,\n shouldBatchCompilation: boolean = false,\n): TranslateBatchRequest[] {\n const logLevel = logging.current();\n const ret: TranslateBatchRequest[] = [];\n\n for (let i = 0; i < snippets.length; i += batchSize) {\n // create a unique worker name, purely for logging so can be pseudo random\n const workerId = Math.random().toString(16).slice(2, 6).toUpperCase();\n ret.push({\n workerName: `Worker#${workerId}`,\n snippets: snippets.slice(i, i + batchSize),\n includeCompilerDiagnostics,\n logLevel,\n batchSize: shouldBatchCompilation ? batchSize : undefined,\n });\n }\n\n return ret;\n}\n\nexport interface TranslateAllResult {\n translatedSnippets: TranslatedSnippet[];\n diagnostics: RosettaDiagnostic[];\n timings?: SnippetTimingInfo[];\n}\n"]}
1
+ {"version":3,"file":"translate_all.js","sourceRoot":"","sources":["../src/translate_all.ts"],"names":[],"mappings":"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","sourcesContent":["import * as os from 'node:os';\nimport * as path from 'node:path';\nimport * as workerpool from 'workerpool';\n\nimport * as logging from './logging';\nimport { TypeScriptSnippet } from './snippet';\nimport { TranslatedSnippet } from './tablets/tablets';\nimport { RosettaDiagnostic, SnippetTimingInfo, extractTimingInfo } from './translate';\nimport type { TranslateBatchRequest, TranslateBatchResponse } from './translate_all_worker';\n\n/**\n * Divide the work evenly over all processors by running 'translate_all_worker' in Worker Threads, then combine results\n *\n * The workers are fed small queues of work each. We used to divide the entire queue into N\n * but since the work is divided unevenly that led to some workers stopping early, idling while\n * waiting for more work.\n *\n * Never include 'translate_all_worker' directly, only do TypeScript type references (so that in\n * the script we may assume that 'worker_threads' successfully imports).\n */\nexport async function translateAll(\n snippets: TypeScriptSnippet[],\n includeCompilerDiagnostics: boolean,\n batchSize?: number,\n): Promise<TranslateAllResult> {\n // Use about half the advertised cores because hyperthreading doesn't seem to\n // help that much, or we become I/O-bound at some point. On my machine, using\n // more than half the cores actually makes it slower.\n // Cap to a reasonable top-level limit to prevent thrash on machines with many, many cores.\n const N = process.env.JSII_ROSETTA_MAX_WORKER_COUNT\n ? parseInt(process.env.JSII_ROSETTA_MAX_WORKER_COUNT)\n : Math.min(16, Math.max(1, Math.ceil(os.cpus().length / 2)));\n const snippetArr = Array.from(snippets);\n const batchesOf = batchSize ? ` (in batches of ${batchSize})` : '';\n logging.info(`Translating ${snippetArr.length} snippets using ${N} workers${batchesOf}`);\n\n const pool = workerpool.pool(path.join(__dirname, 'translate_all_worker.js'), {\n maxWorkers: N,\n });\n\n try {\n const shouldBatchCompilation = batchSize != null;\n const requests = batchSnippets(snippetArr, includeCompilerDiagnostics, batchSize, shouldBatchCompilation);\n\n const responses: TranslateBatchResponse[] = await Promise.all(\n requests.map((request) => pool.exec('translateBatch', [request])),\n );\n\n const allDiagnostics = new Array<RosettaDiagnostic>();\n const translatedSnippets = new Array<TranslatedSnippet>();\n\n // Combine results\n for (const response of responses) {\n allDiagnostics.push(...response.diagnostics);\n translatedSnippets.push(...response.translatedSchemas.map(TranslatedSnippet.fromSchema));\n }\n\n // Extract timing info if enabled\n const { timings, diagnostics } = extractTimingInfo(allDiagnostics);\n\n return {\n diagnostics,\n translatedSnippets,\n timings: process.env.TIMING === '1' ? timings : undefined,\n };\n } finally {\n // Not waiting on purpose\n void pool.terminate();\n }\n}\n\nfunction batchSnippets(\n snippets: TypeScriptSnippet[],\n includeCompilerDiagnostics: boolean,\n batchSize = 10,\n shouldBatchCompilation: boolean = false,\n): TranslateBatchRequest[] {\n const logLevel = logging.current();\n const ret: TranslateBatchRequest[] = [];\n\n for (let i = 0; i < snippets.length; i += batchSize) {\n // create a unique worker name, purely for logging so can be pseudo random\n const workerId = Math.random().toString(16).slice(2, 6).toUpperCase();\n ret.push({\n workerName: `Worker#${workerId}`,\n snippets: snippets.slice(i, i + batchSize),\n includeCompilerDiagnostics,\n logLevel,\n batchSize: shouldBatchCompilation ? batchSize : undefined,\n });\n }\n\n return ret;\n}\n\nexport interface TranslateAllResult {\n translatedSnippets: TranslatedSnippet[];\n diagnostics: RosettaDiagnostic[];\n timings?: SnippetTimingInfo[];\n}\n"]}
@@ -1,12 +1,45 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.singleThreadedTranslateAll = singleThreadedTranslateAll;
4
37
  /**
5
38
  * Pool worker for extract.ts
6
39
  */
7
40
  const node_util_1 = require("node:util");
8
- const workerpool = require("workerpool");
9
- const logging = require("./logging");
41
+ const workerpool = __importStar(require("workerpool"));
42
+ const logging = __importStar(require("./logging"));
10
43
  const snippet_1 = require("./snippet");
11
44
  const key_1 = require("./tablets/key");
12
45
  const translate_1 = require("./translate");
@@ -1 +1 @@
1
- {"version":3,"file":"translate_all_worker.js","sourceRoot":"","sources":["../src/translate_all_worker.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Pool worker for extract.ts\n */\nimport { inspect } from 'node:util';\nimport * as workerpool from 'workerpool';\n\nimport * as logging from './logging';\nimport { formatLocation, TypeScriptSnippet } from './snippet';\nimport { snippetKey } from './tablets/key';\nimport { TranslatedSnippetSchema } from './tablets/schema';\nimport { TranslatedSnippet } from './tablets/tablets';\nimport { RosettaDiagnostic, makeRosettaDiagnostic, makeTimingDiagnostic, Translator } from './translate';\nimport { TranslateAllResult } from './translate_all';\n\nexport interface TranslateBatchRequest {\n readonly workerName: string;\n readonly snippets: TypeScriptSnippet[];\n readonly includeCompilerDiagnostics: boolean;\n readonly logLevel?: logging.Level;\n readonly batchSize?: number;\n}\n\nexport interface TranslateBatchResponse {\n // Cannot be 'TranslatedSnippet' because needs to be serializable\n readonly translatedSchemas: TranslatedSnippetSchema[];\n readonly diagnostics: RosettaDiagnostic[];\n}\n\nfunction translateBatch(request: TranslateBatchRequest): TranslateBatchResponse {\n // because we are in a worker process we need to explicitly configure the log level again\n logging.configure({ level: request.logLevel ?? logging.Level.QUIET, prefix: request.workerName });\n\n if (process.env.TIMING === '1' && request.batchSize) {\n logging.warn('TIMING=1 is not supported in batch compilation mode');\n }\n\n const result = request.batchSize\n ? batchTranslateAll(request.snippets, request.includeCompilerDiagnostics)\n : singleThreadedTranslateAll(request.snippets, request.includeCompilerDiagnostics);\n\n return {\n translatedSchemas: result.translatedSnippets.map((s) => s.snippet),\n diagnostics: result.diagnostics,\n };\n}\n\nfunction batchTranslateAll(snippets: TypeScriptSnippet[], includeCompilerDiagnostics: boolean): TranslateAllResult {\n const translatedSnippets = new Array<TranslatedSnippet>();\n\n const failures = new Array<RosettaDiagnostic>();\n\n const translator = new Translator(includeCompilerDiagnostics);\n\n try {\n const results = translator.translateSnippets(snippets);\n translatedSnippets.push(...results);\n } catch (e: any) {\n failures.push(makeRosettaDiagnostic(true, `rosetta: error translating batch: ${e}\\n${e.stack}`));\n }\n\n return {\n translatedSnippets,\n diagnostics: [...translator.diagnostics, ...failures],\n };\n}\n\n/**\n * Translate the given snippets using a single compiler\n */\nexport function singleThreadedTranslateAll(\n snippets: TypeScriptSnippet[],\n includeCompilerDiagnostics: boolean,\n): TranslateAllResult {\n const translatedSnippets = new Array<TranslatedSnippet>();\n const failures = new Array<RosettaDiagnostic>();\n const timings = new Array<RosettaDiagnostic>();\n\n const translator = new Translator(includeCompilerDiagnostics);\n for (const block of snippets) {\n const start = performance.now();\n const currentSnippetKey = snippetKey(block);\n logging.debug(`Translating ${currentSnippetKey} ${inspect(block.parameters ?? {})}`);\n\n try {\n translatedSnippets.push(translator.translate(block));\n } catch (e: any) {\n failures.push(\n makeRosettaDiagnostic(true, `rosetta: error translating snippet: ${e}\\n${e.stack}\\n${block.completeSource}`),\n );\n }\n\n const timing = makeTimingDiagnostic(currentSnippetKey, formatLocation(block.location), performance.now() - start);\n timings.push(timing);\n logging.debug(\n `Completed ${timing.timingInfo!.snippetKey} ${inspect({\n duration: `${(timing.timingInfo!.durationMs / 1000).toFixed(2)}s`,\n })}`,\n );\n }\n\n return {\n translatedSnippets,\n diagnostics: [...translator.diagnostics, ...failures, ...timings],\n };\n}\n\nworkerpool.worker({ translateBatch });\n"]}
1
+ {"version":3,"file":"translate_all_worker.js","sourceRoot":"","sources":["../src/translate_all_worker.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Pool worker for extract.ts\n */\nimport { inspect } from 'node:util';\nimport * as workerpool from 'workerpool';\n\nimport * as logging from './logging';\nimport { formatLocation, TypeScriptSnippet } from './snippet';\nimport { snippetKey } from './tablets/key';\nimport { TranslatedSnippetSchema } from './tablets/schema';\nimport { TranslatedSnippet } from './tablets/tablets';\nimport { RosettaDiagnostic, makeRosettaDiagnostic, makeTimingDiagnostic, Translator } from './translate';\nimport { TranslateAllResult } from './translate_all';\n\nexport interface TranslateBatchRequest {\n readonly workerName: string;\n readonly snippets: TypeScriptSnippet[];\n readonly includeCompilerDiagnostics: boolean;\n readonly logLevel?: logging.Level;\n readonly batchSize?: number;\n}\n\nexport interface TranslateBatchResponse {\n // Cannot be 'TranslatedSnippet' because needs to be serializable\n readonly translatedSchemas: TranslatedSnippetSchema[];\n readonly diagnostics: RosettaDiagnostic[];\n}\n\nfunction translateBatch(request: TranslateBatchRequest): TranslateBatchResponse {\n // because we are in a worker process we need to explicitly configure the log level again\n logging.configure({ level: request.logLevel ?? logging.Level.QUIET, prefix: request.workerName });\n\n if (process.env.TIMING === '1' && request.batchSize) {\n logging.warn('TIMING=1 is not supported in batch compilation mode');\n }\n\n const result = request.batchSize\n ? batchTranslateAll(request.snippets, request.includeCompilerDiagnostics)\n : singleThreadedTranslateAll(request.snippets, request.includeCompilerDiagnostics);\n\n return {\n translatedSchemas: result.translatedSnippets.map((s) => s.snippet),\n diagnostics: result.diagnostics,\n };\n}\n\nfunction batchTranslateAll(snippets: TypeScriptSnippet[], includeCompilerDiagnostics: boolean): TranslateAllResult {\n const translatedSnippets = new Array<TranslatedSnippet>();\n\n const failures = new Array<RosettaDiagnostic>();\n\n const translator = new Translator(includeCompilerDiagnostics);\n\n try {\n const results = translator.translateSnippets(snippets);\n translatedSnippets.push(...results);\n } catch (e: any) {\n failures.push(makeRosettaDiagnostic(true, `rosetta: error translating batch: ${e}\\n${e.stack}`));\n }\n\n return {\n translatedSnippets,\n diagnostics: [...translator.diagnostics, ...failures],\n };\n}\n\n/**\n * Translate the given snippets using a single compiler\n */\nexport function singleThreadedTranslateAll(\n snippets: TypeScriptSnippet[],\n includeCompilerDiagnostics: boolean,\n): TranslateAllResult {\n const translatedSnippets = new Array<TranslatedSnippet>();\n const failures = new Array<RosettaDiagnostic>();\n const timings = new Array<RosettaDiagnostic>();\n\n const translator = new Translator(includeCompilerDiagnostics);\n for (const block of snippets) {\n const start = performance.now();\n const currentSnippetKey = snippetKey(block);\n logging.debug(`Translating ${currentSnippetKey} ${inspect(block.parameters ?? {})}`);\n\n try {\n translatedSnippets.push(translator.translate(block));\n } catch (e: any) {\n failures.push(\n makeRosettaDiagnostic(true, `rosetta: error translating snippet: ${e}\\n${e.stack}\\n${block.completeSource}`),\n );\n }\n\n const timing = makeTimingDiagnostic(currentSnippetKey, formatLocation(block.location), performance.now() - start);\n timings.push(timing);\n logging.debug(\n `Completed ${timing.timingInfo!.snippetKey} ${inspect({\n duration: `${(timing.timingInfo!.durationMs / 1000).toFixed(2)}s`,\n })}`,\n );\n }\n\n return {\n translatedSnippets,\n diagnostics: [...translator.diagnostics, ...failures, ...timings],\n };\n}\n\nworkerpool.worker({ translateBatch });\n"]}
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.isStatic = exports.isProtected = exports.isPrivate = exports.isExported = exports.isReadOnly = exports.DONE = void 0;
4
37
  exports.stripCommentMarkers = stripCommentMarkers;
@@ -23,7 +56,7 @@ exports.isPublic = isPublic;
23
56
  exports.findSuperCall = findSuperCall;
24
57
  exports.privatePropertyNames = privatePropertyNames;
25
58
  exports.findEnclosingClassDeclaration = findEnclosingClassDeclaration;
26
- const ts = require("typescript");
59
+ const ts = __importStar(require("typescript"));
27
60
  function stripCommentMarkers(comment, multiline) {
28
61
  if (multiline) {
29
62
  // The text *must* start with '/*' and end with '*/'.
@@ -1 +1 @@
1
- {"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["../../src/typescript/ast-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ts from 'typescript';\n\nimport { AstRenderer } from '../renderer';\n\nexport function stripCommentMarkers(comment: string, multiline: boolean) {\n if (multiline) {\n // The text *must* start with '/*' and end with '*/'.\n // Strip leading '*' from every remaining line (first line because of '**',\n // other lines because of continuations.\n return comment\n .substring(2, comment.length - 2)\n .replace(/^[ \\t]+/g, '') // Strip all leading whitepace\n .replace(/[ \\t]+$/g, '') // Strip all trailing whitepace\n .replace(/^[ \\t]*\\*[ \\t]?/gm, ''); // Strip \"* \" from start of line\n }\n // The text *must* start with '//'\n return comment.replace(/^[/]{2}[ \\t]?/gm, '');\n}\n\nexport function stringFromLiteral(expr: ts.Expression) {\n if (ts.isStringLiteral(expr)) {\n return expr.text;\n }\n return '???';\n}\n\n/**\n * All types of nodes that can be captured using `nodeOfType`, and the type of Node they map to\n */\nexport type CapturableNodes = {\n [ts.SyntaxKind.ImportDeclaration]: ts.ImportDeclaration;\n [ts.SyntaxKind.VariableDeclaration]: ts.VariableDeclaration;\n [ts.SyntaxKind.ExternalModuleReference]: ts.ExternalModuleReference;\n [ts.SyntaxKind.NamespaceImport]: ts.NamespaceImport;\n [ts.SyntaxKind.NamedImports]: ts.NamedImports;\n [ts.SyntaxKind.ImportSpecifier]: ts.ImportSpecifier;\n [ts.SyntaxKind.StringLiteral]: ts.StringLiteral;\n};\n\nexport type AstMatcher<A> = (nodes?: ts.Node[]) => A | undefined;\n\n/**\n * Return AST children of the given node\n *\n * Difference with node.getChildren():\n *\n * - node.getChildren() must take a SourceFile (will fail if it doesn't get it)\n * and returns a mix of abstract and concrete syntax nodes.\n * - This function function will ONLY return abstract syntax nodes.\n */\nexport function nodeChildren(node: ts.Node): ts.Node[] {\n const ret = new Array<ts.Node>();\n node.forEachChild((n) => {\n ret.push(n);\n });\n return ret;\n}\n\n/**\n * Match a single node of a given type\n *\n * Capture name is first so that the IDE can detect eagerly that we're falling into\n * that overload and properly autocomplete the recognized node types from CapturableNodes.\n *\n * Looks like SyntaxList nodes appear in the printed AST, but they don't actually appear\n */\nexport function nodeOfType<A>(syntaxKind: ts.SyntaxKind, children?: AstMatcher<A>): AstMatcher<A>;\n// eslint-disable-next-line max-len\nexport function nodeOfType<S extends keyof CapturableNodes, N extends string, A>(\n capture: N,\n capturableNodeType: S,\n children?: AstMatcher<A>,\n): AstMatcher<Omit<A, N> & { [key in N]: CapturableNodes[S] }>;\n// eslint-disable-next-line max-len\nexport function nodeOfType<S extends keyof CapturableNodes, N extends string, A>(\n syntaxKindOrCaptureName: ts.SyntaxKind | N,\n nodeTypeOrChildren?: S | AstMatcher<A>,\n children?: AstMatcher<A>,\n): AstMatcher<A> | AstMatcher<A & { [key in N]: CapturableNodes[S] }> {\n const capturing = typeof syntaxKindOrCaptureName === 'string'; // Determine which overload we're in (SyntaxKind is a number)\n\n const realNext = (capturing ? children : (nodeTypeOrChildren as AstMatcher<A>)) ?? DONE;\n const realCapture = capturing ? syntaxKindOrCaptureName : undefined;\n const realSyntaxKind = capturing ? nodeTypeOrChildren : syntaxKindOrCaptureName;\n\n return (nodes) => {\n for (const node of nodes ?? []) {\n if (node.kind === realSyntaxKind) {\n const ret = realNext(nodeChildren(node));\n if (!ret) {\n continue;\n }\n\n if (realCapture) {\n return Object.assign(ret, {\n [realCapture]: node as CapturableNodes[S],\n }) as any;\n }\n return ret;\n }\n }\n return undefined;\n };\n}\n\nexport function anyNode(): AstMatcher<Record<string, unknown>>;\nexport function anyNode<A>(children: AstMatcher<A>): AstMatcher<A>;\nexport function anyNode<A>(children?: AstMatcher<A>): AstMatcher<A> | AstMatcher<any> {\n const realNext = children ?? DONE;\n return (nodes) => {\n for (const node of nodes ?? []) {\n const m = realNext(nodeChildren(node));\n if (m) {\n return m;\n }\n }\n return undefined;\n };\n}\n\n// Does not capture deeper because how would we even represent that?\nexport function allOfType<S extends keyof CapturableNodes, N extends string, A>(\n s: S,\n name: N,\n children?: AstMatcher<A>,\n): AstMatcher<{ [key in N]: Array<CapturableNodes[S]> }> {\n type ArrayType = Array<CapturableNodes[S]>;\n type ReturnType = { [key in N]: ArrayType };\n const realNext = children ?? DONE;\n\n return (nodes) => {\n let ret: ReturnType | undefined;\n for (const node of nodes ?? []) {\n if (node.kind === s) {\n if (realNext(nodeChildren(node))) {\n if (!ret) {\n ret = { [name]: new Array<CapturableNodes[S]>() } as ReturnType;\n }\n ret[name].push(node as any);\n }\n }\n }\n return ret;\n };\n}\n\nexport const DONE: AstMatcher<Record<string, unknown>> = () => ({});\n\n/**\n * Run a matcher against a node and return (or invoke a callback with) the accumulated bindings\n */\nexport function matchAst<A>(node: ts.Node, matcher: AstMatcher<A>): A | undefined;\nexport function matchAst<A>(node: ts.Node, matcher: AstMatcher<A>, cb: (bindings: A) => void): boolean;\nexport function matchAst<A>(\n node: ts.Node,\n matcher: AstMatcher<A>,\n cb?: (bindings: A) => void,\n): boolean | A | undefined {\n const matched = matcher([node]);\n if (cb) {\n if (matched) {\n cb(matched);\n }\n return !!matched;\n }\n return matched;\n}\n\n/**\n * Count the newlines in a given piece of string that aren't in comment blocks\n */\nexport function countNakedNewlines(str: string) {\n let ret = 0;\n for (const s of scanText(str, 0, str.length).filter((r) => r.type === 'other' || r.type === 'blockcomment')) {\n if (s.type === 'other') {\n // Count newlines in non-comments\n for (let i = s.pos; i < s.end; i++) {\n if (str[i] === '\\n') {\n ret++;\n }\n }\n } else {\n // Discount newlines at the end of block comments\n if (s.hasTrailingNewLine) {\n ret--;\n }\n }\n }\n return ret;\n}\n\nexport function repeatNewlines(str: string) {\n return '\\n'.repeat(Math.min(2, countNakedNewlines(str)));\n}\n\nconst WHITESPACE = [' ', '\\t', '\\r', '\\n'];\n\n/**\n * Extract single-line and multi-line comments from the given string\n *\n * Rewritten because I can't get ts.getLeadingComments and ts.getTrailingComments to do what I want.\n */\nexport function extractComments(text: string, start: number): ts.CommentRange[] {\n return scanText(text, start)\n .filter((s) => s.type === 'blockcomment' || s.type === 'linecomment')\n .map(commentRangeFromTextRange);\n}\n\nexport function commentRangeFromTextRange(rng: TextRange): ts.CommentRange {\n return {\n kind: rng.type === 'blockcomment' ? ts.SyntaxKind.MultiLineCommentTrivia : ts.SyntaxKind.SingleLineCommentTrivia,\n pos: rng.pos,\n end: rng.end,\n hasTrailingNewLine: rng.type !== 'blockcomment' && rng.hasTrailingNewLine,\n };\n}\n\ninterface TextRange {\n pos: number;\n end: number;\n type: 'linecomment' | 'blockcomment' | 'other' | 'directive';\n hasTrailingNewLine: boolean;\n}\n\n/**\n * Extract spans of comments and non-comments out of the string\n *\n * Stop at 'end' when given, or the first non-whitespace character in a\n * non-comment if not given.\n */\nexport function scanText(text: string, start: number, end?: number): TextRange[] {\n const ret: TextRange[] = [];\n\n let pos = start;\n const stopAtCode = end === undefined;\n if (end === undefined) {\n end = text.length;\n }\n while (pos < end) {\n const ch = text[pos];\n\n if (WHITESPACE.includes(ch)) {\n pos++;\n continue;\n }\n\n if (ch === '/' && text[pos + 1] === '/') {\n accumulateTextBlock();\n scanSinglelineComment();\n continue;\n }\n\n if (ch === '/' && text[pos + 1] === '*') {\n accumulateTextBlock();\n scanMultilineComment();\n continue;\n }\n\n // Non-whitespace, non-comment, must be regular token. End if we're not scanning\n // to a particular location, otherwise continue.\n if (stopAtCode) {\n break;\n }\n\n pos++;\n }\n\n accumulateTextBlock();\n\n return ret;\n\n function scanMultilineComment() {\n const endOfComment = findNext('*/', pos + 2);\n ret.push({\n type: 'blockcomment',\n hasTrailingNewLine: ['\\n', '\\r'].includes(text[endOfComment + 2]),\n pos,\n end: endOfComment + 2,\n });\n pos = endOfComment + 2;\n start = pos;\n }\n\n function scanSinglelineComment() {\n const nl = Math.min(findNext('\\r', pos + 2), findNext('\\n', pos + 2));\n\n if (text[pos + 2] === '/') {\n // Special /// comment\n ret.push({\n type: 'directive',\n hasTrailingNewLine: true,\n pos: pos + 1,\n end: nl,\n });\n } else {\n // Regular // comment\n ret.push({\n type: 'linecomment',\n hasTrailingNewLine: true,\n pos,\n end: nl,\n });\n }\n pos = nl + 1;\n start = pos;\n }\n\n function accumulateTextBlock() {\n if (pos - start > 0) {\n ret.push({\n type: 'other',\n hasTrailingNewLine: false,\n pos: start,\n end: pos,\n });\n start = pos;\n }\n }\n\n function findNext(sub: string, startPos: number) {\n const f = text.indexOf(sub, startPos);\n if (f === -1) {\n return text.length;\n }\n return f;\n }\n}\n\nconst VOID_SHOW_KEYWORD = 'show';\n\nexport function extractMaskingVoidExpression(node: ts.Node): ts.VoidExpression | undefined {\n const expr = extractVoidExpression(node);\n if (!expr) {\n return undefined;\n }\n if (ts.isStringLiteral(expr.expression) && expr.expression.text === VOID_SHOW_KEYWORD) {\n return undefined;\n }\n return expr;\n}\n\nexport function extractShowingVoidExpression(node: ts.Node): ts.VoidExpression | undefined {\n const expr = extractVoidExpression(node);\n if (!expr) {\n return undefined;\n }\n if (ts.isStringLiteral(expr.expression) && expr.expression.text === VOID_SHOW_KEYWORD) {\n return expr;\n }\n return undefined;\n}\n\n/**\n * Return the string argument to a void expression if it exists\n */\nexport function voidExpressionString(node: ts.VoidExpression): string | undefined {\n if (ts.isStringLiteral(node.expression)) {\n return node.expression.text;\n }\n return undefined;\n}\n\n/**\n * We use void directives as pragmas. Extract the void directives here\n */\nexport function extractVoidExpression(node: ts.Node): ts.VoidExpression | undefined {\n if (ts.isVoidExpression(node)) {\n return node;\n }\n if (ts.isExpressionStatement(node)) {\n return extractVoidExpression(node.expression);\n }\n if (ts.isParenthesizedExpression(node)) {\n return extractVoidExpression(node.expression);\n }\n if (ts.isBinaryExpression(node) && node.operatorToken.kind === ts.SyntaxKind.CommaToken) {\n return extractVoidExpression(node.left);\n }\n return undefined;\n}\n\nexport function quoteStringLiteral(x: string) {\n return x.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n}\n\nexport function visibility(\n x:\n | ts.AccessorDeclaration\n | ts.FunctionLikeDeclaration\n | ts.GetAccessorDeclaration\n | ts.PropertyDeclaration\n | ts.PropertySignature\n | ts.SetAccessorDeclaration,\n) {\n const flags = ts.getCombinedModifierFlags(x);\n if (flags & ts.ModifierFlags.Private) {\n return 'private';\n }\n if (flags & ts.ModifierFlags.Protected) {\n return 'protected';\n }\n return 'public';\n}\n\nfunction hasFlag<T extends ts.Declaration>(flag: ts.ModifierFlags) {\n return (x: T) => {\n const flags = ts.getCombinedModifierFlags(x);\n return (flags & flag) !== 0;\n };\n}\n\nexport const isReadOnly = hasFlag<\n | ts.AccessorDeclaration\n | ts.FunctionLikeDeclaration\n | ts.GetAccessorDeclaration\n | ts.PropertyDeclaration\n | ts.PropertySignature\n | ts.SetAccessorDeclaration\n>(ts.ModifierFlags.Readonly);\nexport const isExported = hasFlag(ts.ModifierFlags.Export);\nexport const isPrivate = hasFlag(ts.ModifierFlags.Private);\nexport const isProtected = hasFlag(ts.ModifierFlags.Private);\nexport function isPublic(x: ts.Declaration) {\n // In TypeScript, anything not explicitly marked private or protected is public.\n return !isPrivate(x) && !isProtected(x);\n}\nexport const isStatic = hasFlag(ts.ModifierFlags.Static);\n\n/**\n * Return the super() call from a method body if found\n */\nexport function findSuperCall(\n node: ts.Block | ts.Expression | undefined,\n renderer: AstRenderer<any>,\n): ts.SuperCall | undefined {\n if (node === undefined) {\n return undefined;\n }\n if (ts.isCallExpression(node)) {\n if (renderer.textOf(node.expression) === 'super') {\n return node as unknown as ts.SuperCall;\n }\n }\n if (ts.isExpressionStatement(node)) {\n return findSuperCall(node.expression, renderer);\n }\n if (ts.isBlock(node)) {\n for (const statement of node.statements) {\n if (ts.isExpressionStatement(statement)) {\n const s = findSuperCall(statement.expression, renderer);\n if (s) {\n return s;\n }\n }\n }\n }\n return undefined;\n}\n\n/**\n * Return the names of all private property declarations\n */\nexport function privatePropertyNames(members: readonly ts.ClassElement[], renderer: AstRenderer<any>): string[] {\n const props = members.filter((m) => ts.isPropertyDeclaration(m)) as ts.PropertyDeclaration[];\n return props.filter((m) => visibility(m) === 'private').map((m) => renderer.textOf(m.name));\n}\n\nexport function findEnclosingClassDeclaration(node: ts.Node): ts.ClassDeclaration | undefined {\n while (node && !ts.isClassDeclaration(node)) {\n node = node.parent;\n }\n return node;\n}\n"]}
1
+ {"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["../../src/typescript/ast-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ts from 'typescript';\n\nimport { AstRenderer } from '../renderer';\n\nexport function stripCommentMarkers(comment: string, multiline: boolean) {\n if (multiline) {\n // The text *must* start with '/*' and end with '*/'.\n // Strip leading '*' from every remaining line (first line because of '**',\n // other lines because of continuations.\n return comment\n .substring(2, comment.length - 2)\n .replace(/^[ \\t]+/g, '') // Strip all leading whitepace\n .replace(/[ \\t]+$/g, '') // Strip all trailing whitepace\n .replace(/^[ \\t]*\\*[ \\t]?/gm, ''); // Strip \"* \" from start of line\n }\n // The text *must* start with '//'\n return comment.replace(/^[/]{2}[ \\t]?/gm, '');\n}\n\nexport function stringFromLiteral(expr: ts.Expression) {\n if (ts.isStringLiteral(expr)) {\n return expr.text;\n }\n return '???';\n}\n\n/**\n * All types of nodes that can be captured using `nodeOfType`, and the type of Node they map to\n */\nexport type CapturableNodes = {\n [ts.SyntaxKind.ImportDeclaration]: ts.ImportDeclaration;\n [ts.SyntaxKind.VariableDeclaration]: ts.VariableDeclaration;\n [ts.SyntaxKind.ExternalModuleReference]: ts.ExternalModuleReference;\n [ts.SyntaxKind.NamespaceImport]: ts.NamespaceImport;\n [ts.SyntaxKind.NamedImports]: ts.NamedImports;\n [ts.SyntaxKind.ImportSpecifier]: ts.ImportSpecifier;\n [ts.SyntaxKind.StringLiteral]: ts.StringLiteral;\n};\n\nexport type AstMatcher<A> = (nodes?: ts.Node[]) => A | undefined;\n\n/**\n * Return AST children of the given node\n *\n * Difference with node.getChildren():\n *\n * - node.getChildren() must take a SourceFile (will fail if it doesn't get it)\n * and returns a mix of abstract and concrete syntax nodes.\n * - This function function will ONLY return abstract syntax nodes.\n */\nexport function nodeChildren(node: ts.Node): ts.Node[] {\n const ret = new Array<ts.Node>();\n node.forEachChild((n) => {\n ret.push(n);\n });\n return ret;\n}\n\n/**\n * Match a single node of a given type\n *\n * Capture name is first so that the IDE can detect eagerly that we're falling into\n * that overload and properly autocomplete the recognized node types from CapturableNodes.\n *\n * Looks like SyntaxList nodes appear in the printed AST, but they don't actually appear\n */\nexport function nodeOfType<A>(syntaxKind: ts.SyntaxKind, children?: AstMatcher<A>): AstMatcher<A>;\n// eslint-disable-next-line max-len\nexport function nodeOfType<S extends keyof CapturableNodes, N extends string, A>(\n capture: N,\n capturableNodeType: S,\n children?: AstMatcher<A>,\n): AstMatcher<Omit<A, N> & { [key in N]: CapturableNodes[S] }>;\n// eslint-disable-next-line max-len\nexport function nodeOfType<S extends keyof CapturableNodes, N extends string, A>(\n syntaxKindOrCaptureName: ts.SyntaxKind | N,\n nodeTypeOrChildren?: S | AstMatcher<A>,\n children?: AstMatcher<A>,\n): AstMatcher<A> | AstMatcher<A & { [key in N]: CapturableNodes[S] }> {\n const capturing = typeof syntaxKindOrCaptureName === 'string'; // Determine which overload we're in (SyntaxKind is a number)\n\n const realNext = (capturing ? children : (nodeTypeOrChildren as AstMatcher<A>)) ?? DONE;\n const realCapture = capturing ? syntaxKindOrCaptureName : undefined;\n const realSyntaxKind = capturing ? nodeTypeOrChildren : syntaxKindOrCaptureName;\n\n return (nodes) => {\n for (const node of nodes ?? []) {\n if (node.kind === realSyntaxKind) {\n const ret = realNext(nodeChildren(node));\n if (!ret) {\n continue;\n }\n\n if (realCapture) {\n return Object.assign(ret, {\n [realCapture]: node as CapturableNodes[S],\n }) as any;\n }\n return ret;\n }\n }\n return undefined;\n };\n}\n\nexport function anyNode(): AstMatcher<Record<string, unknown>>;\nexport function anyNode<A>(children: AstMatcher<A>): AstMatcher<A>;\nexport function anyNode<A>(children?: AstMatcher<A>): AstMatcher<A> | AstMatcher<any> {\n const realNext = children ?? DONE;\n return (nodes) => {\n for (const node of nodes ?? []) {\n const m = realNext(nodeChildren(node));\n if (m) {\n return m;\n }\n }\n return undefined;\n };\n}\n\n// Does not capture deeper because how would we even represent that?\nexport function allOfType<S extends keyof CapturableNodes, N extends string, A>(\n s: S,\n name: N,\n children?: AstMatcher<A>,\n): AstMatcher<{ [key in N]: Array<CapturableNodes[S]> }> {\n type ArrayType = Array<CapturableNodes[S]>;\n type ReturnType = { [key in N]: ArrayType };\n const realNext = children ?? DONE;\n\n return (nodes) => {\n let ret: ReturnType | undefined;\n for (const node of nodes ?? []) {\n if (node.kind === s) {\n if (realNext(nodeChildren(node))) {\n if (!ret) {\n ret = { [name]: new Array<CapturableNodes[S]>() } as ReturnType;\n }\n ret[name].push(node as any);\n }\n }\n }\n return ret;\n };\n}\n\nexport const DONE: AstMatcher<Record<string, unknown>> = () => ({});\n\n/**\n * Run a matcher against a node and return (or invoke a callback with) the accumulated bindings\n */\nexport function matchAst<A>(node: ts.Node, matcher: AstMatcher<A>): A | undefined;\nexport function matchAst<A>(node: ts.Node, matcher: AstMatcher<A>, cb: (bindings: A) => void): boolean;\nexport function matchAst<A>(\n node: ts.Node,\n matcher: AstMatcher<A>,\n cb?: (bindings: A) => void,\n): boolean | A | undefined {\n const matched = matcher([node]);\n if (cb) {\n if (matched) {\n cb(matched);\n }\n return !!matched;\n }\n return matched;\n}\n\n/**\n * Count the newlines in a given piece of string that aren't in comment blocks\n */\nexport function countNakedNewlines(str: string) {\n let ret = 0;\n for (const s of scanText(str, 0, str.length).filter((r) => r.type === 'other' || r.type === 'blockcomment')) {\n if (s.type === 'other') {\n // Count newlines in non-comments\n for (let i = s.pos; i < s.end; i++) {\n if (str[i] === '\\n') {\n ret++;\n }\n }\n } else {\n // Discount newlines at the end of block comments\n if (s.hasTrailingNewLine) {\n ret--;\n }\n }\n }\n return ret;\n}\n\nexport function repeatNewlines(str: string) {\n return '\\n'.repeat(Math.min(2, countNakedNewlines(str)));\n}\n\nconst WHITESPACE = [' ', '\\t', '\\r', '\\n'];\n\n/**\n * Extract single-line and multi-line comments from the given string\n *\n * Rewritten because I can't get ts.getLeadingComments and ts.getTrailingComments to do what I want.\n */\nexport function extractComments(text: string, start: number): ts.CommentRange[] {\n return scanText(text, start)\n .filter((s) => s.type === 'blockcomment' || s.type === 'linecomment')\n .map(commentRangeFromTextRange);\n}\n\nexport function commentRangeFromTextRange(rng: TextRange): ts.CommentRange {\n return {\n kind: rng.type === 'blockcomment' ? ts.SyntaxKind.MultiLineCommentTrivia : ts.SyntaxKind.SingleLineCommentTrivia,\n pos: rng.pos,\n end: rng.end,\n hasTrailingNewLine: rng.type !== 'blockcomment' && rng.hasTrailingNewLine,\n };\n}\n\ninterface TextRange {\n pos: number;\n end: number;\n type: 'linecomment' | 'blockcomment' | 'other' | 'directive';\n hasTrailingNewLine: boolean;\n}\n\n/**\n * Extract spans of comments and non-comments out of the string\n *\n * Stop at 'end' when given, or the first non-whitespace character in a\n * non-comment if not given.\n */\nexport function scanText(text: string, start: number, end?: number): TextRange[] {\n const ret: TextRange[] = [];\n\n let pos = start;\n const stopAtCode = end === undefined;\n if (end === undefined) {\n end = text.length;\n }\n while (pos < end) {\n const ch = text[pos];\n\n if (WHITESPACE.includes(ch)) {\n pos++;\n continue;\n }\n\n if (ch === '/' && text[pos + 1] === '/') {\n accumulateTextBlock();\n scanSinglelineComment();\n continue;\n }\n\n if (ch === '/' && text[pos + 1] === '*') {\n accumulateTextBlock();\n scanMultilineComment();\n continue;\n }\n\n // Non-whitespace, non-comment, must be regular token. End if we're not scanning\n // to a particular location, otherwise continue.\n if (stopAtCode) {\n break;\n }\n\n pos++;\n }\n\n accumulateTextBlock();\n\n return ret;\n\n function scanMultilineComment() {\n const endOfComment = findNext('*/', pos + 2);\n ret.push({\n type: 'blockcomment',\n hasTrailingNewLine: ['\\n', '\\r'].includes(text[endOfComment + 2]),\n pos,\n end: endOfComment + 2,\n });\n pos = endOfComment + 2;\n start = pos;\n }\n\n function scanSinglelineComment() {\n const nl = Math.min(findNext('\\r', pos + 2), findNext('\\n', pos + 2));\n\n if (text[pos + 2] === '/') {\n // Special /// comment\n ret.push({\n type: 'directive',\n hasTrailingNewLine: true,\n pos: pos + 1,\n end: nl,\n });\n } else {\n // Regular // comment\n ret.push({\n type: 'linecomment',\n hasTrailingNewLine: true,\n pos,\n end: nl,\n });\n }\n pos = nl + 1;\n start = pos;\n }\n\n function accumulateTextBlock() {\n if (pos - start > 0) {\n ret.push({\n type: 'other',\n hasTrailingNewLine: false,\n pos: start,\n end: pos,\n });\n start = pos;\n }\n }\n\n function findNext(sub: string, startPos: number) {\n const f = text.indexOf(sub, startPos);\n if (f === -1) {\n return text.length;\n }\n return f;\n }\n}\n\nconst VOID_SHOW_KEYWORD = 'show';\n\nexport function extractMaskingVoidExpression(node: ts.Node): ts.VoidExpression | undefined {\n const expr = extractVoidExpression(node);\n if (!expr) {\n return undefined;\n }\n if (ts.isStringLiteral(expr.expression) && expr.expression.text === VOID_SHOW_KEYWORD) {\n return undefined;\n }\n return expr;\n}\n\nexport function extractShowingVoidExpression(node: ts.Node): ts.VoidExpression | undefined {\n const expr = extractVoidExpression(node);\n if (!expr) {\n return undefined;\n }\n if (ts.isStringLiteral(expr.expression) && expr.expression.text === VOID_SHOW_KEYWORD) {\n return expr;\n }\n return undefined;\n}\n\n/**\n * Return the string argument to a void expression if it exists\n */\nexport function voidExpressionString(node: ts.VoidExpression): string | undefined {\n if (ts.isStringLiteral(node.expression)) {\n return node.expression.text;\n }\n return undefined;\n}\n\n/**\n * We use void directives as pragmas. Extract the void directives here\n */\nexport function extractVoidExpression(node: ts.Node): ts.VoidExpression | undefined {\n if (ts.isVoidExpression(node)) {\n return node;\n }\n if (ts.isExpressionStatement(node)) {\n return extractVoidExpression(node.expression);\n }\n if (ts.isParenthesizedExpression(node)) {\n return extractVoidExpression(node.expression);\n }\n if (ts.isBinaryExpression(node) && node.operatorToken.kind === ts.SyntaxKind.CommaToken) {\n return extractVoidExpression(node.left);\n }\n return undefined;\n}\n\nexport function quoteStringLiteral(x: string) {\n return x.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n}\n\nexport function visibility(\n x:\n | ts.AccessorDeclaration\n | ts.FunctionLikeDeclaration\n | ts.GetAccessorDeclaration\n | ts.PropertyDeclaration\n | ts.PropertySignature\n | ts.SetAccessorDeclaration,\n) {\n const flags = ts.getCombinedModifierFlags(x);\n if (flags & ts.ModifierFlags.Private) {\n return 'private';\n }\n if (flags & ts.ModifierFlags.Protected) {\n return 'protected';\n }\n return 'public';\n}\n\nfunction hasFlag<T extends ts.Declaration>(flag: ts.ModifierFlags) {\n return (x: T) => {\n const flags = ts.getCombinedModifierFlags(x);\n return (flags & flag) !== 0;\n };\n}\n\nexport const isReadOnly = hasFlag<\n | ts.AccessorDeclaration\n | ts.FunctionLikeDeclaration\n | ts.GetAccessorDeclaration\n | ts.PropertyDeclaration\n | ts.PropertySignature\n | ts.SetAccessorDeclaration\n>(ts.ModifierFlags.Readonly);\nexport const isExported = hasFlag(ts.ModifierFlags.Export);\nexport const isPrivate = hasFlag(ts.ModifierFlags.Private);\nexport const isProtected = hasFlag(ts.ModifierFlags.Private);\nexport function isPublic(x: ts.Declaration) {\n // In TypeScript, anything not explicitly marked private or protected is public.\n return !isPrivate(x) && !isProtected(x);\n}\nexport const isStatic = hasFlag(ts.ModifierFlags.Static);\n\n/**\n * Return the super() call from a method body if found\n */\nexport function findSuperCall(\n node: ts.Block | ts.Expression | undefined,\n renderer: AstRenderer<any>,\n): ts.SuperCall | undefined {\n if (node === undefined) {\n return undefined;\n }\n if (ts.isCallExpression(node)) {\n if (renderer.textOf(node.expression) === 'super') {\n return node as unknown as ts.SuperCall;\n }\n }\n if (ts.isExpressionStatement(node)) {\n return findSuperCall(node.expression, renderer);\n }\n if (ts.isBlock(node)) {\n for (const statement of node.statements) {\n if (ts.isExpressionStatement(statement)) {\n const s = findSuperCall(statement.expression, renderer);\n if (s) {\n return s;\n }\n }\n }\n }\n return undefined;\n}\n\n/**\n * Return the names of all private property declarations\n */\nexport function privatePropertyNames(members: readonly ts.ClassElement[], renderer: AstRenderer<any>): string[] {\n const props = members.filter((m) => ts.isPropertyDeclaration(m)) as ts.PropertyDeclaration[];\n return props.filter((m) => visibility(m) === 'private').map((m) => renderer.textOf(m.name));\n}\n\nexport function findEnclosingClassDeclaration(node: ts.Node): ts.ClassDeclaration | undefined {\n while (node && !ts.isClassDeclaration(node)) {\n node = node.parent;\n }\n return node;\n}\n"]}
@@ -1,8 +1,41 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.analyzeImportEquals = analyzeImportEquals;
4
37
  exports.analyzeImportDeclaration = analyzeImportDeclaration;
5
- const ts = require("typescript");
38
+ const ts = __importStar(require("typescript"));
6
39
  const ast_utils_1 = require("./ast-utils");
7
40
  const jsii_utils_1 = require("../jsii/jsii-utils");
8
41
  const util_1 = require("../util");
@@ -1 +1 @@
1
- {"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/typescript/imports.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ts from 'typescript';\n\nimport { allOfType, matchAst, nodeOfType, stringFromLiteral } from './ast-utils';\nimport { JsiiSymbol, parentSymbol, lookupJsiiSymbolFromNode } from '../jsii/jsii-utils';\nimport { AstRenderer } from '../renderer';\nimport { SubmoduleReferenceMap } from '../submodule-reference';\nimport { fmap } from '../util';\n\n/**\n * Our own unification of import statements\n */\nexport interface ImportStatement {\n readonly node: ts.Node;\n readonly packageName: string;\n readonly imports: FullImport | SelectiveImport;\n readonly moduleSymbol?: JsiiSymbol;\n}\n\nexport type FullImport = {\n readonly import: 'full';\n /**\n * The name of the namespace prefix in the source code. Used to strip the\n * prefix in certain languages (e.g: Java).\n */\n readonly sourceName: string;\n /**\n * The name under which this module is imported. Undefined if the module is\n * not aliased (could be the case for namepsace/submodule imports).\n */\n readonly alias?: string;\n};\n\nexport type SelectiveImport = {\n readonly import: 'selective';\n readonly elements: ImportBinding[];\n};\n\nexport interface ImportBinding {\n readonly sourceName: string;\n\n readonly alias?: string;\n\n /**\n * The JSII Symbol the import refers to\n */\n readonly importedSymbol?: JsiiSymbol;\n}\n\nexport function analyzeImportEquals(node: ts.ImportEqualsDeclaration, context: AstRenderer<any>): ImportStatement {\n let moduleName = '???';\n matchAst(node.moduleReference, nodeOfType('ref', ts.SyntaxKind.ExternalModuleReference), (bindings) => {\n moduleName = stringFromLiteral(bindings.ref.expression);\n });\n\n const sourceName = context.textOf(node.name);\n\n return {\n node,\n packageName: moduleName,\n moduleSymbol: lookupJsiiSymbolFromNode(context.typeChecker, node.name),\n imports: { import: 'full', alias: sourceName, sourceName },\n };\n}\n\nexport function analyzeImportDeclaration(\n node: ts.ImportDeclaration | ts.JSDocImportTag,\n context: AstRenderer<any>,\n): ImportStatement;\nexport function analyzeImportDeclaration(\n node: ts.ImportDeclaration | ts.JSDocImportTag,\n context: AstRenderer<any>,\n submoduleReferences: SubmoduleReferenceMap,\n): ImportStatement[];\nexport function analyzeImportDeclaration(\n node: ts.ImportDeclaration | ts.JSDocImportTag,\n context: AstRenderer<any>,\n submoduleReferences?: SubmoduleReferenceMap,\n): ImportStatement | ImportStatement[] {\n const packageName = stringFromLiteral(node.moduleSpecifier);\n\n const starBindings = matchAst(\n node,\n nodeOfType(\n ts.SyntaxKind.ImportDeclaration,\n nodeOfType(ts.SyntaxKind.ImportClause, nodeOfType('namespace', ts.SyntaxKind.NamespaceImport)),\n ),\n );\n\n if (starBindings) {\n const sourceName = context.textOf(starBindings.namespace.name);\n const bareImport: ImportStatement = {\n node,\n packageName,\n moduleSymbol: lookupJsiiSymbolFromNode(context.typeChecker, starBindings.namespace.name),\n imports: {\n import: 'full',\n alias: sourceName,\n sourceName,\n },\n };\n if (submoduleReferences == null) {\n return bareImport;\n }\n\n const rootSymbol = context.typeChecker.getSymbolAtLocation(starBindings.namespace.name);\n const refs = rootSymbol && Array.from(submoduleReferences.values()).filter((ref) => ref.root === rootSymbol);\n // No submodule reference, or only 1 where the path is empty (this is used to signal the use of the bare import so it's not erased)\n if (refs == null || refs.length === 0 || (refs.length === 1 && refs[0].path.length === 0)) {\n return [bareImport];\n }\n\n return refs.flatMap(({ lastNode, path, root, submoduleChain }, idx, array): ImportStatement[] => {\n if (\n array\n .slice(0, idx)\n .some(\n (other) => other.root === root && context.textOf(other.submoduleChain) === context.textOf(submoduleChain),\n )\n ) {\n // This would be a duplicate, so we're skipping it\n return [];\n }\n\n const moduleSymbol = lookupJsiiSymbolFromNode(context.typeChecker, lastNode);\n return [\n {\n node,\n packageName: [packageName, ...path.map((n) => context.textOf(n))].join('/'),\n moduleSymbol,\n imports: {\n import: 'full',\n alias: undefined, // No alias exists in the source text for this...\n sourceName: context.textOf(submoduleChain),\n },\n },\n ];\n });\n }\n\n const namedBindings = matchAst(\n node,\n nodeOfType(\n ts.SyntaxKind.ImportDeclaration,\n nodeOfType(\n ts.SyntaxKind.ImportClause,\n nodeOfType(ts.SyntaxKind.NamedImports, allOfType(ts.SyntaxKind.ImportSpecifier, 'specifiers')),\n ),\n ),\n );\n\n const extraImports = new Array<ImportStatement>();\n const elements: ImportBinding[] = (namedBindings?.specifiers ?? []).flatMap(\n ({ name, propertyName }): ImportBinding[] => {\n // regular import { name }\n // renamed import { propertyName as name }\n const directBinding = {\n sourceName: context.textOf(propertyName ?? name),\n alias: propertyName && context.textOf(name),\n importedSymbol: lookupJsiiSymbolFromNode(context.typeChecker, propertyName ?? name),\n } as const;\n\n if (submoduleReferences != null) {\n const symbol = context.typeChecker.getSymbolAtLocation(name);\n let omitDirectBinding = false;\n for (const match of Array.from(submoduleReferences.values()).filter((ref) => ref.root === symbol)) {\n if (match.path.length === 0) {\n // This is a namespace binding that is used as-is (not via a transitive path). It needs to be preserved.\n omitDirectBinding = false;\n continue;\n }\n const subPackageName = [packageName, ...match.path.map((n) => n.getText(n.getSourceFile()))].join('/');\n const importedSymbol = lookupJsiiSymbolFromNode(context.typeChecker, match.lastNode);\n const moduleSymbol = fmap(importedSymbol, parentSymbol);\n const importStatement =\n extraImports.find((stmt) => {\n if (moduleSymbol != null) {\n return stmt.moduleSymbol === moduleSymbol;\n }\n return stmt.packageName === subPackageName;\n }) ??\n extraImports[\n extraImports.push({\n moduleSymbol,\n node: match.lastNode,\n packageName: subPackageName,\n imports: { import: 'selective', elements: [] },\n }) - 1\n ];\n\n (importStatement.imports as SelectiveImport).elements.push({\n sourceName: context.textOf(match.submoduleChain),\n importedSymbol,\n });\n }\n if (omitDirectBinding) {\n return [];\n }\n }\n\n return [directBinding];\n },\n );\n\n if (submoduleReferences == null) {\n return {\n node,\n packageName,\n imports: { import: 'selective', elements },\n moduleSymbol: fmap(elements?.[0]?.importedSymbol, parentSymbol),\n };\n }\n\n return [\n {\n node,\n packageName,\n imports: { import: 'selective', elements },\n moduleSymbol: fmap(elements?.[0]?.importedSymbol, parentSymbol),\n },\n ...extraImports,\n ];\n}\n"]}
1
+ {"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/typescript/imports.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ts from 'typescript';\n\nimport { allOfType, matchAst, nodeOfType, stringFromLiteral } from './ast-utils';\nimport { JsiiSymbol, parentSymbol, lookupJsiiSymbolFromNode } from '../jsii/jsii-utils';\nimport { AstRenderer } from '../renderer';\nimport { SubmoduleReferenceMap } from '../submodule-reference';\nimport { fmap } from '../util';\n\n/**\n * Our own unification of import statements\n */\nexport interface ImportStatement {\n readonly node: ts.Node;\n readonly packageName: string;\n readonly imports: FullImport | SelectiveImport;\n readonly moduleSymbol?: JsiiSymbol;\n}\n\nexport type FullImport = {\n readonly import: 'full';\n /**\n * The name of the namespace prefix in the source code. Used to strip the\n * prefix in certain languages (e.g: Java).\n */\n readonly sourceName: string;\n /**\n * The name under which this module is imported. Undefined if the module is\n * not aliased (could be the case for namepsace/submodule imports).\n */\n readonly alias?: string;\n};\n\nexport type SelectiveImport = {\n readonly import: 'selective';\n readonly elements: ImportBinding[];\n};\n\nexport interface ImportBinding {\n readonly sourceName: string;\n\n readonly alias?: string;\n\n /**\n * The JSII Symbol the import refers to\n */\n readonly importedSymbol?: JsiiSymbol;\n}\n\nexport function analyzeImportEquals(node: ts.ImportEqualsDeclaration, context: AstRenderer<any>): ImportStatement {\n let moduleName = '???';\n matchAst(node.moduleReference, nodeOfType('ref', ts.SyntaxKind.ExternalModuleReference), (bindings) => {\n moduleName = stringFromLiteral(bindings.ref.expression);\n });\n\n const sourceName = context.textOf(node.name);\n\n return {\n node,\n packageName: moduleName,\n moduleSymbol: lookupJsiiSymbolFromNode(context.typeChecker, node.name),\n imports: { import: 'full', alias: sourceName, sourceName },\n };\n}\n\nexport function analyzeImportDeclaration(\n node: ts.ImportDeclaration | ts.JSDocImportTag,\n context: AstRenderer<any>,\n): ImportStatement;\nexport function analyzeImportDeclaration(\n node: ts.ImportDeclaration | ts.JSDocImportTag,\n context: AstRenderer<any>,\n submoduleReferences: SubmoduleReferenceMap,\n): ImportStatement[];\nexport function analyzeImportDeclaration(\n node: ts.ImportDeclaration | ts.JSDocImportTag,\n context: AstRenderer<any>,\n submoduleReferences?: SubmoduleReferenceMap,\n): ImportStatement | ImportStatement[] {\n const packageName = stringFromLiteral(node.moduleSpecifier);\n\n const starBindings = matchAst(\n node,\n nodeOfType(\n ts.SyntaxKind.ImportDeclaration,\n nodeOfType(ts.SyntaxKind.ImportClause, nodeOfType('namespace', ts.SyntaxKind.NamespaceImport)),\n ),\n );\n\n if (starBindings) {\n const sourceName = context.textOf(starBindings.namespace.name);\n const bareImport: ImportStatement = {\n node,\n packageName,\n moduleSymbol: lookupJsiiSymbolFromNode(context.typeChecker, starBindings.namespace.name),\n imports: {\n import: 'full',\n alias: sourceName,\n sourceName,\n },\n };\n if (submoduleReferences == null) {\n return bareImport;\n }\n\n const rootSymbol = context.typeChecker.getSymbolAtLocation(starBindings.namespace.name);\n const refs = rootSymbol && Array.from(submoduleReferences.values()).filter((ref) => ref.root === rootSymbol);\n // No submodule reference, or only 1 where the path is empty (this is used to signal the use of the bare import so it's not erased)\n if (refs == null || refs.length === 0 || (refs.length === 1 && refs[0].path.length === 0)) {\n return [bareImport];\n }\n\n return refs.flatMap(({ lastNode, path, root, submoduleChain }, idx, array): ImportStatement[] => {\n if (\n array\n .slice(0, idx)\n .some(\n (other) => other.root === root && context.textOf(other.submoduleChain) === context.textOf(submoduleChain),\n )\n ) {\n // This would be a duplicate, so we're skipping it\n return [];\n }\n\n const moduleSymbol = lookupJsiiSymbolFromNode(context.typeChecker, lastNode);\n return [\n {\n node,\n packageName: [packageName, ...path.map((n) => context.textOf(n))].join('/'),\n moduleSymbol,\n imports: {\n import: 'full',\n alias: undefined, // No alias exists in the source text for this...\n sourceName: context.textOf(submoduleChain),\n },\n },\n ];\n });\n }\n\n const namedBindings = matchAst(\n node,\n nodeOfType(\n ts.SyntaxKind.ImportDeclaration,\n nodeOfType(\n ts.SyntaxKind.ImportClause,\n nodeOfType(ts.SyntaxKind.NamedImports, allOfType(ts.SyntaxKind.ImportSpecifier, 'specifiers')),\n ),\n ),\n );\n\n const extraImports = new Array<ImportStatement>();\n const elements: ImportBinding[] = (namedBindings?.specifiers ?? []).flatMap(\n ({ name, propertyName }): ImportBinding[] => {\n // regular import { name }\n // renamed import { propertyName as name }\n const directBinding = {\n sourceName: context.textOf(propertyName ?? name),\n alias: propertyName && context.textOf(name),\n importedSymbol: lookupJsiiSymbolFromNode(context.typeChecker, propertyName ?? name),\n } as const;\n\n if (submoduleReferences != null) {\n const symbol = context.typeChecker.getSymbolAtLocation(name);\n let omitDirectBinding = false;\n for (const match of Array.from(submoduleReferences.values()).filter((ref) => ref.root === symbol)) {\n if (match.path.length === 0) {\n // This is a namespace binding that is used as-is (not via a transitive path). It needs to be preserved.\n omitDirectBinding = false;\n continue;\n }\n const subPackageName = [packageName, ...match.path.map((n) => n.getText(n.getSourceFile()))].join('/');\n const importedSymbol = lookupJsiiSymbolFromNode(context.typeChecker, match.lastNode);\n const moduleSymbol = fmap(importedSymbol, parentSymbol);\n const importStatement =\n extraImports.find((stmt) => {\n if (moduleSymbol != null) {\n return stmt.moduleSymbol === moduleSymbol;\n }\n return stmt.packageName === subPackageName;\n }) ??\n extraImports[\n extraImports.push({\n moduleSymbol,\n node: match.lastNode,\n packageName: subPackageName,\n imports: { import: 'selective', elements: [] },\n }) - 1\n ];\n\n (importStatement.imports as SelectiveImport).elements.push({\n sourceName: context.textOf(match.submoduleChain),\n importedSymbol,\n });\n }\n if (omitDirectBinding) {\n return [];\n }\n }\n\n return [directBinding];\n },\n );\n\n if (submoduleReferences == null) {\n return {\n node,\n packageName,\n imports: { import: 'selective', elements },\n moduleSymbol: fmap(elements?.[0]?.importedSymbol, parentSymbol),\n };\n }\n\n return [\n {\n node,\n packageName,\n imports: { import: 'selective', elements },\n moduleSymbol: fmap(elements?.[0]?.importedSymbol, parentSymbol),\n },\n ...extraImports,\n ];\n}\n"]}