npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

kinzoku-bat

v0.0.7

Published

A language

Downloads

1

Readme

kinzoku-bat

kinzoku-bat とは?

S 式系 AltJS です。

単純なトランスパイルルールですが、コードを動的に変更する機能を持ち、主にフレームワーク上でのプログラミングで、高速かつ快適に開発を進めることができるように設計されています。通常、JIS キーボードで Shift キーを押さずにプログラミングできるはずです。

kbconfig.js の作成

kbconfig.js はサーバーのブートストラップとなる部分です。

// @ts-check
const { Service } = require('./dist/index')
// 使用するプラグインの呼び出し
const core = require('kb-plugin-core')
const express = require('kb-plugin-express')

// 使用するプラグインの呼び出し
const config = new Service([core.default, express.default])

module.exports = config

サーバーの起動

kbconfig.jsを作成し、kbcliで起動します。

変換

実行可能リスト

リストは普通、関数に変換されます。ただし、開き括弧と最初の要素の間の空白類はあってはなりません。

kinzoku-bat では、()[]{}の三つの括弧が使えます。
括弧は、すべて同様に処理されます。

(console.log "Hello, World")
[console.log "Hello, World with square bracket!"]
{console.log "Hello, World with curly bracket!"}
console.log('Hello, World')
console.log('Hello, World with square bracket!')
console.log('Hello, World with curly bracket!')
[ console.log "Hello, World" ]

実行不可能リスト

S 式の開き括弧と最初の要素の間に空白類があると、配列として処理されます。

( console.log "If there's spaces between beginning bracket and first element, convert as a array")
;[
  console.log,
  "If there's spaces between beginning bracket and first element, convert as a array"
]

セミコロンセパレーター

リストの内部でセミコロンを挟むと、そのセミコロンで分割されて入れ子リストになります。

実行可能リストの場合実行可能リストに、実行不可能リストの場合実行不可能リストになります。

[
1 2 3;
4 5 6;
7 8 9;
]
(console.log + 1 2; - 2 1;)
;[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
console.log(1 + 2, 2 - 1)

ハイフンキャピタル

ケバブケース(kebab-case)でキャメルケース(camelCase)の命名を記述するために、-[a-z][A-Z]に変換する機能があります。

[console.log [window.to-string]]
console.log(window.toString())

即時展開マクロ

akameco/s2s を参考にした即時展開マクロの機能を持ちます。

具体的にはパッケージの作成が必要です。package/plugin-express を参照してください。

ボイラープレート

特定のフォルダに特定の形式の名前のファイルを作成すると、ファイルにボイラープレートを展開します。

(importFrom [
  BoilerplatePluginDefinable
  Plugin
] "kinzoku-bat")
(export (const routes (new
  BoilerplatePluginDefinable
  "Routes"
  [ "routes/**.kbjs" ]
  {λ [ filename ]
    (return `{do
      (importFrom express "express")
      (const router (express.Router ))
      (router.get "/" {λ [ req res next ]
        (res.render "index" [ title: "Express"; ])
      })
      (exportDefault router)
    })
  }
)))
(exportDefault (new Plugin "express" [ routes ]))

とプラグイン側で指定すると、

routes/**.kbjsに新ファイルができたとき、

(importFrom express "express")
(const router (express.Router ))
(router.get "/" {λ [ req res next ]
  (res.render "index" [ title: "Express"; ])
})
(exportDefault router)

というボイラープレートを展開します。

quasiquote 機能と do 文により、簡単に記述することができます。

即時展開インライン関数

特定の関数をインライン関数として予め指定することで、難しい記述を一瞬で書くことができます。

(importFrom [
  InlineFunctionPluginDefinable
  Plugin
] "kinzoku-bat")
(export (const rest (new
  InlineFunctionPluginDefinable
  "REST"
  "rest"
  {λ [ env router ]
    (return `{do
      (,router.get "/" {λ [ req res next ]
        (res.send "get")
      })
      (,router.post "/" {λ [ req res next ]
        (res.send "post")
      })
      (,router.put "/" {λ [ req res next ]
        (res.send "put")
      })
      (,router.delete "/" {λ [ req res next ]
        (res.send "delete")
      })
    })
  }
)))

(exportDefault (new Plugin "express" [ rest ]))

とプラグイン側で指定すると、

(rest routerA)

という関数がコードにあったとき、

(routerA.get "/" {λ [ req res next ]
  (res.send "get")
})
(routerA.post "/" {λ [ req res next ]
  (res.send "post")
})
(routerA.put "/" {λ [ req res next ]
  (res.send "put")
})
(routerA.delete "/" {λ [ req res next ]
  (res.send "delete")
})

という処理で置換されます。