Skip to content

Run code-generating scripts with one command and as files change

License

Notifications You must be signed in to change notification settings

alloc/codegentool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

codegentool

npm Code style: Prettier Donate

Run code-generating scripts with one command and as files change

 

Configuration

If customization is desired, you may add a codegentool field to your package.json. By default, any JS/TS modules in the ./generators directory will be run.

{
  "codegentool": {
    "generators": ["./generators/*.ts"]
  }
}

Generators can be uncompiled TypeScript, no problem. Every generator needs to export a default function which will be called with Codegentool's runtime API.

import { defineGenerator } from 'codegentool'

export default defineGenerator(({ scan }) => {
  const files = await scan('src/**/*.ts')
  // ...
})

 

Usage

pnpm install -D codegentool@npm:@alloc/codegentool

Run your project's configured generators:

pnpm codegentool

Rerun them as files change:

pnpm codegentool -w

 

Runtime API

The runtime API is passed to each generator function. As of now, it's only for filesystem operations, so that Codegentool can watch for changes.

scan()

Alias to fast-glob package with file-watching support.

Note: In watch mode, changes to files matching the glob will trigger a rerun even though they shouldn't.

read()

Alias to fs.readFileSync with file-watching support.

write()

Alias to fs.writeFileSync but it won't write if nothing changed.

writeEnv()

Create or update a .env file with the given data. Pass null to unset a key.

dedent()

Alias to dedent package.

serialize()

Alias to serialize-javascript package.

parseModule()

Given a module path, parse the module and return the AST. Both JSX and TypeScript are supported with no extra configuration.

We use meriyah for parsing.

parseModuleText()

Given a string of code, parse it and return the AST. Both JSX and TypeScript are supported with no extra configuration.

loadModule()

Similar to import() but returns null instead of rejecting when a module is not found. Also has an optional basedir argument for resolution. Finally, the default basedir is the directory of the bundled generator (which defaults to somewhere in node_modules/.cache/codegentool). Relative imports are resolved as if the import was executed from the generator's source path.

About

Run code-generating scripts with one command and as files change

Resources

License

Stars

Watchers

Forks

Packages

No packages published