{"version":3,"file":"ngx-json-viewer.mjs","sources":["../../src/ngx-json-viewer/ngx-json-viewer.component.ts","../../src/ngx-json-viewer/ngx-json-viewer.component.html","../../src/ngx-json-viewer.module.ts","../../ngx-json-viewer.ts"],"sourcesContent":["import { Component, OnChanges, Input } from '@angular/core';\n\nexport interface Segment {\n  key: string;\n  value: any;\n  type: undefined | string;\n  description: string;\n  expanded: boolean;\n}\n\n@Component({\n  selector: 'ngx-json-viewer',\n  templateUrl: './ngx-json-viewer.component.html',\n  styleUrls: ['./ngx-json-viewer.component.scss']\n})\nexport class NgxJsonViewerComponent implements OnChanges {\n\n  @Input() json: any;\n  @Input() expanded = true;\n  @Input() depth = -1;\n\n  @Input() _currentDepth = 0;\n\n  segments: Segment[] = [];\n\n  ngOnChanges() {\n    this.segments = [];\n\n    // remove cycles\n    this.json = this.decycle(this.json);\n\n    if (typeof this.json === 'object') {\n      Object.keys(this.json).forEach(key => {\n        this.segments.push(this.parseKeyValue(key, this.json[key]));\n      });\n    } else {\n      this.segments.push(this.parseKeyValue(`(${typeof this.json})`, this.json));\n    }\n  }\n\n  isExpandable(segment: Segment) {\n    return segment.type === 'object' || segment.type === 'array';\n  }\n\n  toggle(segment: Segment) {\n    if (this.isExpandable(segment)) {\n      segment.expanded = !segment.expanded;\n    }\n  }\n\n  private parseKeyValue(key: any, value: any): Segment {\n    const segment: Segment = {\n      key: key,\n      value: value,\n      type: undefined,\n      description: '' + value,\n      expanded: this.isExpanded()\n    };\n\n    switch (typeof segment.value) {\n      case 'number': {\n        segment.type = 'number';\n        break;\n      }\n      case 'boolean': {\n        segment.type = 'boolean';\n        break;\n      }\n      case 'function': {\n        segment.type = 'function';\n        break;\n      }\n      case 'string': {\n        segment.type = 'string';\n        segment.description = '\"' + segment.value + '\"';\n        break;\n      }\n      case 'undefined': {\n        segment.type = 'undefined';\n        segment.description = 'undefined';\n        break;\n      }\n      case 'object': {\n        // yea, null is object\n        if (segment.value === null) {\n          segment.type = 'null';\n          segment.description = 'null';\n        } else if (Array.isArray(segment.value)) {\n          segment.type = 'array';\n          segment.description = 'Array[' + segment.value.length + '] ' + JSON.stringify(segment.value);\n        } else if (segment.value instanceof Date) {\n          segment.type = 'date';\n        } else {\n          segment.type = 'object';\n          segment.description = 'Object ' + JSON.stringify(segment.value);\n        }\n        break;\n      }\n    }\n\n    return segment;\n  }\n\n  private isExpanded(): boolean {\n    return (\n      this.expanded &&\n      !(this.depth > -1 && this._currentDepth >= this.depth)\n    );\n  }\n\n  // https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n  private decycle(object: any) {\n    const objects = new WeakMap();\n    return (function derez(value, path) {\n      let old_path;\n      let nu: any;\n\n      if (\n        typeof value === 'object'\n        && value !== null\n        && !(value instanceof Boolean)\n        && !(value instanceof Date)\n        && !(value instanceof Number)\n        && !(value instanceof RegExp)\n        && !(value instanceof String)\n      ) {\n        old_path = objects.get(value);\n        if (old_path !== undefined) {\n          return {$ref: old_path};\n        }\n        objects.set(value, path);\n\n        if (Array.isArray(value)) {\n          nu = [];\n          value.forEach(function (element, i) {\n            nu[i] = derez(element, path + '[' + i + ']');\n          });\n        } else {\n          nu = {};\n          Object.keys(value).forEach(function (name) {\n            nu[name] = derez(\n              value[name],\n              path + '[' + JSON.stringify(name) + ']'\n            );\n          });\n        }\n        return nu;\n      }\n      return value;\n    }(object, '$'));\n  }\n}\n","<section class=\"ngx-json-viewer\">\n  <section\n    *ngFor=\"let segment of segments\"\n    [ngClass]=\"['segment', 'segment-type-' + segment.type]\">\n    <section\n      (click)=\"toggle(segment)\"\n      [ngClass]=\"{\n        'segment-main': true,\n        'expandable': isExpandable(segment),\n        'expanded': segment.expanded\n      }\">\n      <div *ngIf=\"isExpandable(segment)\" class=\"toggler\"></div>\n      <span class=\"segment-key\">{{ segment.key }}</span>\n      <span class=\"segment-separator\">: </span>\n      <span *ngIf=\"!segment.expanded || !isExpandable(segment)\" class=\"segment-value\">{{ segment.description }}</span>\n    </section>\n    <section *ngIf=\"segment.expanded && isExpandable(segment)\" class=\"children\">\n      <ngx-json-viewer [json]=\"segment.value\" [expanded]=\"expanded\" [depth]=\"depth\" [_currentDepth]=\"_currentDepth+1\"></ngx-json-viewer>\n    </section>\n  </section>\n</section>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { NgxJsonViewerComponent } from './ngx-json-viewer/ngx-json-viewer.component';\n\n@NgModule({\n  imports: [\n    CommonModule\n  ],\n  declarations: [\n    NgxJsonViewerComponent\n  ],\n  exports: [\n    NgxJsonViewerComponent\n  ]\n})\nexport class NgxJsonViewerModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}