{"version":3,"sources":["jsdelivr-header.js","/npm/nodejs-console-table@1.0.5/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACKA,OAAO,UAAU,UAAY,SAAS,EAAO,GAC3C,OAAO,KAAK,UAAU,EAAG,GAAS,EAAc,KAAK,UAAU,EAAQ,EAAY,OACrF,EAGA,MAAM,MAEJ,KAAQ,CAAC,EACT,MAAQ,GACR,IAAQ,CAAC,EACT,MAAQ,KAER,WAAA,CAAa,EAAM,EAAO,CAAE,MAAQ,KAClC,KAAK,KAAO,EACZ,KAAK,KAAO,EAEZ,KAAK,iBACL,KAAK,aACL,KAAK,aACL,KAAK,YACP,CAGA,UAAA,GACE,KAAK,MAAM,SAAS,IAGlB,KAAK,IAAI,GAAS,EAElB,KAAK,KAAK,SAAS,IACjB,KAAK,IAAI,GACP,EAAK,IACL,EAAK,GAAO,WAAW,OAAS,KAAK,IAAI,GACzC,EAAK,GAAO,WAAW,OAEvB,KAAK,IAAI,EAAK,GACjB,GAGL,CAGA,cAAA,GACE,KAAK,KAAK,SAAS,IACjB,OAAO,KAAM,GAAO,SAAS,CAAC,EAAI,KAE1B,KAAK,MAAM,SAAS,IAAM,KAAK,MAAM,OAAQ,EAAO,EAAG,EAAG,GACjE,GAEL,CAGA,UAAA,GACE,MACE,EACA,GACE,CACF,CAAC,EAED,KAAK,MAAM,KAAK,GAAS,EAAM,GAAG,cAAgB,EAAM,MAAM,MAIhE,KAAK,MAAM,SAAS,CAAC,EAAO,IAAU,EAAO,GAAS,EAAM,KAG5D,KAAK,KAAK,QAAQ,EACpB,CAEA,UAAA,GAEE,KAAK,KAAK,SAAS,CAAC,EAAM,KAGT,IAAV,GAAc,KAAK,aAGxB,KAAK,UAAU,GAGA,IAAV,GAAe,IAAU,KAAK,KAAK,OAAS,GAAI,KAAK,YAAW,GAGzE,CAGA,UAAA,GAGE,KAAK,OAAS,IAEd,KAAK,MAAM,SAAS,IAClB,IAAM,IAAI,EAAI,EAAG,EAAI,KAAK,IAAI,GAAS,EAAG,IAAM,KAAK,OAAS,IAC9D,KAAK,OAAS,OAIhB,KAAK,OAAS,IAChB,CAGA,SAAA,CAAW,GAGT,KAAK,OAAS,IAEd,KAAK,MAAM,SAAS,IAGlB,GAAI,EAAK,GAAQ,CAGf,GAAK,KAAK,KAAK,OAAO,SAAS,IAAU,KAAK,KAAK,OAAO,SAAS,GAAS,CAE1E,IAAM,IAAI,EAAI,EAAG,EAAI,KAAK,IAAI,GAAS,EAAK,GAAO,WAAW,OAAQ,IAAM,KAAK,OAAS,IAE1F,KAAK,OAAS,IAAI,EAAK,GAAO,aAChC,KAGK,CAEH,KAAK,OAAS,IAAI,EAAK,GAAO,cAE9B,IAAM,IAAI,EAAI,EAAG,EAAI,KAAK,IAAI,GAAS,EAAK,GAAO,WAAW,OAAQ,IAAM,KAAK,OAAS,GAC5F,CAGA,KAAK,OAAS,GAEhB,KAGK,CAEH,IAAM,IAAI,EAAI,EAAG,EAAI,KAAK,IAAI,GAAS,EAAG,IAAM,KAAK,OAAS,IAE9D,KAAK,MAAQ,KAAK,MAAM,UAAU,KAAK,MAAM,OAAS,KAAK,MAAO,KAAK,IAAI,GAAS,EAAK,GAAI,KAE7F,KAAK,OAAS,GAChB,KAKF,KAAK,OAAS,IAChB,EAIF,OAAO,QAAU","file":"/npm/nodejs-console-table@1.0.5/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/nodejs-console-table@1.0.5/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*\r\n\r\nApp     : CLI-Table\r\nLanguage: Javascript\r\nCoder   : Kintaro azura chaniago\r\nFTD     : 09/10/2022\r\nLocale  : Indonesia, bengkulu\r\n\r\n*/\r\n\r\n/* Prototype string ini guna nya buat ganti karakter di dalam string berdasarkan index nya */\r\nString.prototype.replaceAt = function(index, replacement) {\r\n  return this.substring(0, index) + replacement + this.substring(index + replacement.length);\r\n}\r\n\r\n/* Class table guna nya buat bikin table */\r\nclass Table {\r\n\r\n  data  = {} /* Data nya harus berupa objek dalam array [{}] */\r\n  kunci = [] /* Kunci ini nanti diisi kuci-kunci objek */\r\n  max   = {} /* Panjang value maximal disimpen disini */\r\n  table = '\\n' /* Nilai awal text table */\r\n\r\n  constructor (data, opsi = { kanan : [] }) {\r\n    this.data = data\r\n    this.opsi = opsi\r\n    \r\n    this.kumpulkanKunci() /* Ngumpulin kunci-kunci */\r\n    this.buatKepala() /* Bikin kepala/header tabel */\r\n    this.temukanMax() /* Nyari value terpanjang */\r\n    this.susunTabel() /* Nyusun text tabel */\r\n  }\r\n\r\n  /* Nyari value terpanjang supaya colum table bisa diratain */\r\n  temukanMax () {\r\n    this.kunci.forEach( kunci => {\r\n\r\n      /* Nilai awal */\r\n      this.max[kunci] = 0\r\n  \r\n      this.data.forEach( data => {\r\n        this.max[kunci]\r\n        = data[kunci] /* Value nya ada gak? */\r\n        ? data[kunci].toString().length > this.max[kunci] /* Klo ada, panjangan value atau nilai sebelum nya? */\r\n        ? data[kunci].toString().length /* klo panjangan value */\r\n        : this.max[kunci] /* klo panjangan nilai sebelum nya */\r\n        : this.max[kunci] /* klo ga ada valu nya, pake nilai sebelum nya */\r\n      })\r\n  \r\n    })\r\n  }\r\n \r\n  /* Ngumpulin kunci-kunci objek untuk kepala table */\r\n  kumpulkanKunci () {\r\n    this.data.forEach( data => {\r\n      Object.keys( data ).forEach( (ok, index) => {\r\n        /* Klo kunci nya blom dimasukin ke daftar kunci, masukin */\r\n        if ( !this.kunci.includes(ok) ) this.kunci.splice( index, 0, ok )\r\n      })\r\n    })\r\n  }\r\n\r\n  /* Bikin kepala/header table */\r\n  buatKepala () {\r\n    const [\r\n      kepala, /* Inisialisasi variable kepala */\r\n      value\r\n    ] = [\r\n      {}, /* Nilai awal variable kepala */\r\n      /* Kepala/header table berbentuk kapital */\r\n      this.kunci.map( kunci => kunci[0].toUpperCase() + kunci.slice(1))\r\n    ]\r\n\r\n    /* Ngisi objek kepala */\r\n    this.kunci.forEach( (kunci, index) => kepala[kunci] = value[index] )\r\n\r\n    /* Masukin objek kepala di index 0 array */\r\n    this.data.unshift(kepala)\r\n  }\r\n\r\n  susunTabel () {\r\n    /* Nentuin letak garis dan isi */\r\n    this.data.forEach( (data, index) => {\r\n\r\n      /* Border atas kepala table */\r\n      if ( index === 0 ) this.tulisGaris()\r\n\r\n      /* Isi table */\r\n      this.tulisData(data)\r\n\r\n      /* Border bawah kepala dan badan table */\r\n      if ( index === 0 || index === this.data.length - 1 ) this.tulisGaris()\r\n\r\n    })\r\n  }\r\n\r\n  /* Cuma bikin garis buat border horizontal */\r\n  tulisGaris () {\r\n\r\n    /* Di awal kasih tanda + */\r\n    this.table += '+'\r\n\r\n    this.kunci.forEach( kunci => {\r\n      for ( let x = 0; x < this.max[kunci] + 2; x++ ) this.table += ('-') /* Sepanjang kunci, kasih - */\r\n      this.table += '+' /* Tiap ganti kunci, tambah + */\r\n    })\r\n    \r\n    /* Klo udah, bikin baris baru */\r\n    this.table += '\\n'\r\n  }\r\n\r\n  /* Nulis data di dalam badan/body table */\r\n  tulisData (data) {\r\n\r\n    /* Di awal kasih tanda | */\r\n    this.table += '|'\r\n\r\n    this.kunci.forEach( kunci => {\r\n\r\n      /* Klo ada value nya */\r\n      if (data[kunci]) {\r\n        \r\n        /* Klo ada opsi kanan, spasi dulu baru text */\r\n        if ( this.opsi.kanan?.includes(kunci) || this.opsi.right?.includes(kunci) ) {\r\n          /* Spasi dulu */\r\n          for ( let x = 0; x < this.max[kunci] - data[kunci].toString().length; x++ ) this.table += ' '\r\n          /* Baru text */\r\n          this.table += ` ${data[kunci].toString()} ` /* Menulis data dalam kotak table */\r\n        }\r\n\r\n        /* Default nya text dulu baru spasi */\r\n        else {\r\n          /* Text dulu */\r\n          this.table += ` ${data[kunci].toString()} ` /* Menulis data dalam kotak table */\r\n          /* Baru spasi */\r\n          for ( let x = 0; x < this.max[kunci] - data[kunci].toString().length; x++ ) this.table += ' '\r\n        }\r\n        \r\n        /* Tiap ganti kunci tambahin tanda | */\r\n        this.table += '|'\r\n\r\n      }\r\n\r\n      /* Klo ga ada value nya */\r\n      else {\r\n        /* Isi penuh sama spasi */\r\n        for ( let x = 0; x < this.max[kunci] + 2; x++ ) this.table += ' '\r\n        /* trus di tengah nya ganti satu spasi menjadi - */\r\n        this.table = this.table.replaceAt(this.table.length - Math.floor((this.max[kunci] / 2) + 2), '-')\r\n        /* ganti kunci lagi deh */\r\n        this.table += '|'\r\n      }\r\n\r\n    })\r\n\r\n    /* Klo kunci terakhir kasih tanda \\n */\r\n    this.table += '\\n'\r\n  }\r\n\r\n}\r\n\r\nmodule.exports = Table\r\n\r\n// /* Contoh data */\r\n// const data = [ /* Ini array */\r\n//   /* Isi array nya objek */\r\n//   { nama : 'Naruto uzumaki', istri : 'Hinata hyuga', gaji : 100000 },\r\n//   { nama : 'Sasuke uchiha', istri : 'Sakura haruno', gaji : 70000 },\r\n//   { nama : 'Kakashi hatake', istri : null, gaji : 50000 },\r\n//   { nama : 'Shikamaru nara', istri : 'Temari Kazekage', gaji : null }\r\n// ]\r\n\r\n// /* Mengubah data dengan tipe data objek di dalam array menjadi table dengan tipe data text */\r\n// const table = new Table(data).table\r\n\r\n// /* Menampilkan table dengan tipe data text */\r\n// console.log(table)\r\n"]}