@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 CHANGED
@@ -231,6 +231,6 @@
231
231
  "symbolId": "src/index:HomebrewOptions"
232
232
  }
233
233
  },
234
- "version": "1.0.19",
235
- "fingerprint": "AXxVD9hNYAI6S13h4D7iRN/X3TU0JqbKe6QoUG7gh6M="
234
+ "version": "1.0.21",
235
+ "fingerprint": "OWF1oW77Fw96tHwpRfe3TRkXShItttRCUVeVQf3owuA="
236
236
  }
@@ -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.19" };
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.20",
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.19",
45
+ "version": "1.0.21",
46
46
  "types": "lib/index.d.ts",
47
47
  "stability": "stable",
48
48
  "jsii": {