{"version":3,"file":"ngx-interpolation.mjs","sources":["../../../projects/ngx-interpolation/src/lib/ngx-interpolation.visitor.ts","../../../projects/ngx-interpolation/src/lib/ngx-interpolation.service.ts","../../../projects/ngx-interpolation/src/public-api.ts","../../../projects/ngx-interpolation/src/ngx-interpolation.ts"],"sourcesContent":["import {\r\n  AstVisitor,\r\n  AST,\r\n\r\n  // Discovered\r\n  ASTWithSource,\r\n  Interpolation,\r\n  PropertyRead,\r\n  Binary,\r\n  LiteralPrimitive,\r\n  LiteralArray,\r\n  Conditional,\r\n  ImplicitReceiver,\r\n  KeyedRead,\r\n  LiteralMap,\r\n  SafePropertyRead,\r\n  Call,\r\n  SafeCall,\r\n  SafeKeyedRead,\r\n  PrefixNot,\r\n  NonNullAssert,\r\n\r\n  // Undiscovered\r\n  Chain,\r\n  KeyedWrite,\r\n  PropertyWrite,\r\n  ThisReceiver,\r\n  Unary,\r\n  BindingPipe,\r\n  TypeofExpression,\r\n} from '@angular/compiler';\r\n\r\nexport class NgxInterpolationVisitor implements AstVisitor {\r\n  private _isSafeAccess: boolean = true;\r\n\r\n  // Interpolation\r\n  visitInterpolation(ast: Interpolation, context: any) {\r\n    return ast;\r\n  }\r\n\r\n  // PropertyRead\r\n  visitPropertyRead(ast: PropertyRead, context: any) {\r\n    let _context: any = this.visit(ast.receiver, context);\r\n\r\n    return this._isSafeAccess ? _context[ast.name] : null;\r\n  }\r\n\r\n  // SafePropertyRead\r\n  visitSafePropertyRead(ast: SafePropertyRead, context: any) {\r\n    let _context: any = this.visit(ast.receiver, context);\r\n    if (_context == null || _context == undefined) {\r\n      this._isSafeAccess = false;\r\n      return null;\r\n    }\r\n\r\n    return _context[ast.name];\r\n  }\r\n\r\n  // Binary\r\n  visitBinary(ast: Binary, context: any) {\r\n    let leftValue: any = this.visit(ast.left, context);\r\n    let rightValue: any = this.visit(ast.right, context);\r\n    let result: any;\r\n\r\n    switch (ast.operation) {\r\n      case '+':\r\n        result = leftValue + rightValue;\r\n        break;\r\n      case '-':\r\n        result = leftValue - rightValue;\r\n        break;\r\n      case '*':\r\n        result = leftValue * rightValue;\r\n        break;\r\n      case '/':\r\n        result = leftValue / rightValue;\r\n        break;\r\n      case '%':\r\n        result = leftValue % rightValue;\r\n        break;\r\n      case '&&':\r\n        result = leftValue && rightValue;\r\n        break;\r\n      case '||':\r\n        result = leftValue || rightValue;\r\n        break;\r\n      case '==':\r\n        result = leftValue == rightValue;\r\n        break;\r\n      case '!=':\r\n        result = leftValue != rightValue;\r\n        break;\r\n      case '===':\r\n        result = leftValue === rightValue;\r\n        break;\r\n      case '!==':\r\n        result = leftValue !== rightValue;\r\n        break;\r\n      case '<':\r\n        result = leftValue < rightValue;\r\n        break;\r\n      case '>':\r\n        result = leftValue > rightValue;\r\n        break;\r\n      case '<=':\r\n        result = leftValue <= rightValue;\r\n        break;\r\n      case '>=':\r\n        result = leftValue >= rightValue;\r\n        break;\r\n      default:\r\n        throw new Error(`Unsupported operation ${ast.operation}`);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  // Conditional\r\n  visitConditional(ast: Conditional, context: any) {\r\n    let conditionResult: boolean = this.visit(ast.condition, context);\r\n    if (conditionResult) {\r\n      return this.visit(ast.trueExp, context);\r\n    } else {\r\n      return this.visit(ast.falseExp, context);\r\n    }\r\n  }\r\n\r\n  // ImplicitReceiver\r\n  visitImplicitReceiver(ast: ImplicitReceiver, context: any) {\r\n    this._isSafeAccess = true;\r\n    return context;\r\n  }\r\n\r\n  // KeyedRead\r\n  visitKeyedRead(ast: KeyedRead, context: any) {\r\n    let obj: any = this.visit(ast.receiver, context);\r\n    let key: any = this.visit(ast.key, context);\r\n\r\n    return obj[key];\r\n  }\r\n\r\n  // LiteralArray\r\n  visitLiteralArray(ast: LiteralArray, context: any) {\r\n    return ast.expressions.map((expression: AST) =>\r\n      this.visit(expression, context)\r\n    );\r\n  }\r\n\r\n  // LiteralMap\r\n  visitLiteralMap(ast: LiteralMap, context: any) {\r\n    let obj: any = {};\r\n    ast.values.forEach((value: AST, index: number) => {\r\n      const key = ast.keys[index].key;\r\n      obj[key] = this.visit(value, context);\r\n    });\r\n\r\n    return obj;\r\n  }\r\n\r\n  // LiteralPrimitive\r\n  visitLiteralPrimitive(ast: LiteralPrimitive, context: any) {\r\n    return ast.value;\r\n  }\r\n\r\n  // Call\r\n  visitCall(ast: Call, context: any) {\r\n    const args: Array<any> = ast.args.map((arg: AST) =>\r\n      this.visit(arg, context)\r\n    );\r\n    let _context: any = this.visit(ast.receiver, context);\r\n\r\n    if (!this._isSafeAccess) {\r\n      return null;\r\n    }\r\n    if (typeof _context !== 'function') {\r\n      throw new TypeError(`_ctx.${_context.name} is not a function`);\r\n    }\r\n\r\n    return _context.apply(context, args);\r\n  }\r\n\r\n  // SafeCall\r\n  visitSafeCall(ast: SafeCall, context: any) {\r\n    const args: Array<any> = ast.args.map((arg: AST) =>\r\n      this.visit(arg, context)\r\n    );\r\n    let _context: any = this.visit(ast.receiver, context);\r\n\r\n    if (_context == null || _context == undefined) {\r\n      this._isSafeAccess = false;\r\n      return null;\r\n    }\r\n    if (typeof _context !== 'function') {\r\n      throw new TypeError(`_ctx.${_context} is not a function`);\r\n    }\r\n\r\n    return _context.apply(context, args);\r\n  }\r\n\r\n  // SafeKeyedRead\r\n  visitSafeKeyedRead(ast: SafeKeyedRead, context: any) {\r\n    let obj: any = this.visit(ast.receiver, context);\r\n    let key: any = this.visit(ast.key, context);\r\n\r\n    if (obj == null || obj[key] == null) {\r\n      this._isSafeAccess = false;\r\n      return null;\r\n    }\r\n\r\n    return this._isSafeAccess ? obj[key] : null;\r\n  }\r\n\r\n  // PrefixNot\r\n  visitPrefixNot(ast: PrefixNot, context: any) {\r\n    const value = this.visit(ast.expression, context);\r\n    return !value;\r\n  }\r\n\r\n  // visit\r\n  visit(ast: AST, context?: any) {\r\n    return ast.visit(this, context);\r\n  }\r\n\r\n  // typeof expres\r\n  visitTypeofExpresion(ast: TypeofExpression, context: any) {\r\n    const value = this.visit(ast.expression, context);\r\n    return typeof value;\r\n  }\r\n\r\n  // NonNullAssert\r\n  visitNonNullAssert(ast: NonNullAssert, context: any) {\r\n    const value: any = this.visit(ast.expression, context);\r\n\r\n    if (value == null) {\r\n      let name: string = '{}';\r\n      if (\r\n        ast.expression instanceof SafePropertyRead ||\r\n        ast.expression instanceof PropertyRead ||\r\n        ast.expression instanceof PropertyWrite\r\n      ) {\r\n        name = ast.expression.name;\r\n      }\r\n\r\n      throw new TypeError(`Property '${name}' does not exist`);\r\n    }\r\n\r\n    return value;\r\n  }\r\n\r\n  // Pipe\r\n  visitPipe(ast: BindingPipe, context: any) {\r\n    throw new Error('Method not implemented.');\r\n  }\r\n\r\n  // PropertyWrite\r\n  visitPropertyWrite(ast: PropertyWrite, context: any) {\r\n    throw new Error('Method not implemented.');\r\n  }\r\n\r\n  // ASTWithSource\r\n  visitASTWithSource?(ast: ASTWithSource, context: any) {\r\n    throw new Error('Method not implemented.');\r\n  }\r\n\r\n  visitUnary?(ast: Unary, context: any) {\r\n    throw new Error('Method not implemented.');\r\n  }\r\n\r\n  visitThisReceiver?(ast: ThisReceiver, context: any) {\r\n    throw new Error('Method not implemented.');\r\n  }\r\n\r\n  // KeyedWrite\r\n  visitKeyedWrite(ast: KeyedWrite, context: any) {\r\n    throw new Error('Method not implemented.');\r\n  }\r\n\r\n  // Chain\r\n  visitChain(ast: Chain, context: any) {\r\n    throw new Error('Method not implemented.');\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  Parser,\r\n  Lexer,\r\n  ASTWithSource,\r\n  InterpolationConfig,\r\n  DEFAULT_INTERPOLATION_CONFIG,\r\n  Interpolation,\r\n  AST,\r\n} from '@angular/compiler';\r\nimport { NgxInterpolationVisitor } from './ngx-interpolation.visitor';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class NgxInterpolation {\r\n  private _parser: Parser;\r\n\r\n  constructor() {\r\n    this._parser = new Parser(new Lexer());\r\n  }\r\n\r\n  /**\r\n   * String interpolation\r\n   * @param input The string input to be interpolated.\r\n   * @param context Context to witch variables in the string input are resolved against.\r\n   * @param interpolationConfig Overrides the default encapsulation start and end delimiters (`{{` and `}}`).\r\n   * @returns Interpolated string value.\r\n   * @throws Array of error when expression is invalid.\r\n   */\r\n  interpolate(\r\n    input: string,\r\n    context?: any,\r\n    interpolationConfig?: InterpolationConfig | undefined | null\r\n  ): string {\r\n    if (interpolationConfig == null) {\r\n      interpolationConfig = DEFAULT_INTERPOLATION_CONFIG;\r\n    }\r\n    let interpolatedString: string;\r\n    const astWithSource: ASTWithSource | null = this._parser.parseInterpolation(\r\n      input,\r\n      context,\r\n      0,\r\n      null,\r\n      interpolationConfig\r\n    );\r\n\r\n    if (!astWithSource) return input;\r\n\r\n    if (astWithSource.errors.length) {\r\n      throw astWithSource.errors;\r\n    } else {\r\n      interpolatedString = this.#resolve(\r\n        astWithSource.ast.visit(new NgxInterpolationVisitor()),\r\n        context\r\n      );\r\n    }\r\n\r\n    return interpolatedString;\r\n  }\r\n\r\n  #resolve(interpolation: Interpolation, context: any): string {\r\n    const strings: Array<string> = interpolation.strings;\r\n    const expressions: Array<AST> = interpolation.expressions;\r\n    const parts: Array<any> = new Array();\r\n\r\n    for (let i = 0; i < strings.length; i++) {\r\n      const str = strings[i];\r\n\r\n      if (!this.#isNullOrUndefined(str) && str !== '') {\r\n        parts.push(str);\r\n      }\r\n\r\n      const expression = expressions[i];\r\n      if (expression) {\r\n        parts.push(expression.visit(new NgxInterpolationVisitor(), context));\r\n      }\r\n    }\r\n\r\n    return parts.join('');\r\n  }\r\n\r\n  #isNullOrUndefined(value: any): boolean {\r\n    return value === null || value === undefined || value === 'undefined';\r\n  }\r\n}\r\n","/*\r\n * Public API Surface of ngx-interpolation\r\n */\r\n\r\nexport { NgxInterpolation } from './lib/ngx-interpolation.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}