proscenium 0.19.0.beta16 → 0.19.0.beta18

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: 7f9099b0a36f4297deb23000fa59be1f7b42821d0922ead517e0fa743b078079
4
- data.tar.gz: eb916375082bb5a3c849eb8374d218866fd05f8b5b57d2d43df607eff6213c1f
3
+ metadata.gz: 5db88847b4fad16f8c3c4bfd96c5f7f40f59726c65280fd81cf2cdeb0fd09c89
4
+ data.tar.gz: 4056f395c8f45fda017c334402ce4b7b268b72a2ec75cec47c190c63f565220a
5
5
  SHA512:
6
- metadata.gz: d24803aca9f34fd5e68a9d0e077e2ec72b9f34e94ae3dcc2bda39a2fa65449d00e9c9f4d7e1c3266af1b92c8b8958bbb302741e2ce094d2526f78c36829ed5b1
7
- data.tar.gz: 4c1a2d1dff84baea2578ca25aa58adc18c2c7929d95e975d0c6965749048ea7d9ebfc63c5c44a823f88de600cdc3eddde9a2f975aa779e47646bcda73c1063ae
6
+ metadata.gz: abde8e210ea532b606bbc66282553491b7e06910e5f4ce48faab5f68518d154e9ce746a4bd3ad9e4e0f5b71b19ad569b345ad9db5b83ea35124e64af3698f416
7
+ data.tar.gz: dca5b7f3ce4bd5fe17e62c7372e38b86444b75e27999a3c5ad1e10ebb4a910630aa7f2dce922d4a025b0b7bac822a905b26e62bf5463b007fd2f03c5821190da
@@ -16,7 +16,7 @@ module Proscenium
16
16
 
17
17
  module Request
18
18
  extend FFI::Library
19
- ffi_lib ENV.fetch('PROSCENIUM_BIN', Pathname.new(__dir__).join('ext/proscenium').to_s)
19
+ ffi_lib Pathname.new(__dir__).join('ext/proscenium').to_s
20
20
 
21
21
  enum :environment, [:development, 1, :test, :production]
22
22
 
@@ -1,44 +1,76 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ruby-next/language'
4
- require 'proscenium/core_ext/object/css_module_ivars'
3
+ require 'prism'
4
+ require 'require-hooks/setup'
5
5
 
6
6
  module Proscenium
7
7
  module CssModule
8
- class Rewriter < RubyNext::Language::Rewriters::Text
9
- NAME = 'proscenium-css-module'
8
+ class Rewriter
9
+ def self.init(include: [], exclude: [])
10
+ RequireHooks.source_transform(
11
+ patterns: include,
12
+ exclude_patterns: exclude
13
+ ) do |path, source|
14
+ source ||= File.read(path)
15
+ Processor.call(source)
16
+ end
17
+ end
18
+
19
+ class Processor < Prism::Visitor
20
+ def self.call(source)
21
+ visitor = new
22
+ visitor.visit(Prism.parse(source).value)
23
+
24
+ buffer = source.dup
25
+ annotations = visitor.annotations
26
+ annotations.sort_by!(&:first)
10
27
 
11
- def rewrite(source)
12
- source = source.gsub(/%i\[((@[\w@ ]+)|([\w@ ]+ @[\w@ ]+))\]/) do |_|
13
- arr = ::Regexp.last_match(1).split.map do |x|
14
- x.start_with?('@') ? css_module_string(x[1..]) : ":#{x}"
28
+ annotations.reverse_each do |offset, action|
29
+ case action
30
+ when :start
31
+ buffer.insert(offset, 'class_names(*')
32
+ when :end
33
+ buffer.insert(offset, ')')
34
+ else
35
+ raise 'Invalid annotation'
36
+ end
15
37
  end
16
- "[#{arr.join(',')}]"
38
+
39
+ buffer
17
40
  end
18
41
 
19
- source.gsub(/:@([\w]+)/) do |_|
20
- context.track!(self)
21
- css_module_string(::Regexp.last_match(1))
42
+ def initialize
43
+ @annotations = []
22
44
  end
23
- end
24
45
 
25
- private
46
+ PREFIX = '@'
47
+
48
+ attr_reader :annotations
49
+
50
+ def visit_assoc_node(node)
51
+ # Skip if the key is not a symbol or string
52
+ return if %i[symbol_node string_node].exclude?(node.key.type)
26
53
 
