1.0.1 • Published 3 years ago

barrelboy v1.0.1

Weekly downloads
10
License
MIT
Repository
-
Last release
3 years ago

barrelboy

Flexible barrel file generation for Javascript and Typescript with watching built-in.

Usage

Build barrels once

npx barrelboy --write

Build barrels and rebuild when relevant files are added or removed.

npx barrelboy --write --watch

Define your barrels in ./barrelboy.js:

module.exports = () => [
  {
    out: "src/models/index.ts",
    match: "**/*Model.ts",
  },
  {
    out: "src/fns/index.ts",
    match: "**/*.ts",
  },
];

Alternatively, you can pass the path of your barrelboy config file:

npx barrelboy barrel-config.js --write --watch

Config

  • out - The path the barrel file should be written to.
  • match - The glob or array of globs to use when searching for files to include in the barrel.
  • matchDirectory - The root directory to use when searching for files. Default: path.parse(out).dir
  • matchIgnore - The optional array of globs to ignore when seaching for files. Default: [out, "**/*.test.*"]
  • template - The handlebars template string or function to use when generating barrel files. Defaults to export * from "./file/path"; for every matched file.

Custom templates

You can include custom barrel templates in your barrel config file using the template field. The template can be either a handlebars template string or a function that returns a string.

Custom handlebars template

You can use handlebars templates to generate custom barrels.

const { readFileSync } = require("fs");

module.exports = ({ Handlebars }) => {
  Handlebars.registerHelper("loud", (str) => str.toUpperCase());

  return [
    {
      out: "src/models/index.ts",
      match: "**/*Model.ts",
      template: fs.readFileSync("./modelBarrel.hbs", "utf8"),
    },
  ];
};

Custom function template

You can use plain JS functions to generate custom barrels.

module.exports = () => [
  {
    out: "src/models/index.ts",
    match: "**/*Model.ts",
    template({ files }) {
      return files
        .map(
          (file) =>
            `export { default as ${file.name.toUpperCase()} } from "./${
              file.path
            }";`
        )
        .join("\n");
    },
  },
];

License

MIT

1.0.1

3 years ago

1.0.0

3 years ago

0.0.6

3 years ago

0.0.4

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago

0.0.1

3 years ago