UNPKG

iam-floyd

Version:

AWS IAM policy statement generator with fluent interface

148 lines (104 loc) 4.74 kB
# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Project Overview IAM Floyd is an AWS IAM policy statement generator with a fluent interface. It generates TypeScript classes for all AWS services and their actions, resources, and condition keys from AWS documentation. The project supports both standalone usage (`iam-floyd`) and AWS CDK integration (`cdk-iam-floyd`). ## Core Architecture ### Generated Code Structure - `lib/generated/policy-statements/` - Contains generated TypeScript classes for each AWS service (400+ services) - `lib/generated/index.ts` - Main export file that re-exports all service classes - `lib/generated/aws-managed-policies/` - Generated AWS managed policies - `lib/shared/` - Core shared classes like `PolicyStatement`, `All`, and `Operator` - `lib/collection/` - Predefined policy collections and utilities ### Code Generation Pipeline The codebase uses a sophisticated generation system: 1. `bin/generate.ts` - Main generation entry point that orchestrates the process 2. `lib/generator/` - Contains the generation logic that scrapes AWS documentation 3. Generated files are created in TypeScript and compiled to JavaScript for distribution ### Key Classes - `PolicyStatement` - Base class for all policy statement builders - `All` - Global action provider for cross-service policies - Service-specific classes (e.g., `S3`, `EC2`, `Lambda`) - Each AWS service gets its own class with methods for actions, resources, and conditions ## Development Commands ### Building and Compilation ```bash # Build the project (compiles TypeScript) make build # Convert project to CDK-variant ``` ### Code Generation ```bash # Generate service classes from AWS documentation make generate # Force regeneration (ignores time-based cache) make generate-force # Generate AWS managed policies index make index-managed-policies ``` ### Testing ```bash # Run main tests make test # Run CDK-specific tests make cdk-test # Convert package to CDK variant and run CDK-specific tests make cdk-all ``` ### Linting and Code Quality ```bash # Run ESLint make eslint # ESLint is configured with TypeScript, Prettier, and deprecation rules ``` ### Package Management ```bash # Create npm package make package # Clean all generated files and dependencies make clean # Reinstall dependencies make install ``` ### CDK Variant Management ```bash # Convert to CDK variant (modifies package.json and lib structure) make cdk # Revert CDK changes make uncdk ``` ## Project Structure Patterns ### Dual Package Strategy The project maintains two npm packages from a single codebase: - `iam-floyd` - Standalone IAM policy generator - `cdk-iam-floyd` - AWS CDK integration that extends `iam.PolicyStatement` The `bin/mkcdk.ts` script transforms the codebase between variants by modifying imports and package configuration. ### TypeScript Configuration - `tsconfig.json` - Main TypeScript configuration with strict settings - `tsconfig.main.json` - Production build configuration - `tsconfig.test-*.json` - Test-specific configurations - Uses SWC for faster compilation via ts-node ### Generated Code Conventions - All generated classes follow the pattern: `export class ServiceName extends PolicyStatement` - Method names correspond to AWS IAM action names (e.g., `getObject()`, `listBuckets()`) - Resource and condition methods use fluent interface patterns - Generated files include comprehensive JSDoc comments from AWS documentation ## Important Notes ### File Modification Rules - **Never manually edit files in `lib/generated/`** - These are auto-generated and will be overwritten - Generated code is created from AWS documentation and should only be updated via the generation process - Manual changes should only be made to files in `lib/shared/`, `lib/collection/`, and core infrastructure ### Code Style - ESLint enforces strict TypeScript rules with Prettier formatting - Single quotes for strings, except in YAML files - Comprehensive type checking with `noImplicitAny` and strict null checks - Generated files are excluded from linting (`lib/generated/*` in `.eslintrc`) ### Testing Strategy - Tests are located in the `test/` directory with its own Makefile - Supports both unit tests for the main package and CDK integration tests - CDK tests include actual deployment and destruction cycles for validation ## Git Commit Conventions This project follows conventional commit patterns: - `chore(deps): description` - Dependency updates - `feat: description` - New features - `fix: description` - Bug fixes - `docs: description` - Documentation changes - Simple format: "Updates AWS managed policies" for automated policy updates