@ebowwa/generate-package
v0.1.0
Published
Auto-generate package.json from code analysis and git state
Maintainers
Readme
@ebowwa/generate-package
Auto-generate package.json from code analysis and git state.
What it does
- Version: From git tags (v1.2.3 → 1.2.3)
- Dependencies: Parsed from source imports
- Scripts: Standard presets (bun, node, cli, mcp)
- Exports: Generated from source structure
- Metadata: Inferred from directory name, README, git
Installation
bun add -D @ebowwa/generate-packageUsage
CLI
# Generate for current directory
generate-package
# Generate for specific package
generate-package ./packages/src/my-package
# Generate for all packages in monorepo
generate-package --all
# Check if package.json is outdated
generate-package --check
# Dry run (don't write)
generate-package --dryProgrammatic
import { generatePackageJson, generateAndWrite } from "@ebowwa/generate-package";
// Generate without writing
const result = await generatePackageJson("./packages/src/foo");
console.log(result.packageJson.version); // "1.2.3"
// Generate and write
await generateAndWrite("./packages/src/foo");Hooks
Pre-build
Runs before build to ensure package.json is current:
{
"scripts": {
"prebuild": "generate-package-hook pre-build"
}
}Pre-commit
Stages updated package.json before commit:
# .husky/pre-commit
generate-package-hook pre-commitOptions
| Option | Default | Description |
|--------|---------|-------------|
| --src-dir | src | Source directory |
| --out-dir | dist | Output directory |
| --preset | bun | Script presets (bun, node, cli, mcp) |
| --scope | @ebowwa | Package scope |
| --all | false | Generate for all packages |
| --check | false | Exit 1 if outdated |
| --dry | false | Don't write files |
How it works
┌─────────────────────────────────────────────────────────────┐
│ GENERATE PACKAGE.JSON │
├─────────────────────────────────────────────────────────────┤
│ INPUTS (no config files needed) │
│ ├── src/**/*.ts → Parse imports → dependencies │
│ ├── tsconfig.json → TypeScript settings │
│ ├── git tags → Version (semver from tags) │
│ └── directory name → Package name (@ebowwa/<dir>) │
├─────────────────────────────────────────────────────────────┤
│ OUTPUTS │
│ ├── name, version, description │
│ ├── dependencies (external) │
│ ├── devDependencies (types, build tools) │
│ ├── scripts (build, test, publish) │
│ ├── exports, main, module, types │
│ └── publishConfig, repository, author │
└─────────────────────────────────────────────────────────────┘Version Calculation
- Exact tag match: Tag
v1.2.3→ version1.2.3 - Commits since tag: Tag
v1.2.3+ 5 commits →1.2.4-dev.5 - No tags: Total commits →
0.0.0-dev.42
License
MIT
