From db6626718ff30f9c91c9fa87891401a718aa4c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Mon, 2 Oct 2017 22:29:49 +0200 Subject: [PATCH] Document babel helpers (#6364) [skip ci] --- packages/babel-helpers/README.md | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/packages/babel-helpers/README.md b/packages/babel-helpers/README.md index 2614f1160e..49c4be9c3c 100644 --- a/packages/babel-helpers/README.md +++ b/packages/babel-helpers/README.md @@ -10,6 +10,8 @@ npm install --save-dev babel-helpers ## Usage +Direct: + ```js import * as helpers from 'babel-helpers'; import * as t from 'babel-types'; @@ -19,3 +21,36 @@ const typeofHelper = helpers.get('typeof'); t.isExpressionStatement(typeofHelper); // true ``` + +Inside a plugin: + +```js +export default { + visitor: { + UnaryExpression(path) { + // The .addHelper function adds, if needed, the helper to the file + // and returns an expression which references the helper + const typeofHelper = this.addHelper("typeof"); + t.isExpression(typeofHelper); // true + } +}; +``` + +## Defining Helpers + +> **NOTE**: This package is only meant to be used by the packages inluded in this repository. There is currently no way for third-party plugins to define an helper. + +Helpers are defined in the `src/helpers.js` file, and they must be valid modules which follow these guidelines: + - They must have a default export, which is their entry-point. + - They can import other helpers, exclusively by using default imports. + - They can't have named exports. + +```js +helpers.customHelper = defineHelper(` + import dep from "dependency"; + const foo = 2; + export default function getFooTimesDepPlusX(x) { + return foo * dep() + x; + } +`); +```