27
- def css_module_string(name)
28
- if (path = Pathname.new(context.path).sub_ext('.module.css')).exist?
29
- tname = Transformer.new(path).class_name!(name, name.dup).first
30
- "Proscenium::CssModule::Name.new(:@#{name}, '#{tname}', #{path})"
31
- else
32
- "Proscenium::CssModule::Name.new(:@#{name}, css_module(:#{name}), nil)"
54
+ return if node.key.type == :symbol_node && node.key.value != 'class'
55
+ return if node.key.type == :string_node && node.key.content != 'class'
56
+
57
+ value = node.value
58
+ type = value.type
59
+
60
+ if (type == :symbol_node && value.value.start_with?(PREFIX)) ||
61
+ (type == :array_node && value.elements.any? { |it| it.value.start_with?(PREFIX) })
62
+ build_annotation value
63
+ end
64
+ end
65
+
66
+ def build_annotation(value)
67
+ location = value.location
68
+
69
+ @annotations <<
70
+ [location.start_character_offset, :start] <<
71
+ [location.end_character_offset, :end]
33
72
  end
34
73
  end
35
74
  end
36
75
  end
37
76
  end
38
-
39
- RubyNext::Language.send :include_patterns=, []
40
- RubyNext::Language.include_patterns << "#{Rails.root.join('app', 'components')}/*.rb"
41
- RubyNext::Language.include_patterns << "#{Rails.root.join('app', 'views')}/*.rb"
42
- RubyNext::Language.rewriters = [Proscenium::CssModule::Rewriter]
43
-
44
- require 'ruby-next/language/runtime'
@@ -1,6 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Proscenium::CssModule
4
+ extend ActiveSupport::Autoload
5
+
6
+ autoload :Path
7
+ autoload :Transformer
8
+ autoload :Rewriter
9
+
4
10
  class TransformError < StandardError
5
11
  def initialize(name, additional_msg = nil)
6
12
  msg = "Failed to transform CSS module `#{name}`"
@@ -10,24 +16,6 @@ module Proscenium::CssModule
10
16
  end
11
17
  end
12
18
 
13
- class Name
14
- attr_reader :path
15
-
16
- def initialize(name, transform, path = nil)
17
- @name = name
18
- @transform = transform
19
- @path = path
20
- end
21
-
22
- def to_s
23
- @transform
24
- end
25
-
26
- def to_sym
27
- @name
28
- end
29
- end
30
-
31
19
  # Accepts one or more CSS class names, and transforms them into CSS module names.
32
20
  #
33
21
  # @param name [String,Symbol,Array<String,Symbol>]
Binary file
@@ -2,9 +2,15 @@
2
2
 
3
3
  module Proscenium
4
4
  class Middleware
5
+ extend ActiveSupport::Autoload
6
+
5
7
  # Error when the build command fails.
6
8
  class BuildError < StandardError; end
7
9
 
10
+ autoload :Base
11
+ autoload :Esbuild
12
+ autoload :RubyGems
13
+
8
14
  def initialize(app)
9
15
  @app = app
10
16
 
@@ -4,6 +4,12 @@ require 'phlex-rails'
4
4
 
5
5
  module Proscenium
6
6
  class Phlex < ::Phlex::HTML
7
+ extend ActiveSupport::Autoload
8
+
9
+ autoload :CssModules
10
+ autoload :ReactComponent
11
+ autoload :AssetInclusions
12
+
7
13
  include Proscenium::SourcePath
8
14
  include CssModules
9
15
  include AssetInclusions
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Proscenium
4
- VERSION = '0.19.0.beta16'
4
+ VERSION = '0.19.0.beta18'
5
5
  end
data/lib/proscenium.rb CHANGED
@@ -1,13 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'zeitwerk'
4
- require 'proscenium/railtie'
5
-
6
- loader = Zeitwerk::Loader.for_gem
7
- loader.ignore "#{__dir__}/proscenium/core_ext/object/css_module_ivars.rb"
8
- loader.setup
3
+ require 'active_support'
9
4
 
10
5
  module Proscenium
