{"version":3,"file":"ngx-xml-parser.mjs","sources":["../../../projects/ngx-xml-parser/src/lib/reader/ngx-xml-reader.component.ts","../../../projects/ngx-xml-parser/src/lib/reader/ngx-xml-reader.component.html","../../../projects/ngx-xml-parser/src/lib/reader/ngx-xml-reader.module.ts","../../../projects/ngx-xml-parser/src/lib/reader/xml-reader-options.ts","../../../projects/ngx-xml-parser/src/lib/file-handler/file-handler.interface.ts","../../../projects/ngx-xml-parser/src/lib/file-handler/base-file.handler.ts","../../../projects/ngx-xml-parser/src/lib/parsers/xml-basic.parser.ts","../../../projects/ngx-xml-parser/src/lib/parsers/hotmail-archive.parser.ts","../../../projects/ngx-xml-parser/src/lib/parsers/xml-parser.interface.ts","../../../projects/ngx-xml-parser/src/lib/file-loader/file-loader.component.ts","../../../projects/ngx-xml-parser/src/lib/file-loader/file-loader.component.html","../../../projects/ngx-xml-parser/src/lib/ngx-xml-parser.component.ts","../../../projects/ngx-xml-parser/src/lib/ngx-xml-parser.component.html","../../../projects/ngx-xml-parser/src/lib/ngx-xml-parser.module.ts","../../../projects/ngx-xml-parser/src/public-api.ts","../../../projects/ngx-xml-parser/src/ngx-xml-parser.ts"],"sourcesContent":["import { Component, Input } from '@angular/core';\nimport { XmlItem } from './xml-item';\n\n@Component({\n  selector: 'ngx-xml-reader',\n  templateUrl: './ngx-xml-reader.component.html',\n  styleUrls: ['./ngx-xml-reader.component.less']\n})\nexport class NgxXmlReaderComponent {\n\n  @Input() items: XmlItem[] = [];\n}\n","<table>\n  <tbody>\n    <tr *ngFor=\"let item of items\" [style.color]=\"item.color\" [style.background]=\"item.bgColor\">\n      <th *ngIf=\"item.th\" [style.background]=\"item.th.bgColor ?? item.bgColor\" [style.color]=\"item.th.color\"\n          class=\"time\">\n        <span>{{item.th.title}}</span>\n        {{item.th.content}}\n      </th>\n      <td *ngFor=\"let cell of item.cells\" [style.color]=\"cell.color\" [style.background]=\"cell.bgColor ?? item.bgColor\">\n        {{cell.content}}\n      </td>\n    </tr>\n  </tbody>\n</table>\n","import { NgModule } from '@angular/core';\n\nimport { NgxXmlReaderComponent } from './ngx-xml-reader.component';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n  imports: [\n    CommonModule\n  ],\n  exports: [NgxXmlReaderComponent],\n  declarations: [NgxXmlReaderComponent],\n  providers: [],\n})\nexport class NgxXmlReaderModule {\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface IXmlReaderOptions {\n  colors: { color: string | undefined, bgColor: string | undefined }[];\n}\n\nexport const DefaultReaderOptions: IXmlReaderOptions = {\n  colors: [\n    { color: undefined, bgColor: undefined },\n    { color: 'dimgrey', bgColor: 'bisque' },\n    { color: '#330066', bgColor: '#FFCC66' },\n    { color: '#FFF', bgColor: '#333333' },\n  ]\n};\nexport const XmlReaderOptions = new InjectionToken<IXmlReaderOptions>('XmlReaderOptions');\n\n","import { InjectionToken } from '@angular/core';\n\nexport interface IFileHandler {\n\n  /**\n   * Reads the file content from the file\n   *\n   * Returns the content as an async string\n   *\n   * @param file the File object from the file input\n   */\n  readFile(file?: File): Promise<string>;\n}\n\nexport const XmlDefaultFileHandler = new InjectionToken<IFileHandler>('XmlDefaultFileHandler');\n","import { IFileHandler } from './file-handler.interface';\n\nexport class BaseFileHandler implements IFileHandler {\n\n  /**\n   * Reads the file content from the file\n   *\n   * Returns the content as an async string\n   *\n   * @param file the File object from the file input\n   */\n  readFile(file?: File): Promise<string> {\n    return file ? new Promise<string>((resolve) => {\n      if (!file) {\n        return resolve('');\n      }\n      const reader = new FileReader();\n      reader.onload = () => {\n        resolve(reader.result?.toString() ?? '');\n      }\n      reader.readAsText(file);\n    }) : Promise.resolve('');\n  }\n\n}\n","import { DefaultReaderOptions, XmlItem } from '../reader';\nimport { Inject } from '@angular/core';\nimport { IFileHandler, XmlDefaultFileHandler } from '../file-handler';\n\n/**\n * Class to be extended by the parsers\n *\n * Provides basic methods, ie for reading files and converting into a Document object\n */\nexport abstract class XmlBasicParser {\n  xmlParser = new DOMParser();\n\n  constructor(@Inject(XmlDefaultFileHandler) protected readonly fileHandler: IFileHandler) {\n  }\n\n  /**\n   * Reads the file content from the file\n   *\n   * Returns the content as a string\n   * Catch reading errors, returns empty string if anything goes wrong\n   *\n   * @param filePath the File object from the file input\n   */\n  readFile(filePath?: File): Promise<string> {\n    if (!this.fileHandler) {\n      throw Error('No file handler found');\n    }\n    return this.fileHandler.readFile(filePath)\n      .catch((err: { code: string, message: string }) => {\n        console.error('Error at reading file :' + err);\n        return Promise.resolve('');\n      });\n  }\n\n  /**\n   * Generates a Document object from the XML file content\n   *\n   * @param content the file content as a string\n   * @param type the type of content for the dom parser\n   */\n  buildDocument(content?: string, type: DOMParserSupportedType = 'text/xml'): Document | null {\n    if (!content) {\n      return null;\n    }\n    return this.xmlParser.parseFromString(content, type);\n  }\n\n  /**\n   * Basic color resolver, returns a couple of color/bgColor depending on the given index\n   *\n   * If index is out of bond, repeat over the color sequence using modulo\n   *\n   * @param index the index of the colors to resolve\n   * @param colors all available colors\n   */\n  resolveColors(index: number, colors: { color: string | undefined, bgColor: string | undefined }[] = DefaultReaderOptions.colors)\n    : { color: string | undefined, bgColor: string | undefined } {\n    if (index < 0) {\n      return colors[0];\n    }\n    // If out of bond, use modulo to resolve the best color\n    return index >= colors.length ? colors[index % colors.length] : colors[index];\n  }\n\n  protected buildSeparator(date: string | null): XmlItem {\n    return {\n      th: { name: 'separator-header', content: date ?? '' },\n      cells: [{ name: 'separator', content: '' }],\n      bgColor: '#333', color: '#eee'\n    };\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { IXmlParser } from './xml-parser.interface';\nimport { XmlBasicParser } from './xml-basic.parser';\nimport { IXmlReaderOptions, XmlReaderOptions, XmlItem } from '../reader';\nimport { IFileHandler, XmlDefaultFileHandler } from '../file-handler';\n\n@Injectable()\nexport class HotmailArchiveParser extends XmlBasicParser implements IXmlParser {\n\n  private static readonly MESSAGE_TAG_NAME = 'Message';\n  private static readonly USER_ATT_NAME = 'FriendlyName';\n  private static readonly DEFAULT_USER_NAME = 'No name';\n  private static readonly DATE_ATT_NAME = 'Date';\n  private static readonly TIME_ATT_NAME = 'Time';\n\n  constructor(@Inject(XmlReaderOptions) protected readonly options: IXmlReaderOptions,\n              @Inject(XmlDefaultFileHandler) fileHandler: IFileHandler) {\n    super(fileHandler);\n  }\n\n  parse(sourceFile?: File): Promise<XmlItem[]> {\n    let promise = Promise.resolve<XmlItem[]>([]);\n    try {\n      promise = this.readFile(sourceFile)\n        .then((content: string) => this.buildDocument(content))\n        .then((doc: Document | null) => this.parseDocument(doc))\n        .catch((err: unknown) => {\n          console.log('Error at parsing the file ' + err);\n          return [];\n        });\n    } catch (err: unknown) {\n      console.error('Could not parse file content: ' + err);\n    }\n    return promise;\n  }\n\n  private parseDocument(document: Document | null): XmlItem[] {\n    if (!document) {\n      return [];\n    }\n    // Find messages in hotmail archive\n    const messages = document.getElementsByTagName(HotmailArchiveParser.MESSAGE_TAG_NAME);\n\n    let lastUser: string | undefined;\n    let lastDate: string | undefined;\n    let current: XmlItem;\n    // Array for caching all user names found in archive\n    const userNames: string[] = [];\n\n    return Array.from(messages).reduce((memo: XmlItem[], m: Element) => {\n      try {\n        // Extract the name of current cell author\n        const name = m.children[0].children[0].getAttribute(HotmailArchiveParser.USER_ATT_NAME)\n          ?? HotmailArchiveParser.DEFAULT_USER_NAME;\n\n        const sameUser = name === lastUser;\n        if (!userNames.includes(name)) {\n          userNames.push(name);\n        }\n        // Resolve colors for current user\n        const { color, bgColor } = this.resolveColors(userNames.indexOf(name), this.options.colors);\n        // Current date\n        const currentDate = m.getAttribute(HotmailArchiveParser.DATE_ATT_NAME);\n\n        if (currentDate && currentDate !== lastDate) {\n          memo.push(this.buildSeparator(currentDate));\n        }\n\n        current = {\n          th: {\n            name: 'header',\n            title: (sameUser && currentDate === lastDate) ?\n              `${m.getAttribute(HotmailArchiveParser.TIME_ATT_NAME)}` :\n              `${currentDate}|${m.getAttribute(HotmailArchiveParser.TIME_ATT_NAME)}`,\n            content: sameUser ? '' : name\n          },\n          cells: [\n            { name: 'message', content: m.children[2].textContent ?? '', },\n          ],\n          bgColor,\n          color,\n        };\n        // Save last user's name and date for next loop\n        lastUser = name;\n        lastDate = currentDate ?? undefined;\n      } catch (err: unknown) {\n        current = {\n          th: { name: 'error', content: 'Error in xml structure' + err },\n          cells: [],\n          color: 'red',\n        };\n      } finally {\n        memo.push(current);\n      }\n      return memo;\n    }, [])\n  }\n\n}\n","import { InjectionToken } from '@angular/core';\nimport { XmlItem } from '../reader';\n\n/**\n * Parsers for the xml files\n * To be provided within the main module, or through component input\n */\nexport interface IXmlParser {\n  parse(sourceFile?: File): Promise<XmlItem[]>;\n}\n\nexport const DefaultXmlParser = new InjectionToken<IXmlParser>('DefaultXmlParser');\n","import { Component, EventEmitter, Output } from '@angular/core';\n\n@Component({\n  selector: 'ngx-file-loader',\n  templateUrl: './file-loader.component.html',\n  styleUrls: ['./file-loader.component.less']\n})\nexport class FileLoaderComponent {\n\n  @Output() fileLoaded: EventEmitter<File | undefined> = new EventEmitter<File | undefined>();\n\n  onFileSelected(event: Event): void {\n    const target: HTMLInputElement | null = event.target as HTMLInputElement;\n    this.fileLoaded.emit((target && target.files?.length) ? target.files[0] : undefined);\n  }\n\n}\n","<input type=\"file\" class=\"file-input\"\n       (change)=\"onFileSelected($event)\" #fileUpload>\n\n<div class=\"file-upload\">\n  <button class=\"upload-btn\" (click)=\"fileUpload.click()\">📎</button>\n</div>\n","import { Component, Inject, Input, OnChanges, Optional, SimpleChanges } from '@angular/core';\nimport { IXmlParser, DefaultXmlParser } from './parsers';\nimport { XmlItem } from './reader';\n\n@Component({\n  selector: 'ngx-xml-parser',\n  templateUrl: './ngx-xml-parser.component.html',\n  styleUrls: ['./ngx-xml-parser.component.less' ]\n})\nexport class NgxXmlParserComponent implements OnChanges {\n\n  /**\n   * The parsed output to display\n   */\n  items: XmlItem[] = [];\n  /**\n   * Input file\n   */\n  @Input() source: File | undefined;\n  /**\n   * Optional custom xml parser - will override default if defined\n   */\n  @Input() customXmlParser: IXmlParser | undefined;\n\n  /**\n   * File name to display\n   */\n  get currentPath(): string {\n    return this.source?.name ?? 'Please select a file';\n  }\n\n  constructor(@Optional() @Inject(DefaultXmlParser) private readonly globalXmlParser: IXmlParser) {\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['source']) {\n      this.loadContent();\n    }\n  }\n\n  onFileSelected(file: File | undefined): void {\n    this.source = file ?? undefined;\n    this.loadContent();\n  }\n\n  async loadContent(): Promise<void> {\n    const parser = this.customXmlParser ?? this.globalXmlParser;\n    if (!parser) {\n      throw Error('Could not parse xml, no xml parser found');\n    }\n    this.items = await parser.parse(this.source);\n  }\n\n}\n","<div class=\"header\">\n  <div class=\"path\">{{currentPath}}</div>\n  <ngx-file-loader (fileLoaded)=\"onFileSelected($event)\"></ngx-file-loader>\n</div>\n<div class=\"body\">\n  <ngx-xml-reader [items]=\"items\"></ngx-xml-reader>\n</div>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { NgxXmlParserComponent } from './ngx-xml-parser.component';\nimport { DefaultReaderOptions, XmlReaderOptions, NgxXmlReaderModule } from './reader';\nimport { ParserConfig } from './config';\nimport { FileLoaderComponent } from './file-loader/file-loader.component';\nimport { XmlDefaultFileHandler, BaseFileHandler } from './file-handler';\n\n@NgModule({\n  declarations: [\n    NgxXmlParserComponent,\n    FileLoaderComponent\n  ],\n  imports: [NgxXmlReaderModule],\n  exports: [\n    NgxXmlParserComponent\n  ]\n})\nexport class NgxXmlParserModule {\n  static forRoot(config: ParserConfig): ModuleWithProviders<NgxXmlParserModule> {\n    return {\n      ngModule: NgxXmlParserModule,\n      providers: [\n        config.defaultParser,\n        config.customFileHandler ?? { provide: XmlDefaultFileHandler, useClass: BaseFileHandler },\n        { provide: XmlReaderOptions, useValue: config?.displayOptions ?? DefaultReaderOptions }\n      ]\n    }\n  }\n}\n","/*\n * Public API Surface of ngx-xml-parser\n */\n\nexport * from './lib/ngx-xml-parser.component';\nexport * from './lib/ngx-xml-parser.module';\nexport * from './lib/reader';\nexport * from './lib/config/parser-config';\nexport * from './lib/file-handler';\nexport * from './lib/parsers';\nexport * from './lib/config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxXmlReaderComponent","i2.FileLoaderComponent"],"mappings":"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"}