railpack 1.3.3 → 1.3.4
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +48 -0
- data/app/assets/builds/.manifest.json +1 -0
- data/app/assets/builds/.sprockets-manifest-9b8cee28edffd7df69113477260fe6bf.json +4 -0
- data/lib/railpack/bundler.rb +31 -3
- data/lib/railpack/bundlers/bun_bundler.rb +1 -1
- data/lib/railpack/bundlers/esbuild_bundler.rb +1 -1
- data/lib/railpack/bundlers/rollup_bundler.rb +1 -1
- data/lib/railpack/bundlers/webpack_bundler.rb +1 -1
- data/lib/railpack/config.rb +8 -0
- data/lib/railpack/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b23cababe105aa765cf9a8ebea1a508ac24dafdd0cf847e47ed55c800d0d8c8a
|
|
4
|
+
data.tar.gz: e775df5c662e77d4052446ae54dca53150720de9815d64598d72bcff06222c6e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3165d58c7d6e6dd239607808c985255cc236150d76393979875bae2f447e4b6aa2625ca19dbecc6d8c850bedf9cdbfa2711ef6a858ef1c0dc6f224b8a6ef1239
|
|
7
|
+
data.tar.gz: dd3a9f8af4187cd92c31e88a8fbbde8a4877a9025bba5e44029bf71820e152ada176b3e24b89b4643b98c8017f82d31a61af891da4e14cc2f9320d37c4264271
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,53 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.3.4] - 2026-01-28
|
|
4
|
+
|
|
5
|
+
### 🚀 **Per-Bundler Command Overrides - Ultimate Customization**
|
|
6
|
+
|
|
7
|
+
This patch release adds the final piece of the bundler architecture puzzle: per-bundler command overrides via YAML configuration. This enables users to customize bundler behavior without code changes, completing the vision of a truly unified and extensible asset pipeline.
|
|
8
|
+
|
|
9
|
+
#### ✨ **Per-Bundler Command Overrides**
|
|
10
|
+
- **YAML Configuration**: Override any bundler command via `config/railpack.yml`
|
|
11
|
+
- **Environment-Specific**: Different overrides for development, production, etc.
|
|
12
|
+
- **Graceful Fallback**: Falls back to defaults if no overrides specified
|
|
13
|
+
- **Deep Immutability**: All overrides are frozen for thread safety
|
|
14
|
+
|
|
15
|
+
#### 🛠️ **Configuration Syntax**
|
|
16
|
+
```yaml
|
|
17
|
+
bundlers:
|
|
18
|
+
esbuild:
|
|
19
|
+
commands:
|
|
20
|
+
build: "custom-esbuild --special-flag"
|
|
21
|
+
watch: "custom-esbuild --watch --dev-mode"
|
|
22
|
+
version: "custom-esbuild --version-check"
|
|
23
|
+
bun:
|
|
24
|
+
commands:
|
|
25
|
+
build: "bunx custom-build"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
#### 🏗️ **Architecture Enhancement**
|
|
29
|
+
- **Config Integration**: `Config#bundler_command_overrides()` method
|
|
30
|
+
- **Base Class Support**: `Bundler#commands` now merges defaults + overrides
|
|
31
|
+
- **Subclass Flexibility**: All bundlers use `default_commands` + config overrides
|
|
32
|
+
- **Zero Breaking Changes**: Existing behavior preserved
|
|
33
|
+
|
|
34
|
+
#### 📚 **Use Cases**
|
|
35
|
+
- **Custom Build Scripts**: Use project-specific build commands
|
|
36
|
+
- **Wrapper Scripts**: Integrate with custom tooling/pipelines
|
|
37
|
+
- **Version Pinning**: Use specific bundler versions via wrapper scripts
|
|
38
|
+
- **Environment Overrides**: Different commands for dev vs production
|
|
39
|
+
|
|
40
|
+
#### 🔧 **Technical Implementation**
|
|
41
|
+
- **Lazy Loading**: Commands cached per bundler instance
|
|
42
|
+
- **Error Handling**: Graceful fallback if config unavailable
|
|
43
|
+
- **Performance**: No overhead when overrides not used
|
|
44
|
+
- **Thread Safety**: Immutable command hashes
|
|
45
|
+
|
|
46
|
+
#### 📊 **Quality Assurance**
|
|
47
|
+
- **All Tests Pass**: 75 tests with 244 assertions
|
|
48
|
+
- **Backward Compatible**: Existing configurations work unchanged
|
|
49
|
+
- **Documentation**: Comprehensive inline documentation
|
|
50
|
+
|
|
3
51
|
## [1.3.3] - 2026-01-28
|
|
4
52
|
|
|
5
53
|
### 🚀 **Bundler Architecture Refactoring - Enterprise-Grade Code Organization**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
data/lib/railpack/bundler.rb
CHANGED
|
@@ -48,7 +48,24 @@ module Railpack
|
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
def commands
|
|
51
|
-
|
|
51
|
+
@commands ||= begin
|
|
52
|
+
defaults = default_commands
|
|
53
|
+
overrides = bundler_command_overrides
|
|
54
|
+
defaults.merge(overrides)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def default_commands
|
|
59
|
+
raise NotImplementedError, "#{self.class.name} must implement #default_commands"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
def bundler_command_overrides
|
|
65
|
+
return {} unless config.respond_to?(:bundler_command_overrides)
|
|
66
|
+
config.bundler_command_overrides(current_env) || {}
|
|
67
|
+
rescue
|
|
68
|
+
{}
|
|
52
69
|
end
|
|
53
70
|
|
|
54
71
|
protected
|
|
@@ -65,15 +82,26 @@ module Railpack
|
|
|
65
82
|
|
|
66
83
|
# Build full command args by merging config flags/args with passed args
|
|
67
84
|
def build_command_args(operation, args = [])
|
|
85
|
+
env = current_env
|
|
68
86
|
if config.respond_to?("#{operation}_args")
|
|
69
|
-
config_args = config.send("#{operation}_args") || []
|
|
70
|
-
config_flags = config.send("#{operation}_flags") || []
|
|
87
|
+
config_args = config.send("#{operation}_args", env) || []
|
|
88
|
+
config_flags = config.send("#{operation}_flags", env) || []
|
|
71
89
|
config_args + config_flags + args
|
|
72
90
|
else
|
|
73
91
|
# Fallback for hash configs (used in tests)
|
|
74
92
|
args
|
|
75
93
|
end
|
|
76
94
|
end
|
|
95
|
+
|
|
96
|
+
private
|
|
97
|
+
|
|
98
|
+
def current_env
|
|
99
|
+
if defined?(Rails) && Rails.respond_to?(:env)
|
|
100
|
+
Rails.env
|
|
101
|
+
else
|
|
102
|
+
:development
|
|
103
|
+
end
|
|
104
|
+
end
|
|
77
105
|
end
|
|
78
106
|
|
|
79
107
|
# Intermediate base class for NPM-based bundlers (esbuild, rollup, webpack)
|
data/lib/railpack/config.rb
CHANGED
|
@@ -86,6 +86,14 @@ module Railpack
|
|
|
86
86
|
@config[bundler_name] || {}
|
|
87
87
|
end
|
|
88
88
|
|
|
89
|
+
# Get bundler-specific command overrides from config
|
|
90
|
+
def bundler_command_overrides(env = current_env)
|
|
91
|
+
bundler_name = bundler(env)
|
|
92
|
+
overrides = @config.dig('bundlers', bundler_name, 'commands') || {}
|
|
93
|
+
# Deep freeze for immutability
|
|
94
|
+
deep_freeze(overrides)
|
|
95
|
+
end
|
|
96
|
+
|
|
89
97
|
def method_missing(method, *args)
|
|
90
98
|
config_key = method.to_s
|
|
91
99
|
if method.end_with?('=')
|
data/lib/railpack/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: railpack
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.3.
|
|
4
|
+
version: 1.3.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- 21tycoons LLC
|
|
@@ -37,6 +37,8 @@ files:
|
|
|
37
37
|
- LICENSE.txt
|
|
38
38
|
- README.md
|
|
39
39
|
- Rakefile
|
|
40
|
+
- app/assets/builds/.manifest.json
|
|
41
|
+
- app/assets/builds/.sprockets-manifest-9b8cee28edffd7df69113477260fe6bf.json
|
|
40
42
|
- lib/railpack.rb
|
|
41
43
|
- lib/railpack/bundler.rb
|
|
42
44
|
- lib/railpack/bundlers/bun_bundler.rb
|