@nikovirtala/projen-homebrew 1.0.19 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +2 -2
- package/.kiro/steering/product.md +14 -0
- package/.kiro/steering/structure.md +45 -0
- package/.kiro/steering/tech.md +61 -0
- package/lib/index.js +1 -1
- package/package.json +2 -2
package/.jsii
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Product
|
|
2
|
+
|
|
3
|
+
A projen component that manages Homebrew packages for projen-based projects. Automatically installs Homebrew if missing and generates a `Brewfile` to manage package dependencies.
|
|
4
|
+
|
|
5
|
+
## Key Features
|
|
6
|
+
|
|
7
|
+
- Automatic Homebrew installation (unattended)
|
|
8
|
+
- Brewfile generation from package list
|
|
9
|
+
- Integration with projen task system
|
|
10
|
+
- Programmatic package management via `addPackage()` method
|
|
11
|
+
|
|
12
|
+
## Target Users
|
|
13
|
+
|
|
14
|
+
Developers using projen to manage TypeScript/JavaScript projects who need consistent Homebrew package dependencies across team members.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Project Structure
|
|
2
|
+
|
|
3
|
+
## Directory Layout
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
.
|
|
7
|
+
├── src/ # Source code (TypeScript)
|
|
8
|
+
│ └── index.ts # Main export: Homebrew component
|
|
9
|
+
├── test/ # Test files (Vitest)
|
|
10
|
+
│ └── index.test.ts # Component tests
|
|
11
|
+
├── .projen/ # Projen metadata (auto-generated)
|
|
12
|
+
├── .projenrc.ts # Projen configuration (source of truth)
|
|
13
|
+
└── lib/ # Compiled JavaScript output (gitignored)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Architecture
|
|
17
|
+
|
|
18
|
+
**Component Pattern**: Extends projen's `Component` class to integrate with projen's lifecycle.
|
|
19
|
+
|
|
20
|
+
**Key Classes**:
|
|
21
|
+
- `Homebrew`: Main component class
|
|
22
|
+
- Manages package set
|
|
23
|
+
- Synthesizes Brewfile
|
|
24
|
+
- Creates projen tasks for installation
|
|
25
|
+
|
|
26
|
+
**Task Integration**:
|
|
27
|
+
- `install:homebrew`: Installs Homebrew if missing
|
|
28
|
+
- `homebrew:bundle`: Runs `brew bundle` to install packages
|
|
29
|
+
- Tasks are spawned by project's default task
|
|
30
|
+
|
|
31
|
+
## Code Conventions
|
|
32
|
+
|
|
33
|
+
- Use projen's `Component` base class for extensions
|
|
34
|
+
- Implement static `of()` method for component lookup
|
|
35
|
+
- Use `TextFile` for generating project files
|
|
36
|
+
- Prefer `Set` for unique collections
|
|
37
|
+
- Use readonly interfaces for options
|
|
38
|
+
- Export both interfaces and classes from index.ts
|
|
39
|
+
|
|
40
|
+
## Testing Approach
|
|
41
|
+
|
|
42
|
+
- Use `synthSnapshot()` to test generated files
|
|
43
|
+
- Test task creation and spawning
|
|
44
|
+
- Verify file contents in snapshots
|
|
45
|
+
- No mocking required for projen components
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Technology Stack
|
|
2
|
+
|
|
3
|
+
## ⚠️ Projen-Managed Project
|
|
4
|
+
|
|
5
|
+
This project is **entirely managed by projen**. Key implications:
|
|
6
|
+
|
|
7
|
+
- **DO NOT** manually edit generated files (package.json, tsconfig.json, etc.)
|
|
8
|
+
- **ALL** configuration changes must be made in `.projenrc.ts`
|
|
9
|
+
- After modifying `.projenrc.ts`, run `npx projen` to regenerate files
|
|
10
|
+
- Dependencies, scripts, and tooling are defined in `.projenrc.ts`, not package.json
|
|
11
|
+
|
|
12
|
+
## Build System
|
|
13
|
+
|
|
14
|
+
- **projen**: Project configuration and build orchestration
|
|
15
|
+
- **JSII**: Multi-language library compilation
|
|
16
|
+
- **pnpm**: Package manager (hoisted node-linker)
|
|
17
|
+
- **TypeScript**: 5.9.3
|
|
18
|
+
|
|
19
|
+
## Code Quality
|
|
20
|
+
|
|
21
|
+
- **Biome**: Formatting and linting (replaces ESLint/Prettier)
|
|
22
|
+
- 4-space indentation
|
|
23
|
+
- 120 character line width
|
|
24
|
+
- Double quotes for JavaScript/TypeScript
|
|
25
|
+
- **Vitest**: Testing framework with coverage via v8
|
|
26
|
+
|
|
27
|
+
## Runtime Requirements
|
|
28
|
+
|
|
29
|
+
- Node.js >= 22.21.1
|
|
30
|
+
- mise for version management (optional)
|
|
31
|
+
|
|
32
|
+
## Common Commands
|
|
33
|
+
|
|
34
|
+
All commands run through projen:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# Development
|
|
38
|
+
npx projen # Synthesize project files
|
|
39
|
+
npx projen build # Compile TypeScript
|
|
40
|
+
npx projen test # Run tests with coverage
|
|
41
|
+
npx projen compile # TypeScript compilation only
|
|
42
|
+
|
|
43
|
+
# Code Quality
|
|
44
|
+
npx projen biome # Format and lint code
|
|
45
|
+
|
|
46
|
+
# Package Management
|
|
47
|
+
npx projen package # Build distributable packages
|
|
48
|
+
npx projen upgrade # Update dependencies
|
|
49
|
+
|
|
50
|
+
# Release
|
|
51
|
+
npx projen release # Create release (automated via GitHub Actions)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## File Generation
|
|
55
|
+
|
|
56
|
+
Many files are auto-generated by projen. Edit `.projenrc.ts` and run `npx projen` to regenerate:
|
|
57
|
+
- package.json
|
|
58
|
+
- tsconfig files
|
|
59
|
+
- GitHub workflows
|
|
60
|
+
- biome.jsonc
|
|
61
|
+
- vitest.config.ts
|
package/lib/index.js
CHANGED
|
@@ -42,5 +42,5 @@ class Homebrew extends component_1.Component {
|
|
|
42
42
|
}
|
|
43
43
|
exports.Homebrew = Homebrew;
|
|
44
44
|
_a = JSII_RTTI_SYMBOL_1;
|
|
45
|
-
Homebrew[_a] = { fqn: "@nikovirtala/projen-homebrew.Homebrew", version: "1.0.
|
|
45
|
+
Homebrew[_a] = { fqn: "@nikovirtala/projen-homebrew.Homebrew", version: "1.0.21" };
|
|
46
46
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBaUQ7QUFFakQsa0RBQStDO0FBTS9DLE1BQWEsUUFBUyxTQUFRLHFCQUFTO0lBQzVCLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDN0IsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFZLEVBQWlCLEVBQUUsQ0FBQyxDQUFDLFlBQVksUUFBUSxDQUFDO1FBQzFFLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUlELFlBQVksT0FBZ0IsRUFBRSxVQUEyQixFQUFFO1FBQ3ZELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVoRCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFO1lBQ3hELElBQUksRUFBRSxxSkFBcUo7U0FDOUosQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFNUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxXQUFtQjtRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdkMsSUFBSSxtQkFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDM0IsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztTQUNqRSxDQUFDLENBQUM7UUFFSCxNQUFNLGNBQWMsR0FDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1lBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFO2dCQUNwQyxJQUFJLEVBQUUsYUFBYTthQUN0QixDQUFDLENBQUM7UUFFUCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN2RSxJQUFJLGVBQWUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUN2RixlQUFlLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDTCxDQUFDOztBQTlDTCw0QkErQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwicHJvamVuL2xpYi9jb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCJwcm9qZW4vbGliL3Byb2plY3RcIjtcbmltcG9ydCB7IFRleHRGaWxlIH0gZnJvbSBcInByb2plbi9saWIvdGV4dGZpbGVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBIb21lYnJld09wdGlvbnMge1xuICAgIHJlYWRvbmx5IHBhY2thZ2VzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBIb21lYnJldyBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBQcm9qZWN0KTogSG9tZWJyZXcgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBpc0hvbWVicmV3ID0gKGM6IENvbXBvbmVudCk6IGMgaXMgSG9tZWJyZXcgPT4gYyBpbnN0YW5jZW9mIEhvbWVicmV3O1xuICAgICAgICByZXR1cm4gcHJvamVjdC5jb21wb25lbnRzLmZpbmQoaXNIb21lYnJldyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYWNrYWdlczogU2V0PHN0cmluZz47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBIb21lYnJld09wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgICAgICB0aGlzLnBhY2thZ2VzID0gbmV3IFNldChvcHRpb25zLnBhY2thZ2VzID8/IFtdKTtcblxuICAgICAgICBjb25zdCBicmV3SW5zdGFsbFRhc2sgPSBwcm9qZWN0LmFkZFRhc2soXCJpbnN0YWxsOmhvbWVicmV3XCIsIHtcbiAgICAgICAgICAgIGV4ZWM6ICdjb21tYW5kIC12IGJyZXcgPi9kZXYvbnVsbCAyPiYxIHx8IE5PTklOVEVSQUNUSVZFPTEgL2Jpbi9iYXNoIC1jIFwiJChjdXJsIC1mc1NMIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9Ib21lYnJldy9pbnN0YWxsL0hFQUQvaW5zdGFsbC5zaClcIicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByb2plY3QuZGVmYXVsdFRhc2s/LnNwYXduKGJyZXdJbnN0YWxsVGFzayk7XG5cbiAgICAgICAgdGhpcy5zeW50aGVzaXplQnJld2ZpbGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUGFja2FnZShwYWNrYWdlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFja2FnZXMuYWRkKHBhY2thZ2VOYW1lKTtcbiAgICAgICAgdGhpcy5zeW50aGVzaXplQnJld2ZpbGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN5bnRoZXNpemVCcmV3ZmlsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGFja2FnZXMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMucHJvamVjdC50cnlSZW1vdmVGaWxlKFwiQnJld2ZpbGVcIik7XG5cbiAgICAgICAgbmV3IFRleHRGaWxlKHRoaXMsIFwiQnJld2ZpbGVcIiwge1xuICAgICAgICAgICAgbGluZXM6IEFycmF5LmZyb20odGhpcy5wYWNrYWdlcykubWFwKChwa2cpID0+IGBicmV3IFwiJHtwa2d9XCJgKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYnJld0J1bmRsZVRhc2sgPVxuICAgICAgICAgICAgdGhpcy5wcm9qZWN0LnRhc2tzLnRyeUZpbmQoXCJob21lYnJldzpidW5kbGVcIikgPz9cbiAgICAgICAgICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKFwiaG9tZWJyZXc6YnVuZGxlXCIsIHtcbiAgICAgICAgICAgICAgICBleGVjOiBcImJyZXcgYnVuZGxlXCIsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBicmV3SW5zdGFsbFRhc2sgPSB0aGlzLnByb2plY3QudGFza3MudHJ5RmluZChcImluc3RhbGw6aG9tZWJyZXdcIik7XG4gICAgICAgIGlmIChicmV3SW5zdGFsbFRhc2sgJiYgIWJyZXdJbnN0YWxsVGFzay5zdGVwcy5zb21lKChzKSA9PiBzLnNwYXduID09PSBcImhvbWVicmV3OmJ1bmRsZVwiKSkge1xuICAgICAgICAgICAgYnJld0luc3RhbGxUYXNrLnNwYXduKGJyZXdCdW5kbGVUYXNrKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
14
14
|
"@biomejs/biome": "^2",
|
|
15
|
-
"@nikovirtala/projen-vitest": "^2.1.
|
|
15
|
+
"@nikovirtala/projen-vitest": "^2.1.22",
|
|
16
16
|
"@types/node": "^22",
|
|
17
17
|
"@vitest/coverage-v8": "^4",
|
|
18
18
|
"commit-and-tag-version": "^12",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"publishConfig": {
|
|
43
43
|
"access": "public"
|
|
44
44
|
},
|
|
45
|
-
"version": "1.0.
|
|
45
|
+
"version": "1.0.21",
|
|
46
46
|
"types": "lib/index.d.ts",
|
|
47
47
|
"stability": "stable",
|
|
48
48
|
"jsii": {
|