{"_id":"@asnl/kotlin","name":"@asnl/kotlin","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@asnl/kotlin","version":"1.0.0","description":"Write a subset of Kotlin in <script type=\"text/kotlin\"> tags or .js files and run it directly in the browser — no build step, no compiler install.","main":"src/kotlin.js","browser":"src/kotlin.js","unpkg":"src/kotlin.js","scripts":{"test":"node test.js"},"keywords":["kotlin","kotlin.js","transpiler","browser","script","javascript","compiler"],"author":{"name":"asnl"},"license":"ISC","repository":{"type":"git","url":"git+https://github.com/asnlx/kotlin-js.git"},"homepage":"https://github.com/asnlx/kotlin-js#readme","engines":{"node":">=12"},"_id":"@asnl/kotlin@1.0.0","bugs":{"url":"https://github.com/asnlx/kotlin-js/issues"},"_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-5cTp0J/xifYwInrl3iQkGnrtTUX0CDjU8VMJubUw/VHYYImJYe46iCqmOy5r+Y3Nr6v1gucjQCyF7zbXRBqmbQ==","shasum":"0ce00dbcefe45364c1e8724047a876257dc4f6cb","tarball":"https://registry.npmjs.org/@asnl/kotlin/-/kotlin-1.0.0.tgz","fileCount":8,"unpackedSize":73416,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBjLPWxSMjvAq2wxhW8YVIE3OkhLzJX5kTMW95sgSguJAiACgSHRc8RTksqAQAJjiHK5gsHauZzvPirV9ClldhLVFg=="}]},"_npmUser":{"name":"asnl","email":"asulan.masanov@gmail.com"},"directories":{},"maintainers":[{"name":"asnl","email":"asulan.masanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/kotlin_1.0.0_1788085213379_0.09773931598055197"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-30T10:20:13.228Z","1.0.0":"2026-08-30T10:20:13.532Z","modified":"2026-08-30T10:20:13.735Z"},"maintainers":[{"name":"asnl","email":"asulan.masanov@gmail.com"}],"description":"Write a subset of Kotlin in <script type=\"text/kotlin\"> tags or .js files and run it directly in the browser — no build step, no compiler install.","homepage":"https://github.com/asnlx/kotlin-js#readme","keywords":["kotlin","kotlin.js","transpiler","browser","script","javascript","compiler"],"repository":{"type":"git","url":"git+https://github.com/asnlx/kotlin-js.git"},"author":{"name":"asnl"},"bugs":{"url":"https://github.com/asnlx/kotlin-js/issues"},"license":"ISC","readme":"# Kotlin.js\r\n\r\nПишите код на Kotlin прямо в `<script>` или в `.js`-файле — библиотека\r\nтранспилирует его в JavaScript и выполняет в браузере. Никакой сборки,\r\nникакого JVM/Kotlin-компилятора — только один файл `kotlin.js`.\r\n\r\n```html\r\n<script src=\"kotlin.js\"></script>\r\n\r\n<script type=\"text/kotlin\">\r\n    fun main() {\r\n        val name = \"World\"\r\n        println(\"Hello, $name!\")\r\n    }\r\n</script>\r\n```\r\n\r\n> ⚠️ Тег обязательно должен быть `<script type=\"text/kotlin\">`, а не\r\n> `type=\"kotlin\"` — так требует HTML-спецификация для нестандартных типов\r\n> скриптов (браузер должен получить `type` со слэшем, иначе тег будет\r\n> проигнорирован как `text/javascript` по умолчанию).\r\n\r\n## Установка\r\n\r\n```bash\r\nnpm install @asknl/kotlin\r\n```\r\n\r\nили просто подключите файл из `node_modules/@asnl/kotlin/src/kotlin.js`\r\n(или через unpkg/jsDelivr):\r\n\r\n```html\r\n<script src=\"https://unpkg.com/@asnl/kotlin/src/kotlin.js\"></script>\r\n```\r\n\r\n## Использование\r\n\r\n### 1. Inline `<script type=\"text/kotlin\">`\r\n\r\n```html\r\n<script src=\"kotlin.js\"></script>\r\n<script type=\"text/kotlin\">\r\n    fun main() {\r\n        println(\"Работает!\")\r\n    }\r\n</script>\r\n```\r\n\r\nБиблиотека сама сканирует документ после загрузки и выполняет каждый такой\r\nтег по порядку.\r\n\r\n### 2. Внешний `.js`-файл с Kotlin-кодом внутри\r\n\r\nФайл может называться как угодно (например `app.kt.js`), физическое\r\nрасширение `.js` значения не имеет — важен `type` тега, который его\r\nподключает:\r\n\r\n```html\r\n<script type=\"text/kotlin\" src=\"app.kt.js\"></script>\r\n```\r\n\r\n```kotlin\r\n// app.kt.js\r\nfun main() {\r\n    val nums = listOf(1, 2, 3)\r\n    println(nums.map { it * it })\r\n}\r\n```\r\n\r\n### 3. Программный API\r\n\r\n```html\r\n<script src=\"kotlin.js\"></script>\r\n<script>\r\n    // Транспилировать в текст JS, ничего не выполняя:\r\n    const js = KotlinJS.transpile('val x = 5\\nprintln(x)');\r\n\r\n    // Транспилировать и сразу выполнить:\r\n    KotlinJS.run('println(\"Hi from JS-land\")');\r\n</script>\r\n```\r\n\r\n### 4. Node.js / бандлеры\r\n\r\n```js\r\nconst KotlinJS = require('kotlin.js');\r\nKotlinJS.transpile('fun main() { println(\"hi\") }');\r\n```\r\n\r\n## Что поддерживается\r\n\r\n| Kotlin | Пример | Во что превращается |\r\n|---|---|---|\r\n| `val` / `var` | `val x = 5` | `const x = 5` / `let x = 5` |\r\n| Строковые шаблоны | `\"Hi $name, ${a+b}\"` | `` `Hi ${name}, ${a+b}` `` |\r\n| Функции | `fun f(x: Int): Int { ... }` | `function f(x) { ... }` |\r\n| Функция-выражение | `fun sq(x: Int) = x*x` | `function sq(x) { return x*x; }` |\r\n| `if` / `else` | как в Kotlin | без изменений (синтаксис совпадает) |\r\n| `when` | `when (x) { 1 -> ...; else -> ... }` | цепочка `if / else if` |\r\n| `for (i in a..b)` | диапазон | классический `for` |\r\n| `for (i in a until b)` / `downTo` | | `for` с `<` / `--` |\r\n| `for (x in list)` | | `for...of` |\r\n| Классы + первичный конструктор | `class P(val x: Int)` | ES6 `class` с `constructor` |\r\n| `data class` | генерируется `toString()` | обычный класс + `toString()` |\r\n| Лямбды | `list.map { it * 2 }` | `list.map((it) => { return it*2; })` |\r\n| `listOf` / `mutableListOf` / `arrayOf` | | обычный массив |\r\n| `setOf` / `mapOf` | | `Set` / `Map` |\r\n| Элвис-оператор `?:` | `a ?: b` | `a ?? b` |\r\n| `println` / `print` | | `console.log` |\r\n| `.size` | | `.length` |\r\n| `package` / `import` | | игнорируются |\r\n\r\nПри наличии `fun main()` в коде библиотека вызывает его автоматически\r\nпосле транспиляции — точно так же, как это делает настоящий Kotlin.\r\n\r\n## Ограничения\r\n\r\nЭто **транспайлер подмножества Kotlin**, а не полноценный компилятор\r\nKotlin/JS от JetBrains. Он написан как набор трансформаций текста и\r\nрассчитан на «бытовой» код — учебные примеры, демо, прототипы. Он **не**\r\nподдерживает: null-safety на уровне типов (ошибки будут только в\r\nрантайме, как в обычном JS), sealed-классы, корутины, generics-инференс,\r\nsealed/enum классы, области видимости `companion object`, аннотации,\r\nрефлексию, стандартную библиотеку Kotlin целиком (доступны только\r\n`listOf/mutableListOf/arrayOf/setOf/mapOf`, `println/print`, `.size`,\r\nконструкции `..`/`until`/`downTo`). Сложные вложенные лямбды и `when` с\r\nнетривиальными шаблонами (`is Type`, диапазоны) поддерживаются на\r\nбазовом уровне — для чего-то более серьёзного используйте официальный\r\nKotlin/JS.\r\n\r\n## Разработка\r\n\r\n```bash\r\nnpm test   # прогоняет test.js — набор сквозных проверок транспайлера\r\n```\r\n\r\n## Лицензия\r\n\r\nISC","readmeFilename":"README.md","_rev":"1-b6583985c027fa261ee0f399debb3781"}