6
+ extend ActiveSupport::Autoload
7
+
11
8
  FILE_EXTENSIONS = ['js', 'mjs', 'ts', 'jsx', 'tsx', 'css', 'js.map', 'mjs.map', 'jsx.map',
12
9
  'ts.map', 'tsx.map', 'css.map'].freeze
13
10
 
@@ -23,6 +20,21 @@ module Proscenium
23
20
  # Environment variables that should always be passed to the builder.
24
21
  DEFAULT_ENV_VARS = Set['RAILS_ENV', 'NODE_ENV'].freeze
25
22
 
23
+ autoload :SourcePath
24
+ autoload :Utils
25
+ autoload :Monkey
26
+ autoload :Middleware
27
+ autoload :EnsureLoaded
28
+ autoload :SideLoad
29
+ autoload :CssModule
30
+ autoload :ReactComponentable
31
+ autoload :Phlex
32
+ autoload :Helper
33
+ autoload :Builder
34
+ autoload :Importer
35
+ autoload :Resolver
36
+ autoload :BundledGems
37
+
26
38
  class Deprecator
27
39
  def deprecation_warning(name, message, _caller_backtrace = nil)
28
40
  msg = "`#{name}` is deprecated and will be removed in a near future release of Proscenium"
@@ -52,3 +64,5 @@ module Proscenium
52
64
  end
53
65
  end
54
66
  end
67
+
68
+ require 'proscenium/railtie'
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.19.0.beta16
4
+ version: 0.19.0.beta18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Moss
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-26 00:00:00.000000000 Z
11
+ date: 2025-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -39,53 +39,53 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.2'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rails
42
+ name: prism
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 7.1.0
48
- - - "<"
49
- - !ruby/object:Gem::Version
50
- version: '9.0'
47
+ version: '0'
51
48
  type: :runtime
52
49
  prerelease: false
53
50
  version_requirements: !ruby/object:Gem::Requirement
54
51
  requirements:
55
52
  - - ">="
56
53
  - !ruby/object:Gem::Version
57
- version: 7.1.0
58
- - - "<"
59
- - !ruby/object:Gem::Version
60
- version: '9.0'
54
+ version: '0'
61
55
  - !ruby/object:Gem::Dependency
62
- name: ruby-next
56
+ name: rails
63
57
  requirement: !ruby/object:Gem::Requirement
64
58
  requirements:
65
- - - "~>"
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 7.1.0
62
+ - - "<"
66
63
  - !ruby/object:Gem::Version
67
- version: 1.1.1
64
+ version: '9.0'
68
65
  type: :runtime
69
66
  prerelease: false
70
67
  version_requirements: !ruby/object:Gem::Requirement
71
68
  requirements:
72
- - - "~>"
69
+ - - ">="
73
70
  - !ruby/object:Gem::Version
74
- version: 1.1.1
71
+ version: 7.1.0
72
+ - - "<"
73
+ - !ruby/object:Gem::Version
74
+ version: '9.0'
75
75
  - !ruby/object:Gem::Dependency
76
- name: zeitwerk
76
+ name: require-hooks
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: 2.7.2
81
+ version: '0.2'
82
82
  type: :runtime
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: 2.7.2
88
+ version: '0.2'
89
89
  description:
90
90
  email:
91
91
  - joel@developwithstyle.com
@@ -99,7 +99,6 @@ files:
99
99
  - lib/proscenium.rb
100
100
  - lib/proscenium/builder.rb
101
101
  - lib/proscenium/bundled_gems.rb
102
- - lib/proscenium/core_ext/object/css_module_ivars.rb
103
102
  - lib/proscenium/css_module.rb
104
103
  - lib/proscenium/css_module/path.rb
105
104
  - lib/proscenium/css_module/rewriter.rb
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Object
4
- def instance_variable_get(name)
5
- name.is_a?(::Proscenium::CssModule::Name) ? super(name.to_sym) : super
6
- end
7
-
8
- def instance_variable_set(name, obj)
9
- name.is_a?(::Proscenium::CssModule::Name) ? super(name.to_sym, obj) : super
10
- end
11
-
12
- def instance_variable_defined?(name)
13
- name.is_a?(::Proscenium::CssModule::Name) ? super(name.to_sym) : super
14
- end
15
-
16
- def remove_instance_variable(name)
17
- name.is_a?(::Proscenium::CssModule::Name) ? super(name.to_sym) : super
18
- end
19
- end