proscenium 0.21.3-x86_64-darwin → 0.21.5-x86_64-darwin

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 55a13da861c5a68c333d513fbb993049ea19beea01006eedb4afd45a5669b4f4
4
- data.tar.gz: f4a77a860074ef8b992d4142981cf1361a2e18e1d4515922005ff7b95d191654
3
+ metadata.gz: 8733d7c06833d4685009590e3077b9a767da22a234cde3edf65c225a85e4dbc7
4
+ data.tar.gz: f11a3f732c378bb0ae80274fe369530fbf0a16c2c4ebb35a4e8dbd4f093ae469
5
5
  SHA512:
6
- metadata.gz: 22319fb9fedd85227863d5f09a0cad4541144e378d54819bb50bb971700e8b959d31b7d2897348877f575a1e67f3b3a1c9d0e7e983ce496340b2234bd559d391
7
- data.tar.gz: '059a07c106a7926d78aab897e1a167e8750b3c4c97d75e88c671f91aecaacb04b55e7906c0461405ccfbb68e03aae06a5595d6a1da9634cba5e01980169895b1'
6
+ metadata.gz: b84326bcbcca135e0b7a93f83a888ea9682c2887ca2d434e14ff942cca7fe2cd52bbe6bd83c97ec1881b7cd9a552ef17710205f50e227920b06e24189523aee7
7
+ data.tar.gz: 39c0412513c7b108995ec0d64f9e46e4b20573cfe9a35f8a998ce0dbe02c6c5535466781b6f4ab589512b180a4c7213ab354b7d7008feeb93de7d31d63ed92dd
@@ -23,6 +23,7 @@ module Proscenium
23
23
 
24
24
  attach_function :build_to_string, [
25
25
  :string, # Path or entry point.
26
+ :string, # cache_query_string.
26
27
  :pointer # Config as JSON.
27
28
  ], Result.by_value
28
29
 
@@ -58,8 +59,8 @@ module Proscenium
58
59
  end
59
60
  end
60
61
 
61
- def self.build_to_string(path, root: nil)
62
- new(root:).build_to_string(path)
62
+ def self.build_to_string(path, cache_query_string: '', root: nil)
63
+ new(root:).build_to_string(path, cache_query_string:)
63
64
  end
64
65
 
65
66
  def self.resolve(path, root: nil)
@@ -81,14 +82,14 @@ module Proscenium
81
82
  RubyGems: Proscenium::BundledGems.paths,
82
83
  Bundle: Proscenium.config.bundle,
83
84
  Aliases: Proscenium.config.aliases,
84
- QueryString: cache_query_string,
85
+ QueryString: Proscenium.config.cache_query_string.presence || '',
85
86
  Debug: Proscenium.config.debug
86
87
  }.to_json)
87
88
  end
88
89
 
89
- def build_to_string(path)
90
+ def build_to_string(path, cache_query_string: '')
90
91
  ActiveSupport::Notifications.instrument('build.proscenium', identifier: path) do
91
- result = Request.build_to_string(path, @request_config)
92
+ result = Request.build_to_string(path, cache_query_string, @request_config)
92
93
 
93
94
  raise BuildError, result[:response] unless result[:success]
94
95
 
@@ -115,10 +116,6 @@ module Proscenium
115
116
  ENV.slice(*Proscenium.config.env_vars + Proscenium::DEFAULT_ENV_VARS)
116
117
  end
117
118
 
118
- def cache_query_string
119
- Proscenium.config.cache_query_string.presence || ''
120
- end
121
-
122
119
  def gem_root
123
120
  Pathname.new(__dir__).join('..', '..').to_s
124
121
  end
Binary file
@@ -12,6 +12,8 @@
12
12
 
13
13
  #ifndef GO_CGO_GOSTRING_TYPEDEF
14
14
  typedef struct { const char *p; ptrdiff_t n; } _GoString_;
15
+ extern size_t _GoStringLen(_GoString_ s);
16
+ extern const char *_GoStringPtr(_GoString_ s);
15
17
  #endif
16
18
 
17
19
  #endif
@@ -53,10 +55,16 @@ typedef size_t GoUintptr;
53
55
  typedef float GoFloat32;
54
56
  typedef double GoFloat64;
55
57
  #ifdef _MSC_VER
58
+ #if !defined(__cplusplus) || _MSVC_LANG <= 201402L
56
59
  #include <complex.h>
57
60
  typedef _Fcomplex GoComplex64;
58
61
  typedef _Dcomplex GoComplex128;
59
62
  #else
63
+ #include <complex>
64
+ typedef std::complex<float> GoComplex64;
65
+ typedef std::complex<double> GoComplex128;
66
+ #endif
67
+ #else
60
68
  typedef float _Complex GoComplex64;
61
69
  typedef double _Complex GoComplex128;
62
70
  #endif
