{"_id":"@arwildo/jawascript","_rev":"5-8e2f229ac71e5a892965c25f9dbcc47f","name":"@arwildo/jawascript","dist-tags":{"latest":"1.2.4"},"versions":{"1.0.0":{"name":"@arwildo/jawascript","version":"1.0.0","keywords":["jawa","javascript","programming-language","esolang","fun"],"license":"MIT","_id":"@arwildo/jawascript@1.0.0","maintainers":[{"name":"arwildo","email":"npmjs@arwildo.com"}],"homepage":"https://github.com/arwildo/jawascript#readme","bugs":{"url":"https://github.com/arwildo/jawascript/issues"},"bin":{"jawa":"bin/jawa.js"},"dist":{"shasum":"bec33e06fedcadf71b95cc7f743789ae49348639","tarball":"https://registry.npmjs.org/@arwildo/jawascript/-/jawascript-1.0.0.tgz","fileCount":5,"integrity":"sha512-UYa+364A49Rwe3hoOyL/5FkSttzZ3I0VvGPXBP4Fa1wpvVOlNPGEPrx1/oE4Fsdpyi5f9Unn9/kIgJKhwZAwDw==","signatures":[{"sig":"MEUCIAWtPgbA527en1bbRLXTy8CVRJDFb6znSKf9PnDknUsyAiEA1EX+S/+TFjflKYPpnIHWcoH/AKpeqXaBRaHb5hfJt4w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3077},"type":"module","engines":{"node":">=14"},"gitHead":"f9996bcc1ad1cc5a9be27db8106373b8e4cadae7","_npmUser":{"name":"arwildo","email":"npmjs@arwildo.com"},"repository":{"url":"git+https://github.com/arwildo/jawascript.git","type":"git"},"_npmVersion":"11.11.0","description":"JavaScript nganggo basa Jawa","directories":{},"_nodeVersion":"25.8.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/jawascript_1.0.0_1788250843062_0.4647277789845332","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@arwildo/jawascript","version":"1.2.1","keywords":["jawa","javascript","programming-language","esolang","fun"],"license":"MIT","_id":"@arwildo/jawascript@1.2.1","maintainers":[{"name":"arwildo","email":"npmjs@arwildo.com"}],"homepage":"https://github.com/arwildo/jawascript#readme","bugs":{"url":"https://github.com/arwildo/jawascript/issues"},"bin":{"jawa":"bin/jawa.js"},"dist":{"shasum":"3bc2ce6445cbd8946c80a8155fba1cf822773451","tarball":"https://registry.npmjs.org/@arwildo/jawascript/-/jawascript-1.2.1.tgz","fileCount":5,"integrity":"sha512-5XGsjpqcfAj+eO6ByJ6JJpkWiSWppyvn0QvoPdgqTmg4Zvfhe+px/YFLOiMa6JIFgpfZAiak5qWuBoVcaJyVbg==","signatures":[{"sig":"MEQCIDPIPEKbagOuNvbImyFfitYox95WE+5sdnpR/MYIK0KLAiAxxxeGAv1NUHGKqDGt0vNz80jsS73iX7wSdTqt75R2Mg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8186},"type":"module","engines":{"node":">=14"},"gitHead":"2536277f179777b420b27e05934356fd552aa968","_npmUser":{"name":"arwildo","email":"npmjs@arwildo.com"},"repository":{"url":"git+https://github.com/arwildo/jawascript.git","type":"git"},"_npmVersion":"11.6.2","description":"JavaScript nganggo basa Jawa","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/jawascript_1.2.1_1788678405376_0.5029818134478254","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@arwildo/jawascript","version":"1.2.2","keywords":["jawa","javascript","programming-language","esolang","fun"],"license":"MIT","_id":"@arwildo/jawascript@1.2.2","maintainers":[{"name":"arwildo","email":"npmjs@arwildo.com"}],"homepage":"https://github.com/arwildo/jawascript#readme","bugs":{"url":"https://github.com/arwildo/jawascript/issues"},"bin":{"jawa":"bin/jawa.js"},"dist":{"shasum":"6456df34818e86418e0c547f40e3a6e39d592bea","tarball":"https://registry.npmjs.org/@arwildo/jawascript/-/jawascript-1.2.2.tgz","fileCount":20,"integrity":"sha512-tg+ceTBV+VcSYmU3ua8HLEFkKxh9I9hZ24wlQEKn6Xb07q5YlZcH54UfNpN0aJw9wwXsoU7RRsZ6gvcrq8nUEA==","signatures":[{"sig":"MEUCIA9Kd0DJZhQMx9C6WoAqW++qZwU6f0PN9iNA0gKR5ecjAiEAu1tP/orZvHCCT0rEsFnYE0UqswqlwO7OOoxd0H4Ozns=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41725},"type":"module","engines":{"node":">=14"},"gitHead":"dced3f8119392624814d731978796b716c738d3b","_npmUser":{"name":"arwildo","email":"npmjs@arwildo.com"},"repository":{"url":"git+https://github.com/arwildo/jawascript.git","type":"git"},"_npmVersion":"11.6.2","description":"JavaScript nganggo basa Jawa","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/jawascript_1.2.2_1788837557869_0.9415746269704834","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@arwildo/jawascript","version":"1.2.3","keywords":["jawa","javascript","programming-language","esolang","fun"],"license":"MIT","_id":"@arwildo/jawascript@1.2.3","maintainers":[{"name":"arwildo","email":"npmjs@arwildo.com"}],"homepage":"https://github.com/arwildo/jawascript#readme","bugs":{"url":"https://github.com/arwildo/jawascript/issues"},"bin":{"jawa":"bin/jawa.js"},"dist":{"shasum":"b3b99e283f19ba53a0effb7a90bf5e0267f3aae8","tarball":"https://registry.npmjs.org/@arwildo/jawascript/-/jawascript-1.2.3.tgz","fileCount":20,"integrity":"sha512-LFX0kGCZEp9nulISj88KQsLS4UfIjI61IDQYsi9gZbpmndS5GuzoTC5ADC2qE2Z44hC+y/NtCNVyXH5XeXEP+A==","signatures":[{"sig":"MEUCIExLp2u0sb/lBA2dwAYOM8smBMDrr4G8mm+A0hatfqRQAiEA+5vzuh/UMeJbDiezztaGadFnZ2CMCmu9ahBE3g3d4O8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41707},"type":"module","engines":{"node":">=14"},"gitHead":"bb5b52078de16b0e9b0eb15f4b5b6432dc2bb510","_npmUser":{"name":"arwildo","email":"npmjs@arwildo.com"},"repository":{"url":"git+https://github.com/arwildo/jawascript.git","type":"git"},"_npmVersion":"11.11.0","description":"JavaScript nganggo basa Jawa","directories":{},"_nodeVersion":"25.8.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/jawascript_1.2.3_1788929299591_0.7106778713666273","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"_id":"@arwildo/jawascript@1.2.4","bin":{"jawa":"bin/jawa.js"},"bugs":{"url":"https://github.com/arwildo/jawascript/issues"},"dist":{"shasum":"495a68a4eefd8fe32f73a31de3f65caa55f3fe7d","tarball":"https://registry.npmjs.org/@arwildo/jawascript/-/jawascript-1.2.4.tgz","fileCount":20,"integrity":"sha512-/2k819bT3xbABzAa4DQlI/Ky4fvRy+mAGbdPi+9XDhdbQmh2vrIvQwBrqxhiiKNkWUOb9usCooxIQhamaxOVdw==","signatures":[{"sig":"MEYCIQDp9azS5+MoRVEN7vjRRN7oIDK+bAHZJdv+aSH2/r+1tQIhALEtoaYXKOStmXqNrR+1fcd6wZKcX1DK0UYBpP8i29pJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCRrOGFU8GGNPGeivqrfIt21L1JCeknP0zDVIhFZkMmYAIgcaEZQcvbf5P991LRly729pHFLYWJFXGyM83hOQSwkrU="}],"unpackedSize":41651},"name":"@arwildo/jawascript","type":"module","engines":{"node":">=14"},"gitHead":"65ae6049c5da59d0d51c1559dd76665b91915f4f","license":"MIT","version":"1.2.4","_npmUser":{"name":"arwildo","email":"npmjs@arwildo.com"},"homepage":"https://github.com/arwildo/jawascript#readme","keywords":["jawa","javascript","programming-language","esolang","fun"],"repository":{"url":"git+https://github.com/arwildo/jawascript.git","type":"git"},"_npmVersion":"11.11.0","description":"JavaScript nganggo basa Jawa","directories":{},"maintainers":[{"name":"arwildo","email":"npmjs@arwildo.com"}],"_nodeVersion":"25.8.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/jawascript_1.2.4_1789285510963_0.4261496616523093"}}},"time":{"created":"2026-09-01T08:20:42.786Z","modified":"2026-09-13T07:45:11.311Z","1.0.0":"2026-09-01T08:20:43.191Z","1.2.1":"2026-09-06T07:06:45.519Z","1.2.2":"2026-09-08T03:19:17.997Z","1.2.3":"2026-09-09T04:48:19.741Z","1.2.4":"2026-09-13T07:45:11.052Z"},"bugs":{"url":"https://github.com/arwildo/jawascript/issues"},"license":"MIT","homepage":"https://github.com/arwildo/jawascript#readme","keywords":["jawa","javascript","programming-language","esolang","fun"],"repository":{"url":"git+https://github.com/arwildo/jawascript.git","type":"git"},"description":"JavaScript nganggo basa Jawa","maintainers":[{"name":"arwildo","email":"npmjs@arwildo.com"}],"readme":"<p align=center><img src=\"https://raw.githubusercontent.com/arwildo/jawascript/refs/heads/main/jawascript.png\" width=\"86\"></img></p> \n\n# JawaScript\n> JavaScript nganggo basa Jawa.\n\nJawaScript adalah **transpiler** kecil yang mengubah berkas `.jawa` menjadi JavaScript melalui tiga tahap: **tokenizer → parser → emitter**, lalu mengeksekusinya dengan Node.js. Versi ini tidak lagi memakai regex pengganti kata sederhana — bahasa diparsing sungguhan sehingga string/komentar tak pernah salah diubah, dan kamus kata terpusat di satu berkas.\n\n## Install\n\n```bash\nnpm install -g @arwildo/jawascript\n```\n\n## Usage\n\nBuat file `hello.jawa`:\n\n```jawa\nono x = 10;\nono y = 20;\n\ntampilno(x + y);\n\nyen (x < y) {\n    tampilno(\"x luwih cilik\");\n} ora {\n    tampilno(\"x luwih gedhe\");\n}\n```\n\nJalankan:\n\n```bash\njawa hello.jawa\n```\n\nOutput:\n\n```\n30\nx luwih cilik\n```\n\n## Contoh\n\n```jawa\nkelas Kethek {\n    constructor(jeneng) {\n        iki.jeneng = jeneng;\n    }\n\n    mangan(kg) {\n        tampilno(iki.jeneng + \" mangan \" + kg + \" kg\");\n    }\n}\n\nono si = anyar Kethek(\"Kiki\");\nsi.mangan(2);\n\nsambil fungsi jalur() {\n    enteni janji((selesai) => setTimeout(selesai, 10));\n    tampil.serat(\"selesai\");\n}\n\njalur();\n```\n\nContoh lain tersedia di folder `examples/`: `oop`, `async`, `error`, `switch`, `fors`, `console`, `web` (butuh browser).\n\n## Keyword\n\nSemua kata terpusat di **`src/keywords.js`** — untuk ganti/tambah kata cukup edit berkas itu saja. Tabel ringkas juga ada di [keywords.md](keywords.md).\n\n**Dasar**\n\n| Jawa          | JavaScript    |\n| ------------- | ------------- |\n| `ono`         | `let`         |\n| `paten`       | `const`       |\n| `tampilno`    | `console.log` |\n| `yen`         | `if`          |\n| `ora yen`  | `else if`     |\n| `ora`      | `else`        |\n| `nganti`      | `while`       |\n| `kanggo`      | `for`         |\n| `saka`        | `of` (`for...of`) |\n| `ing`         | `in` (`for...in`) |\n| `fungsi`      | `function`    |\n| `balekno`     | `return`      |\n| `mandheg`     | `break`       |\n| `lanjutna`    | `continue`    |\n| `buang`       | `throw`       |\n| `bener`       | `true`        |\n| `salah`       | `false`       |\n\n**Operator kata**\n\nSelain simbol JS (`==`, `===`, `=`, `!`, `&&`, `||`, `<`, `>`), operator juga bisa ditulis dalam kata:\n\n| Jawa           | JavaScript |\n| -------------- | ---------- |\n| `lan`          | `&&`       |\n| `utawa`        | `\\|\\|`     |\n| `padhaKaro`    | `===`      |\n| `oraPadha`     | `!==`      |\n| `gedhePadha`   | `>=`       |\n| `cilikPadha`   | `<=`       |\n| `gedhe`        | `>`        |\n| `cilik`        | `<`        |\n\n**Fungsi built-in**\n\n| Jawa                | JavaScript  |\n| ------------------- | ----------- |\n| `teksDadiInteger`   | `parseInt`  |\n| `teksDadiDesimal`   | `parseFloat` |\n\n**Kelas & OOP**\n\n| Jawa        | JavaScript |\n| ----------- | ---------- |\n| `kelas`     | `class`    |\n| `warisan`   | `extends`  |\n| `anyar`     | `new`      |\n| `iki`       | `this`     |\n| `konstruktor` | `constructor` |\n\n**Async**\n\n| Jawa       | JavaScript |\n| ---------- | ---------- |\n| `sambil`  | `async`    |\n| `enteni`   | `await`    |\n\n**Error handling**\n\n| Jawa        | JavaScript |\n| ----------- | ---------- |\n| `nyoba`     | `try`      |\n| `nompo`  | `catch`    |\n| `akhire` | `finally`  |\n| `buang`     | `throw`    |\n\n**Lainnya**\n\n| Jawa     | JavaScript  |\n| -------- | ----------- |\n| `milih`   | `switch`    |\n| `kasus`   | `case`      |\n| `asale`   | `default`   |\n| `suwung`  | `null`      |\n| `rajelas` | `undefined` |\n\n> **Catatan:** operator memakai simbol JS aslinya dan tidak diterjemahkan — `==`, `===`, `!==`, `!=`, `!`, `=`, `&&`, `||`, `<`, `>`, dst. ditulis persis seperti JavaScript, tapi ada juga padanan katanya (`lan`, `utawa`, `padhaKaro`, dst., lihat tabel di atas). Arrow `=>` juga dipakai apa adanya, misal `(e) => tampilno(e)`.\n>\n> **Belum didukung:** `typeof`, `instanceof`, template literal, destructuring, getter/setter.\n\n### Member: console & DOM\n\nKamus member (`MEMBERS` di `src/keywords.js`) memetakan objek/method umum:\n\n| Jawa                  | JavaScript            |\n| --------------------- | --------------------- |\n| `tampil.serat`        | `console.log`         |\n| `tampil.ngadat`       | `console.error`       |\n| `tampil.awas`         | `console.warn`        |\n| `tampil.kabar`        | `console.info`        |\n| `tampil.tabel`        | `console.table`       |\n| `dokumen`             | `document`            |\n| `layar`               | `window`              |\n| `janji`               | `Promise`             |\n| `kirim`               | `fetch`               |\n| `jupuk`               | `querySelector`       |\n| `jupukKabeh`          | `querySelectorAll`    |\n| `jupukId`             | `getElementById`      |\n| `gawe`                | `createElement`       |\n| `tempel`              | `appendChild`         |\n| `rungokno`            | `addEventListener`    |\n| `teksDadiInteger`     | `parseInt`            |\n| `teksDadiDesimal`     | `parseFloat`          |\n| `konstruktor`         | `constructor`         |\n\nContoh: `dokumen.jupuk(\"#tombol\").rungokno(\"click\", (e) => { ... })` → `document.querySelector(\"#tombol\").addEventListener(\"click\", ...)`.\n\nContoh di `examples/` yang memakai DOM (`web.jawa`) memerlukan **browser**; yang lain berjalan di Node.js.\n\n## Cara Kerja\n\n1. **Tokenizer** (`src/tokenizer.js`) memecah `.jawa` menjadi token (identifier, keyword, angka, string, operator). Kata yang mirip dicocokkan paling panjang dulu, misal `tampilno` vs `tampil`, supaya tidak keliru.\n2. **Parser** (`src/parser.js`) membangun AST dengan *recursive descent*. Percabangan, perulangan, fungsi, class/OOP, async/await, error handling, switch, dan object/array benar-benar diparsing.\n3. **Emitter** (`src/emitter.js`) mengubah AST menjadi JavaScript, lalu dieksekusi.\n\nMengganti kata cukup di `src/keywords.js`; tokenizer/parser/emitter otomatis mengikuti tanpa perubahan lain.\n\nJawaScript adalah project eksperimen yang dibuat untuk bersenang senang dan belajar bahasa jawa secara secara programming.\n","readmeFilename":"README.md"}