@monstermann/barrels
v0.5.0
Published
Generates namespace and flat barrel files.
Downloads
87
Readme
Generates namespace and flat barrel files.
Installation
bun add -D @monstermann/barrelsUsage
import { defineConfig, flat, namespace } from "@monstermann/barrels";
export default defineConfig([
namespace({
entries: "./src/Rect",
}),
flat({
entries: "./src",
include: ["*", "Rect/index.js"],
}),
]);bunx barrels
bunx barrels --config ./barrels.config.tsConfigs run one after another, so a barrel can pick up the barrels created before it. Files are only written when their contents changed.
Options
namespace and flat take the same options:
| Option | Default | Description |
| --------- | ------------------- | ------------------------------------------------- |
| entries | process.cwd() | Glob(s) to the directories to create barrels in. |
| include | ["*.ts", "*.tsx"] | Glob(s) to collect files, relative to each entry. |
| exclude | | Glob(s) to skip files, relative to each entry. |
namespace
Creates an index.js and index.d.ts in each entry, exporting everything the collected files export as an object named after the directory:
import { area } from "./area.js";
import { create } from "./create.js";
export const Rect = {
area,
create,
};import { area } from "./area.js";
import { create } from "./create.js";
type Rect = {
height: number;
width: number;
};
declare namespace Rect {
export { area, create };
}
export { Rect };- Exported types are re-exported next to the namespace.
- A type with the same name as the namespace (
Rectabove) can not be imported into the declaration, the types of its file are copied into it instead, together with the imports they need. export * from "./foo"is followed for relative paths, the names ofexport * from "package"are not collected.- Default exports are skipped.
Use @monstermann/barrels-treeshake to turn Rect.area() into a direct import of area.
flat
Creates an index.ts in each entry, re-exporting everything from the collected files:
export * from "./Rect/index";
export * from "./types";Import paths are written without extension, which expects "moduleResolution": "bundler".