@@ -83,14 +91,14 @@ typedef struct { void *data; GoInt len; GoInt cap; } GoSlice;
83
91
  extern "C" {
84
92
  #endif
85
93
 
86
- extern void reset_config();
94
+ extern void reset_config(void);
87
95
 
88
96
  // Build the given `path` using the `config`.
89
97
  //
90
98
  // - path - The path to build relative to `root`.
91
99
  // - config
92
100
  //
93
- extern struct Result build_to_string(char* filePath, char* configJson);
101
+ extern struct Result build_to_string(char* filePath, char* cacheQueryString, char* configJson);
94
102
 
95
103
  // Resolve the given `path` relative to the `root`.
96
104
  //
@@ -20,7 +20,7 @@ module Proscenium
20
20
  path = CGI.unescape(path) if path.start_with?(/https?%3A%2F%2F/)
21
21
 
22
22
  info do
23
- message = "#{color('[Proscenium]', nil, bold: true)} Building /#{path}"
23
+ message = " #{color('[Proscenium]', nil, bold: true)} Building /#{path}"
24
24
  message << " (Duration: #{event.duration.round(1)}ms | Allocations: #{event.allocations})"
25
25
  end
26
26
  end
@@ -40,6 +40,17 @@ module Proscenium
40
40
  @path_to_build ||= @request.path[1..]
41
41
  end
42
42
 
43
+ def cache_query_string
44
+ @cache_query_string ||= begin
45
+ params = @request.query_parameters
46
+ if params.one? && params.first[0] != '' && params.first[1].nil?
47
+ params.keys.first
48
+ else
49
+ Proscenium.config.cache_query_string
50
+ end
51
+ end.presence || ''
52
+ end
53
+
43
54
  def sourcemap?
44
55
  @request.path.ends_with?('.map')
45
56
  end
@@ -86,7 +97,7 @@ module Proscenium
86
97
  response.content_type = content_type
87
98
  response.etag = result[:content_hash]
88
99
 
89
- if Proscenium.config.cache_query_string && Proscenium.config.cache_max_age
100
+ if !cache_query_string.blank? && Proscenium.config.cache_max_age
90
101
  response.cache! Proscenium.config.cache_max_age
91
102
  end
92
103
 
@@ -20,7 +20,7 @@ module Proscenium
20
20
  end
21
21
 
22
22
  def attempt
23
- render_response Builder.build_to_string(path_to_build)
23
+ render_response Builder.build_to_string(path_to_build, cache_query_string:)
24
24
  rescue Builder::CompileError => e
25
25
  raise self.class::CompileError, { file: @request.fullpath, detail: e.message }, caller
26
26
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/logger_silence'
4
+
5
+ module Proscenium
6
+ class Middleware::SilenceRequest
7
+ def initialize(app)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ request = ActionDispatch::Request.new(env)
13
+
14
+ if (request.get? || request.head?) && proscenium_request?(request)
15
+ Rails.logger.silence { @app.call(env) }
16
+ else
17
+ @app.call(env)
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def proscenium_request?(request)
24
+ return true if request.path.match?(CHUNKS_PATH)
25
+
26
+ pathname = Pathname.new(request.path)
27
+ pathname.fnmatch?(GEMS_PATH_GLOB, File::FNM_EXTGLOB) ||
28
+ pathname.fnmatch?(APP_PATH_GLOB, File::FNM_EXTGLOB)
29
+ end
30
+ end
31
+ end
@@ -4,12 +4,12 @@ module Proscenium
4
4
  class Middleware
5
5
  extend ActiveSupport::Autoload
6
6
 
7
- # Error when the build command fails.
8
7
  class BuildError < StandardError; end
9
8
 
10
9
  autoload :Base
11
10
  autoload :Esbuild
12
11
  autoload :RubyGems
12
+ autoload :SilenceRequest
13
13
 
14
14
  def initialize(app)
15
15
  @app = app
@@ -22,7 +22,7 @@ module Proscenium
22
22
 
23
23
  # If this is a request for an asset chunk, we want to serve it with a very long
24
24
  # cache lifetime, since these are content-hashed and will never change.
25
- if request.path.match?(%r{^/_asset_chunks/})
25
+ if request.path.match?(CHUNKS_PATH)
26
26
  ::ActionDispatch::FileHandler.new(
27
27
  Rails.public_path.join('assets').to_s,
28
28
  headers: {
@@ -46,23 +46,11 @@ module Proscenium
46
46
  def find_type(request)
47
47
  pathname = Pathname.new(request.path)
48
48
 
49
- if pathname.fnmatch?(gems_path_glob, File::FNM_EXTGLOB)
49
+ if pathname.fnmatch?(GEMS_PATH_GLOB, File::FNM_EXTGLOB)
50
50
  RubyGems
51
- elsif pathname.fnmatch?(app_path_glob, File::FNM_EXTGLOB)
51
+ elsif pathname.fnmatch?(APP_PATH_GLOB, File::FNM_EXTGLOB)
52
52
  Esbuild
53
53
  end
54
54
  end
55
-
56
- def app_path_glob
57
- "/{#{Proscenium::ALLOWED_DIRECTORIES}}/**.{#{file_extensions}}"
58
- end
59
-
60
- def gems_path_glob
61
- "/node_modules/@rubygems/**.{#{file_extensions}}"
62
- end
63
-
64
- def file_extensions
65
- @file_extensions ||= FILE_EXTENSIONS.join(',')
66
- end
67
55
  end
68
56
  end
@@ -46,7 +46,10 @@ module Proscenium
46
46
  end
47
47
 
48
48
  initializer 'proscenium.middleware' do |app|
49
- app.middleware.insert_after ActionDispatch::Static, Proscenium::Middleware
49
+ unless config.proscenium.logging
50
+ app.middleware.insert_before Rails::Rack::Logger, Proscenium::Middleware::SilenceRequest
51
+ end
52
+ app.middleware.insert_before ActionDispatch::ActionableExceptions, Proscenium::Middleware
50
53
  end
51
54
 
52
55
  initializer 'proscenium.sideloading' do
@@ -62,5 +65,9 @@ module Proscenium
62
65
  ActionView::PartialRenderer.prepend Monkey::PartialRenderer
63
66
  end
64
67
  end
68
+
69
+ rake_tasks do
70
+ load 'proscenium/railties/compile.rake'
71
+ end
65
72
  end
66
73
  end
@@ -19,8 +19,8 @@
19
19
 
20
20
  <%= @exception.error['location']['line'].to_s.rjust 5 %> │ <%= @exception.error['location']['line_text'] %>
21
21
  │ <%= (@exception.error['location']['length'] > 1 ? "~" * @exception.error['location']['length'] : "^").rjust(@exception.error['location']['column'] + @exception.error['location']['length']) %>
22
- <%- if @exception.error['location']['suggestion'].present? -%> + │ <%= @exception.error['location']['suggestion'].rjust(@exception.error['location']['column'] + 1) %>
23
- <% else %> <%- end -%>
22
+ <%- if @exception.error['location']['suggestion'].present? %> + │ <%= @exception.error['location']['suggestion'].rjust(@exception.error['location']['column'] + 1) %>
23
+ <% else %> <%- end %>
24
24
  </pre>
25
25
  </div>
26
26
  </div>
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Proscenium
4
- VERSION = '0.21.3'
4
+ VERSION = '0.21.5'
5
5
  end
data/lib/proscenium.rb CHANGED
@@ -5,9 +5,6 @@ require 'active_support'
5
5
  module Proscenium
6
6
  extend ActiveSupport::Autoload
7
7
 
8
- FILE_EXTENSIONS = ['js', 'mjs', 'ts', 'jsx', 'tsx', 'css', 'js.map', 'mjs.map', 'jsx.map',
9
- 'ts.map', 'tsx.map', 'css.map'].freeze
10
-
11
8
  # Default paths for Rails assets. Used by the `compute_asset_path` helper to maintain Rails
12
9
  # default conventions of where JS and CSS files are located.
13
10
  DEFAULT_RAILS_ASSET_PATHS = {
@@ -15,7 +12,12 @@ module Proscenium
15
12
  javascript: 'app/javascript/'
16
13
  }.freeze
17
14
 
15
+ FILE_EXTENSIONS = ['js', 'mjs', 'ts', 'jsx', 'tsx', 'css', 'js.map', 'mjs.map', 'jsx.map',
16
+ 'ts.map', 'tsx.map', 'css.map'].freeze
18
17
  ALLOWED_DIRECTORIES = 'app,lib,config,vendor,node_modules'
18
+ APP_PATH_GLOB = "/{#{ALLOWED_DIRECTORIES}}/**.{#{FILE_EXTENSIONS.join(',')}}".freeze
19
+ GEMS_PATH_GLOB = "/node_modules/@rubygems/**.{#{FILE_EXTENSIONS.join(',')}}".freeze
20
+ CHUNKS_PATH = %r{^/_asset_chunks/}
19
21
 
20
22
  # Environment variables that should always be passed to the builder.
21
23
  DEFAULT_ENV_VARS = Set['RAILS_ENV', 'NODE_ENV'].freeze
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proscenium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.3
4
+ version: 0.21.5
5
5
  platform: x86_64-darwin
6
6
  authors:
7
7
  - Joel Moss
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-10-17 00:00:00.000000000 Z
11
+ date: 2025-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -70,6 +70,7 @@ files:
70
70
  - lib/proscenium/middleware/base.rb
71
71
  - lib/proscenium/middleware/esbuild.rb
72
72
  - lib/proscenium/middleware/ruby_gems.rb
73
+ - lib/proscenium/middleware/silence_request.rb
73
74
  - lib/proscenium/monkey.rb
74
75
  - lib/proscenium/railtie.rb
75
76
  - lib/proscenium/react-manager/index.jsx