Skip to content

jpex-js/babel-plugin

Repository files navigation

babel

Babel plugin for jpex

usage

Jpex uses a babel plugin to infer type interfaces. Your babel config should look something like this:

{
  presets: [ '@babel/preset-typescript' ],
  plugins: [ 'jpex/babel-plugin' ]
}

options

identifier

string | string[]

The variable name of your jpex instance that the babel plugin should look for. By default it is just jpex.

For example in your app you may have something like:

const ioc = jpex.extend();

ioc.factory<Foo>(fooFn);

Then you should set the identifier property to 'ioc' or [ 'ioc', 'jpex' ]

publicPath

string | boolean;

The default behavior when creating string literals for types is to use the file path + the type name.

For example, if you import MyDep from 'src/types/common', jpex will name it type:/src/types/common/MyDep.

However, sometimes this is not ideal, such as when creating a node module package. (When you import a type from a node module, jpex will just use the package name as the file path)

publicPath allows you to set the path prefix. For example, setting it to myPackageName would result in a naming scheme of type:/myPackageName/MyDep.

If you set publicPath to true, it will attempt to load your package.json and read the name property.

pathAlias

{
  [key: string]: string
}

Creates aliases for certain paths. This is currently a very basic implementation. If an import starts with a pathAlias, it'll replace it with the given alias.

For example:

{
  '@': '/src'
}

Will convert

import { MyService } from "@/services";

into

import { MyService } from "/src/services";

This is only in terms of resolving a dependency's name, it doesn't actually update the import path.

omitIndex

boolean;

When registering a dependency in an index file, the index will be omitted.

For example:

// /src/services/index.ts

type MyService = any;

jpex.service<MyService>(myService);

This would normally produce a type name of type:/src/services/index/MyService. With omitIndex it will create type:/src/services/MyService.