[Babel] babel-preset-jsdoc-to-assert で JSDoc から assertion を自動生成する

babel env option を利用して、開発時に jsdoc-to-assert させる。

ESLintで静的にJSDocのコメントをチェックできるvalid-jsdocとbabel-plugin-jsdoc-to-assertを合わせて使うようなイメージで書いています。

インストール

preset をインストールする。

% npm install --save-dev babel-preset-jsdoc-to-assert

.babelrc に jsdoc-to-assert を設定する。

.babelrc
{
  "presets": [
    "es2015"
  ],
  "env": {
    "development": {
      "presets": [
        "power-assert",
        "jsdoc-to-assert"
      ]
    },
    "production": {
      "plugins": [
        "babel-plugin-unassert"
      ]
    }
  }
}

実行

前回までは、assert を直接 lib ファイルに書いた状態だった。

上述のサンプルコードであれば、下記3行が不要になる。

const assert = require('assert');
assert(typeof x === 'number');
assert(typeof y === 'number');

DriftwoodJP/sandbox-es6 であれば、BABEL_ENV=development babelify のような形でオプションを渡せば、jsdoc-to-assert が有効となる。

以下が生成された。

if (!(typeof x === "number")) {
  console.assert(typeof x === "number", 'Expected type: @param {number} x\nActual value:', x, '\nFailure assertion: typeof x === "number"');
}
if (!(typeof y === "number")) {
  console.assert(typeof y === "number", 'Expected type: @param {number} y\nActual value:', y, '\nFailure assertion: typeof y === "number"');
}

以下にまとめた。

補遺

JavaScript の型チェックといえば Flow や TypeScript だが、前者は型の定義ファイルが必要で、後者は言語自体を拡張しているため導入コストが少々、高い。