chunk-JCLVSACV.js 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716
  1. import {createRequire as __cjsCompatRequire} from 'module';
  2. const require = __cjsCompatRequire(import.meta.url);
  3. import {
  4. ImportFlags,
  5. NoopImportRewriter,
  6. Reference,
  7. assertSuccessfulReferenceEmit
  8. } from "./chunk-7RPZKH3B.js";
  9. // bazel-out/darwin-fastbuild/bin/packages/compiler-cli/src/ngtsc/translator/src/context.mjs
  10. var Context = class {
  11. constructor(isStatement) {
  12. this.isStatement = isStatement;
  13. }
  14. get withExpressionMode() {
  15. return this.isStatement ? new Context(false) : this;
  16. }
  17. get withStatementMode() {
  18. return !this.isStatement ? new Context(true) : this;
  19. }
  20. };
  21. // bazel-out/darwin-fastbuild/bin/packages/compiler-cli/src/ngtsc/translator/src/translator.mjs
  22. import * as o from "@angular/compiler";
  23. var UNARY_OPERATORS = /* @__PURE__ */ new Map([
  24. [o.UnaryOperator.Minus, "-"],
  25. [o.UnaryOperator.Plus, "+"]
  26. ]);
  27. var BINARY_OPERATORS = /* @__PURE__ */ new Map([
  28. [o.BinaryOperator.And, "&&"],
  29. [o.BinaryOperator.Bigger, ">"],
  30. [o.BinaryOperator.BiggerEquals, ">="],
  31. [o.BinaryOperator.BitwiseAnd, "&"],
  32. [o.BinaryOperator.Divide, "/"],
  33. [o.BinaryOperator.Equals, "=="],
  34. [o.BinaryOperator.Identical, "==="],
  35. [o.BinaryOperator.Lower, "<"],
  36. [o.BinaryOperator.LowerEquals, "<="],
  37. [o.BinaryOperator.Minus, "-"],
  38. [o.BinaryOperator.Modulo, "%"],
  39. [o.BinaryOperator.Multiply, "*"],
  40. [o.BinaryOperator.NotEquals, "!="],
  41. [o.BinaryOperator.NotIdentical, "!=="],
  42. [o.BinaryOperator.Or, "||"],
  43. [o.BinaryOperator.Plus, "+"],
  44. [o.BinaryOperator.NullishCoalesce, "??"]
  45. ]);
  46. var ExpressionTranslatorVisitor = class {
  47. constructor(factory, imports, options) {
  48. this.factory = factory;
  49. this.imports = imports;
  50. this.downlevelTaggedTemplates = options.downlevelTaggedTemplates === true;
  51. this.downlevelVariableDeclarations = options.downlevelVariableDeclarations === true;
  52. this.recordWrappedNode = options.recordWrappedNode || (() => {
  53. });
  54. }
  55. visitDeclareVarStmt(stmt, context) {
  56. var _a;
  57. const varType = this.downlevelVariableDeclarations ? "var" : stmt.hasModifier(o.StmtModifier.Final) ? "const" : "let";
  58. return this.attachComments(this.factory.createVariableDeclaration(stmt.name, (_a = stmt.value) == null ? void 0 : _a.visitExpression(this, context.withExpressionMode), varType), stmt.leadingComments);
  59. }
  60. visitDeclareFunctionStmt(stmt, context) {
  61. return this.attachComments(this.factory.createFunctionDeclaration(stmt.name, stmt.params.map((param) => param.name), this.factory.createBlock(this.visitStatements(stmt.statements, context.withStatementMode))), stmt.leadingComments);
  62. }
  63. visitExpressionStmt(stmt, context) {
  64. return this.attachComments(this.factory.createExpressionStatement(stmt.expr.visitExpression(this, context.withStatementMode)), stmt.leadingComments);
  65. }
  66. visitReturnStmt(stmt, context) {
  67. return this.attachComments(this.factory.createReturnStatement(stmt.value.visitExpression(this, context.withExpressionMode)), stmt.leadingComments);
  68. }
  69. visitIfStmt(stmt, context) {
  70. return this.attachComments(this.factory.createIfStatement(stmt.condition.visitExpression(this, context), this.factory.createBlock(this.visitStatements(stmt.trueCase, context.withStatementMode)), stmt.falseCase.length > 0 ? this.factory.createBlock(this.visitStatements(stmt.falseCase, context.withStatementMode)) : null), stmt.leadingComments);
  71. }
  72. visitReadVarExpr(ast, _context) {
  73. const identifier = this.factory.createIdentifier(ast.name);
  74. this.setSourceMapRange(identifier, ast.sourceSpan);
  75. return identifier;
  76. }
  77. visitWriteVarExpr(expr, context) {
  78. const assignment = this.factory.createAssignment(this.setSourceMapRange(this.factory.createIdentifier(expr.name), expr.sourceSpan), expr.value.visitExpression(this, context));
  79. return context.isStatement ? assignment : this.factory.createParenthesizedExpression(assignment);
  80. }
  81. visitWriteKeyExpr(expr, context) {
  82. const exprContext = context.withExpressionMode;
  83. const target = this.factory.createElementAccess(expr.receiver.visitExpression(this, exprContext), expr.index.visitExpression(this, exprContext));
  84. const assignment = this.factory.createAssignment(target, expr.value.visitExpression(this, exprContext));
  85. return context.isStatement ? assignment : this.factory.createParenthesizedExpression(assignment);
  86. }
  87. visitWritePropExpr(expr, context) {
  88. const target = this.factory.createPropertyAccess(expr.receiver.visitExpression(this, context), expr.name);
  89. return this.factory.createAssignment(target, expr.value.visitExpression(this, context));
  90. }
  91. visitInvokeFunctionExpr(ast, context) {
  92. return this.setSourceMapRange(this.factory.createCallExpression(ast.fn.visitExpression(this, context), ast.args.map((arg) => arg.visitExpression(this, context)), ast.pure), ast.sourceSpan);
  93. }
  94. visitTaggedTemplateExpr(ast, context) {
  95. return this.setSourceMapRange(this.createTaggedTemplateExpression(ast.tag.visitExpression(this, context), {
  96. elements: ast.template.elements.map((e) => {
  97. var _a;
  98. return createTemplateElement({
  99. cooked: e.text,
  100. raw: e.rawText,
  101. range: (_a = e.sourceSpan) != null ? _a : ast.sourceSpan
  102. });
  103. }),
  104. expressions: ast.template.expressions.map((e) => e.visitExpression(this, context))
  105. }), ast.sourceSpan);
  106. }
  107. visitInstantiateExpr(ast, context) {
  108. return this.factory.createNewExpression(ast.classExpr.visitExpression(this, context), ast.args.map((arg) => arg.visitExpression(this, context)));
  109. }
  110. visitLiteralExpr(ast, _context) {
  111. return this.setSourceMapRange(this.factory.createLiteral(ast.value), ast.sourceSpan);
  112. }
  113. visitLocalizedString(ast, context) {
  114. const elements = [createTemplateElement(ast.serializeI18nHead())];
  115. const expressions = [];
  116. for (let i = 0; i < ast.expressions.length; i++) {
  117. const placeholder = this.setSourceMapRange(ast.expressions[i].visitExpression(this, context), ast.getPlaceholderSourceSpan(i));
  118. expressions.push(placeholder);
  119. elements.push(createTemplateElement(ast.serializeI18nTemplatePart(i + 1)));
  120. }
  121. const localizeTag = this.factory.createIdentifier("$localize");
  122. return this.setSourceMapRange(this.createTaggedTemplateExpression(localizeTag, { elements, expressions }), ast.sourceSpan);
  123. }
  124. createTaggedTemplateExpression(tag, template) {
  125. return this.downlevelTaggedTemplates ? this.createES5TaggedTemplateFunctionCall(tag, template) : this.factory.createTaggedTemplate(tag, template);
  126. }
  127. createES5TaggedTemplateFunctionCall(tagHandler, { elements, expressions }) {
  128. const { moduleImport, symbol } = this.imports.generateNamedImport("tslib", "__makeTemplateObject");
  129. const __makeTemplateObjectHelper = moduleImport === null ? this.factory.createIdentifier(symbol) : this.factory.createPropertyAccess(moduleImport, symbol);
  130. const cooked = [];
  131. const raw = [];
  132. for (const element of elements) {
  133. cooked.push(this.factory.setSourceMapRange(this.factory.createLiteral(element.cooked), element.range));
  134. raw.push(this.factory.setSourceMapRange(this.factory.createLiteral(element.raw), element.range));
  135. }
  136. const templateHelperCall = this.factory.createCallExpression(
  137. __makeTemplateObjectHelper,
  138. [this.factory.createArrayLiteral(cooked), this.factory.createArrayLiteral(raw)],
  139. false
  140. );
  141. return this.factory.createCallExpression(
  142. tagHandler,
  143. [templateHelperCall, ...expressions],
  144. false
  145. );
  146. }
  147. visitExternalExpr(ast, _context) {
  148. if (ast.value.name === null) {
  149. if (ast.value.moduleName === null) {
  150. throw new Error("Invalid import without name nor moduleName");
  151. }
  152. return this.imports.generateNamespaceImport(ast.value.moduleName);
  153. }
  154. if (ast.value.moduleName !== null) {
  155. const { moduleImport, symbol } = this.imports.generateNamedImport(ast.value.moduleName, ast.value.name);
  156. if (moduleImport === null) {
  157. return this.factory.createIdentifier(symbol);
  158. } else {
  159. return this.factory.createPropertyAccess(moduleImport, symbol);
  160. }
  161. } else {
  162. return this.factory.createIdentifier(ast.value.name);
  163. }
  164. }
  165. visitConditionalExpr(ast, context) {
  166. let cond = ast.condition.visitExpression(this, context);
  167. if (ast.condition instanceof o.ConditionalExpr) {
  168. cond = this.factory.createParenthesizedExpression(cond);
  169. }
  170. return this.factory.createConditional(cond, ast.trueCase.visitExpression(this, context), ast.falseCase.visitExpression(this, context));
  171. }
  172. visitNotExpr(ast, context) {
  173. return this.factory.createUnaryExpression("!", ast.condition.visitExpression(this, context));
  174. }
  175. visitFunctionExpr(ast, context) {
  176. var _a;
  177. return this.factory.createFunctionExpression((_a = ast.name) != null ? _a : null, ast.params.map((param) => param.name), this.factory.createBlock(this.visitStatements(ast.statements, context)));
  178. }
  179. visitBinaryOperatorExpr(ast, context) {
  180. if (!BINARY_OPERATORS.has(ast.operator)) {
  181. throw new Error(`Unknown binary operator: ${o.BinaryOperator[ast.operator]}`);
  182. }
  183. return this.factory.createBinaryExpression(ast.lhs.visitExpression(this, context), BINARY_OPERATORS.get(ast.operator), ast.rhs.visitExpression(this, context));
  184. }
  185. visitReadPropExpr(ast, context) {
  186. return this.factory.createPropertyAccess(ast.receiver.visitExpression(this, context), ast.name);
  187. }
  188. visitReadKeyExpr(ast, context) {
  189. return this.factory.createElementAccess(ast.receiver.visitExpression(this, context), ast.index.visitExpression(this, context));
  190. }
  191. visitLiteralArrayExpr(ast, context) {
  192. return this.factory.createArrayLiteral(ast.entries.map((expr) => this.setSourceMapRange(expr.visitExpression(this, context), ast.sourceSpan)));
  193. }
  194. visitLiteralMapExpr(ast, context) {
  195. const properties = ast.entries.map((entry) => {
  196. return {
  197. propertyName: entry.key,
  198. quoted: entry.quoted,
  199. value: entry.value.visitExpression(this, context)
  200. };
  201. });
  202. return this.setSourceMapRange(this.factory.createObjectLiteral(properties), ast.sourceSpan);
  203. }
  204. visitCommaExpr(ast, context) {
  205. throw new Error("Method not implemented.");
  206. }
  207. visitWrappedNodeExpr(ast, _context) {
  208. this.recordWrappedNode(ast);
  209. return ast.node;
  210. }
  211. visitTypeofExpr(ast, context) {
  212. return this.factory.createTypeOfExpression(ast.expr.visitExpression(this, context));
  213. }
  214. visitUnaryOperatorExpr(ast, context) {
  215. if (!UNARY_OPERATORS.has(ast.operator)) {
  216. throw new Error(`Unknown unary operator: ${o.UnaryOperator[ast.operator]}`);
  217. }
  218. return this.factory.createUnaryExpression(UNARY_OPERATORS.get(ast.operator), ast.expr.visitExpression(this, context));
  219. }
  220. visitStatements(statements, context) {
  221. return statements.map((stmt) => stmt.visitStatement(this, context)).filter((stmt) => stmt !== void 0);
  222. }
  223. setSourceMapRange(ast, span) {
  224. return this.factory.setSourceMapRange(ast, createRange(span));
  225. }
  226. attachComments(statement, leadingComments) {
  227. if (leadingComments !== void 0) {
  228. this.factory.attachComments(statement, leadingComments);
  229. }
  230. return statement;
  231. }
  232. };
  233. function createTemplateElement({ cooked, raw, range }) {
  234. return { cooked, raw, range: createRange(range) };
  235. }
  236. function createRange(span) {
  237. if (span === null) {
  238. return null;
  239. }
  240. const { start, end } = span;
  241. const { url, content } = start.file;
  242. if (!url) {
  243. return null;
  244. }
  245. return {
  246. url,
  247. content,
  248. start: { offset: start.offset, line: start.line, column: start.col },
  249. end: { offset: end.offset, line: end.line, column: end.col }
  250. };
  251. }
  252. // bazel-out/darwin-fastbuild/bin/packages/compiler-cli/src/ngtsc/translator/src/import_manager.mjs
  253. import ts from "typescript";
  254. var ImportManager = class {
  255. constructor(rewriter = new NoopImportRewriter(), prefix = "i") {
  256. this.rewriter = rewriter;
  257. this.prefix = prefix;
  258. this.specifierToIdentifier = /* @__PURE__ */ new Map();
  259. this.nextIndex = 0;
  260. }
  261. generateNamespaceImport(moduleName) {
  262. if (!this.specifierToIdentifier.has(moduleName)) {
  263. this.specifierToIdentifier.set(moduleName, ts.factory.createIdentifier(`${this.prefix}${this.nextIndex++}`));
  264. }
  265. return this.specifierToIdentifier.get(moduleName);
  266. }
  267. generateNamedImport(moduleName, originalSymbol) {
  268. const symbol = this.rewriter.rewriteSymbol(originalSymbol, moduleName);
  269. if (!this.rewriter.shouldImportSymbol(symbol, moduleName)) {
  270. return { moduleImport: null, symbol };
  271. }
  272. const moduleImport = this.generateNamespaceImport(moduleName);
  273. return { moduleImport, symbol };
  274. }
  275. getAllImports(contextPath) {
  276. const imports = [];
  277. for (const [originalSpecifier, qualifier] of this.specifierToIdentifier) {
  278. const specifier = this.rewriter.rewriteSpecifier(originalSpecifier, contextPath);
  279. imports.push({
  280. specifier,
  281. qualifier
  282. });
  283. }
  284. return imports;
  285. }
  286. };
  287. // bazel-out/darwin-fastbuild/bin/packages/compiler-cli/src/ngtsc/translator/src/type_translator.mjs
  288. import * as o2 from "@angular/compiler";
  289. import ts2 from "typescript";
  290. function translateType(type, contextFile, reflector, refEmitter, imports) {
  291. return type.visitType(new TypeTranslatorVisitor(imports, contextFile, reflector, refEmitter), new Context(false));
  292. }
  293. var TypeTranslatorVisitor = class {
  294. constructor(imports, contextFile, reflector, refEmitter) {
  295. this.imports = imports;
  296. this.contextFile = contextFile;
  297. this.reflector = reflector;
  298. this.refEmitter = refEmitter;
  299. }
  300. visitBuiltinType(type, context) {
  301. switch (type.name) {
  302. case o2.BuiltinTypeName.Bool:
  303. return ts2.factory.createKeywordTypeNode(ts2.SyntaxKind.BooleanKeyword);
  304. case o2.BuiltinTypeName.Dynamic:
  305. return ts2.factory.createKeywordTypeNode(ts2.SyntaxKind.AnyKeyword);
  306. case o2.BuiltinTypeName.Int:
  307. case o2.BuiltinTypeName.Number:
  308. return ts2.factory.createKeywordTypeNode(ts2.SyntaxKind.NumberKeyword);
  309. case o2.BuiltinTypeName.String:
  310. return ts2.factory.createKeywordTypeNode(ts2.SyntaxKind.StringKeyword);
  311. case o2.BuiltinTypeName.None:
  312. return ts2.factory.createKeywordTypeNode(ts2.SyntaxKind.NeverKeyword);
  313. default:
  314. throw new Error(`Unsupported builtin type: ${o2.BuiltinTypeName[type.name]}`);
  315. }
  316. }
  317. visitExpressionType(type, context) {
  318. const typeNode = this.translateExpression(type.value, context);
  319. if (type.typeParams === null) {
  320. return typeNode;
  321. }
  322. if (!ts2.isTypeReferenceNode(typeNode)) {
  323. throw new Error("An ExpressionType with type arguments must translate into a TypeReferenceNode");
  324. } else if (typeNode.typeArguments !== void 0) {
  325. throw new Error(`An ExpressionType with type arguments cannot have multiple levels of type arguments`);
  326. }
  327. const typeArgs = type.typeParams.map((param) => this.translateType(param, context));
  328. return ts2.factory.createTypeReferenceNode(typeNode.typeName, typeArgs);
  329. }
  330. visitArrayType(type, context) {
  331. return ts2.factory.createArrayTypeNode(this.translateType(type.of, context));
  332. }
  333. visitMapType(type, context) {
  334. const parameter = ts2.factory.createParameterDeclaration(void 0, void 0, "key", void 0, ts2.factory.createKeywordTypeNode(ts2.SyntaxKind.StringKeyword));
  335. const typeArgs = type.valueType !== null ? this.translateType(type.valueType, context) : ts2.factory.createKeywordTypeNode(ts2.SyntaxKind.UnknownKeyword);
  336. const indexSignature = ts2.factory.createIndexSignature(void 0, [parameter], typeArgs);
  337. return ts2.factory.createTypeLiteralNode([indexSignature]);
  338. }
  339. visitTransplantedType(ast, context) {
  340. if (!ts2.isTypeNode(ast.type)) {
  341. throw new Error(`A TransplantedType must wrap a TypeNode`);
  342. }
  343. return this.translateTransplantedTypeNode(ast.type, context);
  344. }
  345. visitReadVarExpr(ast, context) {
  346. if (ast.name === null) {
  347. throw new Error(`ReadVarExpr with no variable name in type`);
  348. }
  349. return ts2.factory.createTypeQueryNode(ts2.factory.createIdentifier(ast.name));
  350. }
  351. visitWriteVarExpr(expr, context) {
  352. throw new Error("Method not implemented.");
  353. }
  354. visitWriteKeyExpr(expr, context) {
  355. throw new Error("Method not implemented.");
  356. }
  357. visitWritePropExpr(expr, context) {
  358. throw new Error("Method not implemented.");
  359. }
  360. visitInvokeFunctionExpr(ast, context) {
  361. throw new Error("Method not implemented.");
  362. }
  363. visitTaggedTemplateExpr(ast, context) {
  364. throw new Error("Method not implemented.");
  365. }
  366. visitInstantiateExpr(ast, context) {
  367. throw new Error("Method not implemented.");
  368. }
  369. visitLiteralExpr(ast, context) {
  370. if (ast.value === null) {
  371. return ts2.factory.createLiteralTypeNode(ts2.factory.createNull());
  372. } else if (ast.value === void 0) {
  373. return ts2.factory.createKeywordTypeNode(ts2.SyntaxKind.UndefinedKeyword);
  374. } else if (typeof ast.value === "boolean") {
  375. return ts2.factory.createLiteralTypeNode(ast.value ? ts2.factory.createTrue() : ts2.factory.createFalse());
  376. } else if (typeof ast.value === "number") {
  377. return ts2.factory.createLiteralTypeNode(ts2.factory.createNumericLiteral(ast.value));
  378. } else {
  379. return ts2.factory.createLiteralTypeNode(ts2.factory.createStringLiteral(ast.value));
  380. }
  381. }
  382. visitLocalizedString(ast, context) {
  383. throw new Error("Method not implemented.");
  384. }
  385. visitExternalExpr(ast, context) {
  386. if (ast.value.moduleName === null || ast.value.name === null) {
  387. throw new Error(`Import unknown module or symbol`);
  388. }
  389. const { moduleImport, symbol } = this.imports.generateNamedImport(ast.value.moduleName, ast.value.name);
  390. const symbolIdentifier = ts2.factory.createIdentifier(symbol);
  391. const typeName = moduleImport ? ts2.factory.createQualifiedName(moduleImport, symbolIdentifier) : symbolIdentifier;
  392. const typeArguments = ast.typeParams !== null ? ast.typeParams.map((type) => this.translateType(type, context)) : void 0;
  393. return ts2.factory.createTypeReferenceNode(typeName, typeArguments);
  394. }
  395. visitConditionalExpr(ast, context) {
  396. throw new Error("Method not implemented.");
  397. }
  398. visitNotExpr(ast, context) {
  399. throw new Error("Method not implemented.");
  400. }
  401. visitFunctionExpr(ast, context) {
  402. throw new Error("Method not implemented.");
  403. }
  404. visitUnaryOperatorExpr(ast, context) {
  405. throw new Error("Method not implemented.");
  406. }
  407. visitBinaryOperatorExpr(ast, context) {
  408. throw new Error("Method not implemented.");
  409. }
  410. visitReadPropExpr(ast, context) {
  411. throw new Error("Method not implemented.");
  412. }
  413. visitReadKeyExpr(ast, context) {
  414. throw new Error("Method not implemented.");
  415. }
  416. visitLiteralArrayExpr(ast, context) {
  417. const values = ast.entries.map((expr) => this.translateExpression(expr, context));
  418. return ts2.factory.createTupleTypeNode(values);
  419. }
  420. visitLiteralMapExpr(ast, context) {
  421. const entries = ast.entries.map((entry) => {
  422. const { key, quoted } = entry;
  423. const type = this.translateExpression(entry.value, context);
  424. return ts2.factory.createPropertySignature(
  425. void 0,
  426. quoted ? ts2.factory.createStringLiteral(key) : key,
  427. void 0,
  428. type
  429. );
  430. });
  431. return ts2.factory.createTypeLiteralNode(entries);
  432. }
  433. visitCommaExpr(ast, context) {
  434. throw new Error("Method not implemented.");
  435. }
  436. visitWrappedNodeExpr(ast, context) {
  437. const node = ast.node;
  438. if (ts2.isEntityName(node)) {
  439. return ts2.factory.createTypeReferenceNode(node, void 0);
  440. } else if (ts2.isTypeNode(node)) {
  441. return node;
  442. } else if (ts2.isLiteralExpression(node)) {
  443. return ts2.factory.createLiteralTypeNode(node);
  444. } else {
  445. throw new Error(`Unsupported WrappedNodeExpr in TypeTranslatorVisitor: ${ts2.SyntaxKind[node.kind]}`);
  446. }
  447. }
  448. visitTypeofExpr(ast, context) {
  449. const typeNode = this.translateExpression(ast.expr, context);
  450. if (!ts2.isTypeReferenceNode(typeNode)) {
  451. throw new Error(`The target of a typeof expression must be a type reference, but it was
  452. ${ts2.SyntaxKind[typeNode.kind]}`);
  453. }
  454. return ts2.factory.createTypeQueryNode(typeNode.typeName);
  455. }
  456. translateType(type, context) {
  457. const typeNode = type.visitType(this, context);
  458. if (!ts2.isTypeNode(typeNode)) {
  459. throw new Error(`A Type must translate to a TypeNode, but was ${ts2.SyntaxKind[typeNode.kind]}`);
  460. }
  461. return typeNode;
  462. }
  463. translateExpression(expr, context) {
  464. const typeNode = expr.visitExpression(this, context);
  465. if (!ts2.isTypeNode(typeNode)) {
  466. throw new Error(`An Expression must translate to a TypeNode, but was ${ts2.SyntaxKind[typeNode.kind]}`);
  467. }
  468. return typeNode;
  469. }
  470. translateTransplantedTypeReferenceNode(node, context) {
  471. const declaration = this.reflector.getDeclarationOfIdentifier(node.typeName);
  472. if (declaration === null) {
  473. throw new Error(`Unable to statically determine the declaration file of type node ${node.typeName.text}`);
  474. }
  475. const emittedType = this.refEmitter.emit(new Reference(declaration.node), this.contextFile, ImportFlags.NoAliasing | ImportFlags.AllowTypeImports | ImportFlags.AllowRelativeDtsImports);
  476. assertSuccessfulReferenceEmit(emittedType, node, "type");
  477. const result = emittedType.expression.visitExpression(this, context);
  478. if (!ts2.isTypeReferenceNode(result)) {
  479. throw new Error(`Expected TypeReferenceNode when referencing the type for ${node.typeName.text}, but received ${ts2.SyntaxKind[result.kind]}`);
  480. }
  481. if (node.typeArguments === void 0 || node.typeArguments.length === 0) {
  482. return result;
  483. }
  484. const translatedArgs = node.typeArguments.map((arg) => this.translateTransplantedTypeNode(arg, context));
  485. return ts2.factory.updateTypeReferenceNode(result, result.typeName, ts2.factory.createNodeArray(translatedArgs));
  486. }
  487. translateTransplantedTypeNode(rootNode, context) {
  488. const factory = (transformContext) => (root) => {
  489. const walk = (node) => {
  490. if (ts2.isTypeReferenceNode(node) && ts2.isIdentifier(node.typeName)) {
  491. const translated = this.translateTransplantedTypeReferenceNode(node, context);
  492. if (translated !== node) {
  493. return translated;
  494. }
  495. }
  496. return ts2.visitEachChild(node, walk, transformContext);
  497. };
  498. return ts2.visitNode(root, walk);
  499. };
  500. return ts2.transform(rootNode, [factory]).transformed[0];
  501. }
  502. };
  503. // bazel-out/darwin-fastbuild/bin/packages/compiler-cli/src/ngtsc/translator/src/typescript_ast_factory.mjs
  504. import ts3 from "typescript";
  505. var PureAnnotation;
  506. (function(PureAnnotation2) {
  507. PureAnnotation2["CLOSURE"] = "* @pureOrBreakMyCode ";
  508. PureAnnotation2["TERSER"] = "@__PURE__";
  509. })(PureAnnotation || (PureAnnotation = {}));
  510. var UNARY_OPERATORS2 = {
  511. "+": ts3.SyntaxKind.PlusToken,
  512. "-": ts3.SyntaxKind.MinusToken,
  513. "!": ts3.SyntaxKind.ExclamationToken
  514. };
  515. var BINARY_OPERATORS2 = {
  516. "&&": ts3.SyntaxKind.AmpersandAmpersandToken,
  517. ">": ts3.SyntaxKind.GreaterThanToken,
  518. ">=": ts3.SyntaxKind.GreaterThanEqualsToken,
  519. "&": ts3.SyntaxKind.AmpersandToken,
  520. "/": ts3.SyntaxKind.SlashToken,
  521. "==": ts3.SyntaxKind.EqualsEqualsToken,
  522. "===": ts3.SyntaxKind.EqualsEqualsEqualsToken,
  523. "<": ts3.SyntaxKind.LessThanToken,
  524. "<=": ts3.SyntaxKind.LessThanEqualsToken,
  525. "-": ts3.SyntaxKind.MinusToken,
  526. "%": ts3.SyntaxKind.PercentToken,
  527. "*": ts3.SyntaxKind.AsteriskToken,
  528. "!=": ts3.SyntaxKind.ExclamationEqualsToken,
  529. "!==": ts3.SyntaxKind.ExclamationEqualsEqualsToken,
  530. "||": ts3.SyntaxKind.BarBarToken,
  531. "+": ts3.SyntaxKind.PlusToken,
  532. "??": ts3.SyntaxKind.QuestionQuestionToken
  533. };
  534. var VAR_TYPES = {
  535. "const": ts3.NodeFlags.Const,
  536. "let": ts3.NodeFlags.Let,
  537. "var": ts3.NodeFlags.None
  538. };
  539. var TypeScriptAstFactory = class {
  540. constructor(annotateForClosureCompiler) {
  541. this.annotateForClosureCompiler = annotateForClosureCompiler;
  542. this.externalSourceFiles = /* @__PURE__ */ new Map();
  543. this.attachComments = attachComments;
  544. this.createArrayLiteral = ts3.factory.createArrayLiteralExpression;
  545. this.createElementAccess = ts3.factory.createElementAccessExpression;
  546. this.createExpressionStatement = ts3.factory.createExpressionStatement;
  547. this.createIdentifier = ts3.factory.createIdentifier;
  548. this.createParenthesizedExpression = ts3.factory.createParenthesizedExpression;
  549. this.createPropertyAccess = ts3.factory.createPropertyAccessExpression;
  550. this.createThrowStatement = ts3.factory.createThrowStatement;
  551. this.createTypeOfExpression = ts3.factory.createTypeOfExpression;
  552. }
  553. createAssignment(target, value) {
  554. return ts3.factory.createBinaryExpression(target, ts3.SyntaxKind.EqualsToken, value);
  555. }
  556. createBinaryExpression(leftOperand, operator, rightOperand) {
  557. return ts3.factory.createBinaryExpression(leftOperand, BINARY_OPERATORS2[operator], rightOperand);
  558. }
  559. createBlock(body) {
  560. return ts3.factory.createBlock(body);
  561. }
  562. createCallExpression(callee, args, pure) {
  563. const call = ts3.factory.createCallExpression(callee, void 0, args);
  564. if (pure) {
  565. ts3.addSyntheticLeadingComment(
  566. call,
  567. ts3.SyntaxKind.MultiLineCommentTrivia,
  568. this.annotateForClosureCompiler ? PureAnnotation.CLOSURE : PureAnnotation.TERSER,
  569. false
  570. );
  571. }
  572. return call;
  573. }
  574. createConditional(condition, whenTrue, whenFalse) {
  575. return ts3.factory.createConditionalExpression(condition, void 0, whenTrue, void 0, whenFalse);
  576. }
  577. createFunctionDeclaration(functionName, parameters, body) {
  578. if (!ts3.isBlock(body)) {
  579. throw new Error(`Invalid syntax, expected a block, but got ${ts3.SyntaxKind[body.kind]}.`);
  580. }
  581. return ts3.factory.createFunctionDeclaration(void 0, void 0, functionName, void 0, parameters.map((param) => ts3.factory.createParameterDeclaration(void 0, void 0, param)), void 0, body);
  582. }
  583. createFunctionExpression(functionName, parameters, body) {
  584. if (!ts3.isBlock(body)) {
  585. throw new Error(`Invalid syntax, expected a block, but got ${ts3.SyntaxKind[body.kind]}.`);
  586. }
  587. return ts3.factory.createFunctionExpression(void 0, void 0, functionName != null ? functionName : void 0, void 0, parameters.map((param) => ts3.factory.createParameterDeclaration(void 0, void 0, param)), void 0, body);
  588. }
  589. createIfStatement(condition, thenStatement, elseStatement) {
  590. return ts3.factory.createIfStatement(condition, thenStatement, elseStatement != null ? elseStatement : void 0);
  591. }
  592. createLiteral(value) {
  593. if (value === void 0) {
  594. return ts3.factory.createIdentifier("undefined");
  595. } else if (value === null) {
  596. return ts3.factory.createNull();
  597. } else if (typeof value === "boolean") {
  598. return value ? ts3.factory.createTrue() : ts3.factory.createFalse();
  599. } else if (typeof value === "number") {
  600. return ts3.factory.createNumericLiteral(value);
  601. } else {
  602. return ts3.factory.createStringLiteral(value);
  603. }
  604. }
  605. createNewExpression(expression, args) {
  606. return ts3.factory.createNewExpression(expression, void 0, args);
  607. }
  608. createObjectLiteral(properties) {
  609. return ts3.factory.createObjectLiteralExpression(properties.map((prop) => ts3.factory.createPropertyAssignment(prop.quoted ? ts3.factory.createStringLiteral(prop.propertyName) : ts3.factory.createIdentifier(prop.propertyName), prop.value)));
  610. }
  611. createReturnStatement(expression) {
  612. return ts3.factory.createReturnStatement(expression != null ? expression : void 0);
  613. }
  614. createTaggedTemplate(tag, template) {
  615. let templateLiteral;
  616. const length = template.elements.length;
  617. const head = template.elements[0];
  618. if (length === 1) {
  619. templateLiteral = ts3.factory.createNoSubstitutionTemplateLiteral(head.cooked, head.raw);
  620. } else {
  621. const spans = [];
  622. for (let i = 1; i < length - 1; i++) {
  623. const { cooked, raw, range } = template.elements[i];
  624. const middle = createTemplateMiddle(cooked, raw);
  625. if (range !== null) {
  626. this.setSourceMapRange(middle, range);
  627. }
  628. spans.push(ts3.factory.createTemplateSpan(template.expressions[i - 1], middle));
  629. }
  630. const resolvedExpression = template.expressions[length - 2];
  631. const templatePart = template.elements[length - 1];
  632. const templateTail = createTemplateTail(templatePart.cooked, templatePart.raw);
  633. if (templatePart.range !== null) {
  634. this.setSourceMapRange(templateTail, templatePart.range);
  635. }
  636. spans.push(ts3.factory.createTemplateSpan(resolvedExpression, templateTail));
  637. templateLiteral = ts3.factory.createTemplateExpression(ts3.factory.createTemplateHead(head.cooked, head.raw), spans);
  638. }
  639. if (head.range !== null) {
  640. this.setSourceMapRange(templateLiteral, head.range);
  641. }
  642. return ts3.factory.createTaggedTemplateExpression(tag, void 0, templateLiteral);
  643. }
  644. createUnaryExpression(operator, operand) {
  645. return ts3.factory.createPrefixUnaryExpression(UNARY_OPERATORS2[operator], operand);
  646. }
  647. createVariableDeclaration(variableName, initializer, type) {
  648. return ts3.factory.createVariableStatement(void 0, ts3.factory.createVariableDeclarationList([ts3.factory.createVariableDeclaration(variableName, void 0, void 0, initializer != null ? initializer : void 0)], VAR_TYPES[type]));
  649. }
  650. setSourceMapRange(node, sourceMapRange) {
  651. if (sourceMapRange === null) {
  652. return node;
  653. }
  654. const url = sourceMapRange.url;
  655. if (!this.externalSourceFiles.has(url)) {
  656. this.externalSourceFiles.set(url, ts3.createSourceMapSource(url, sourceMapRange.content, (pos) => pos));
  657. }
  658. const source = this.externalSourceFiles.get(url);
  659. ts3.setSourceMapRange(node, { pos: sourceMapRange.start.offset, end: sourceMapRange.end.offset, source });
  660. return node;
  661. }
  662. };
  663. function createTemplateMiddle(cooked, raw) {
  664. const node = ts3.factory.createTemplateHead(cooked, raw);
  665. node.kind = ts3.SyntaxKind.TemplateMiddle;
  666. return node;
  667. }
  668. function createTemplateTail(cooked, raw) {
  669. const node = ts3.factory.createTemplateHead(cooked, raw);
  670. node.kind = ts3.SyntaxKind.TemplateTail;
  671. return node;
  672. }
  673. function attachComments(statement, leadingComments) {
  674. for (const comment of leadingComments) {
  675. const commentKind = comment.multiline ? ts3.SyntaxKind.MultiLineCommentTrivia : ts3.SyntaxKind.SingleLineCommentTrivia;
  676. if (comment.multiline) {
  677. ts3.addSyntheticLeadingComment(statement, commentKind, comment.toString(), comment.trailingNewline);
  678. } else {
  679. for (const line of comment.toString().split("\n")) {
  680. ts3.addSyntheticLeadingComment(statement, commentKind, line, comment.trailingNewline);
  681. }
  682. }
  683. }
  684. }
  685. // bazel-out/darwin-fastbuild/bin/packages/compiler-cli/src/ngtsc/translator/src/typescript_translator.mjs
  686. function translateExpression(expression, imports, options = {}) {
  687. return expression.visitExpression(new ExpressionTranslatorVisitor(new TypeScriptAstFactory(options.annotateForClosureCompiler === true), imports, options), new Context(false));
  688. }
  689. function translateStatement(statement, imports, options = {}) {
  690. return statement.visitStatement(new ExpressionTranslatorVisitor(new TypeScriptAstFactory(options.annotateForClosureCompiler === true), imports, options), new Context(true));
  691. }
  692. export {
  693. Context,
  694. ImportManager,
  695. ExpressionTranslatorVisitor,
  696. translateType,
  697. translateExpression,
  698. translateStatement
  699. };
  700. /**
  701. * @license
  702. * Copyright Google LLC All Rights Reserved.
  703. *
  704. * Use of this source code is governed by an MIT-style license that can be
  705. * found in the LICENSE file at https://angular.io/license
  706. */
  707. //# sourceMappingURL=chunk-JCLVSACV.js.map