proscenium 0.9.1-x86_64-darwin → 0.11.0.pre.1-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 +4 -4
- data/README.md +423 -63
- data/lib/proscenium/builder.rb +126 -0
- data/lib/proscenium/css_module/path.rb +31 -0
- data/lib/proscenium/css_module/transformer.rb +76 -0
- data/lib/proscenium/css_module.rb +6 -28
- data/lib/proscenium/ensure_loaded.rb +27 -0
- data/lib/proscenium/ext/proscenium +0 -0
- data/lib/proscenium/ext/proscenium.h +19 -12
- data/lib/proscenium/helper.rb +62 -0
- data/lib/proscenium/importer.rb +110 -0
- data/lib/proscenium/libs/react-manager/index.jsx +88 -0
- data/lib/proscenium/libs/react-manager/react.js +2 -0
- data/lib/proscenium/libs/stimulus-loading.js +83 -0
- data/lib/proscenium/log_subscriber.rb +1 -2
- data/lib/proscenium/middleware/base.rb +1 -1
- data/lib/proscenium/middleware/esbuild.rb +3 -5
- data/lib/proscenium/middleware.rb +7 -1
- data/lib/proscenium/{side_load/monkey.rb → monkey.rb} +16 -12
- data/lib/proscenium/phlex/{resolve_css_modules.rb → css_modules.rb} +6 -20
- data/lib/proscenium/phlex/page.rb +2 -2
- data/lib/proscenium/phlex/react_component.rb +27 -64
- data/lib/proscenium/phlex.rb +10 -29
- data/lib/proscenium/railtie.rb +20 -22
- data/lib/proscenium/react_componentable.rb +94 -0
- data/lib/proscenium/resolver.rb +37 -0
- data/lib/proscenium/side_load.rb +13 -72
- data/lib/proscenium/source_path.rb +15 -0
- data/lib/proscenium/utils.rb +13 -0
- data/lib/proscenium/version.rb +1 -1
- data/lib/proscenium/view_component/css_modules.rb +11 -0
- data/lib/proscenium/view_component/react_component.rb +15 -28
- data/lib/proscenium/view_component/sideload.rb +4 -0
- data/lib/proscenium/view_component.rb +8 -31
- data/lib/proscenium.rb +24 -68
- metadata +21 -58
- data/lib/proscenium/css_module/class_names_resolver.rb +0 -66
- data/lib/proscenium/css_module/resolver.rb +0 -76
- data/lib/proscenium/current.rb +0 -9
- data/lib/proscenium/esbuild/golib.rb +0 -97
- data/lib/proscenium/esbuild.rb +0 -32
- data/lib/proscenium/phlex/component_concerns.rb +0 -27
- data/lib/proscenium/side_load/ensure_loaded.rb +0 -25
- data/lib/proscenium/side_load/helper.rb +0 -25
- data/lib/proscenium/view_component/tag_builder.rb +0 -23
@@ -1,97 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'ffi'
|
4
|
-
require 'oj'
|
5
|
-
|
6
|
-
module Proscenium
|
7
|
-
class Esbuild::Golib
|
8
|
-
class Result < FFI::Struct
|
9
|
-
layout :success, :bool,
|
10
|
-
:response, :string
|
11
|
-
end
|
12
|
-
|
13
|
-
module Request
|
14
|
-
extend FFI::Library
|
15
|
-
ffi_lib Pathname.new(__dir__).join('../ext/proscenium').to_s
|
16
|
-
|
17
|
-
enum :environment, [:development, 1, :test, :production]
|
18
|
-
|
19
|
-
attach_function :build, [
|
20
|
-
:string, # path or entry point
|
21
|
-
:string, # root
|
22
|
-
:string, # base URL of the Rails app. eg. https://example.com
|
23
|
-
:environment, # Rails environment as a Symbol
|
24
|
-
:string, # path to import map, relative to root
|
25
|
-
:bool # debugging enabled?
|
26
|
-
], Result.by_value
|
27
|
-
|
28
|
-
attach_function :resolve, [
|
29
|
-
:string, # path or entry point
|
30
|
-
:string, # root
|
31
|
-
:environment, # Rails environment as a Symbol
|
32
|
-
:string # path to import map, relative to root
|
33
|
-
], Result.by_value
|
34
|
-
end
|
35
|
-
|
36
|
-
class BuildError < StandardError
|
37
|
-
attr_reader :error, :path
|
38
|
-
|
39
|
-
def initialize(path, error)
|
40
|
-
error = Oj.load(error, mode: :strict).deep_transform_keys(&:underscore)
|
41
|
-
|
42
|
-
super "Failed to build '#{path}' -- #{error['text']}"
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
class ResolveError < StandardError
|
47
|
-
attr_reader :error_msg, :path
|
48
|
-
|
49
|
-
def initialize(path, error_msg)
|
50
|
-
super "Failed to resolve '#{path}' -- #{error_msg}"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def initialize(root: nil, base_url: nil)
|
55
|
-
@root = root || Rails.root
|
56
|
-
@base_url = base_url
|
57
|
-
end
|
58
|
-
|
59
|
-
def self.resolve(path)
|
60
|
-
new.resolve(path)
|
61
|
-
end
|
62
|
-
|
63
|
-
def self.build(path)
|
64
|
-
new.build(path)
|
65
|
-
end
|
66
|
-
|
67
|
-
def build(path)
|
68
|
-
result = Request.build(path, @root.to_s, @base_url, Rails.env.to_sym, import_map,
|
69
|
-
Rails.env.development?)
|
70
|
-
raise BuildError.new(path, result[:response]) unless result[:success]
|
71
|
-
|
72
|
-
result[:response]
|
73
|
-
end
|
74
|
-
|
75
|
-
def resolve(path)
|
76
|
-
result = Request.resolve(path, @root.to_s, Rails.env.to_sym, import_map)
|
77
|
-
raise ResolveError.new(path, result[:response]) unless result[:success]
|
78
|
-
|
79
|
-
result[:response]
|
80
|
-
end
|
81
|
-
|
82
|
-
private
|
83
|
-
|
84
|
-
def import_map
|
85
|
-
return unless (path = Rails.root&.join('config'))
|
86
|
-
|
87
|
-
if (json = path.join('import_map.json')).exist?
|
88
|
-
return json.relative_path_from(@root).to_s
|
89
|
-
end
|
90
|
-
if (js = path.join('import_map.js')).exist?
|
91
|
-
return js.relative_path_from(@root).to_s
|
92
|
-
end
|
93
|
-
|
94
|
-
nil
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
data/lib/proscenium/esbuild.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Proscenium
|
4
|
-
class Esbuild
|
5
|
-
class CompileError < StandardError; end
|
6
|
-
|
7
|
-
extend ActiveSupport::Autoload
|
8
|
-
|
9
|
-
autoload :Golib
|
10
|
-
|
11
|
-
def self.build(...)
|
12
|
-
new(...).build
|
13
|
-
end
|
14
|
-
|
15
|
-
def initialize(path, root:, base_url:)
|
16
|
-
@path = path
|
17
|
-
@root = root
|
18
|
-
@base_url = base_url
|
19
|
-
end
|
20
|
-
|
21
|
-
def build
|
22
|
-
Proscenium::Esbuild::Golib.new(root: @root, base_url: @base_url).build(@path)
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def cache_query_string
|
28
|
-
q = Proscenium.config.cache_query_string
|
29
|
-
q ? "--cache-query-string #{q}" : nil
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Proscenium::Phlex::ComponentConcerns
|
4
|
-
module CssModules
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
include Proscenium::CssModule
|
7
|
-
include Proscenium::Phlex::ResolveCssModules
|
8
|
-
|
9
|
-
# class_methods do
|
10
|
-
# # FIXME: Still needed?
|
11
|
-
# def path
|
12
|
-
# pp name, super
|
13
|
-
# pp Module.const_source_location(name).first
|
14
|
-
|
15
|
-
# name && Pathname.new(Module.const_source_location(name).first)
|
16
|
-
# rescue NameError
|
17
|
-
# nil
|
18
|
-
# end
|
19
|
-
# end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def path
|
24
|
-
self.class.path
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class Proscenium::SideLoad
|
4
|
-
module EnsureLoaded
|
5
|
-
def self.included(child)
|
6
|
-
child.class_eval do
|
7
|
-
append_after_action do
|
8
|
-
if Proscenium::Current.loaded
|
9
|
-
if Proscenium::Current.loaded[:js].present?
|
10
|
-
raise NotIncludedError, 'There are javascripts to be side loaded, but they have not ' \
|
11
|
-
'been included. Did you forget to add the ' \
|
12
|
-
'`#side_load_javascripts` helper in your views?'
|
13
|
-
end
|
14
|
-
|
15
|
-
if Proscenium::Current.loaded[:css].present?
|
16
|
-
raise NotIncludedError, 'There are stylesheets to be side loaded, but they have not ' \
|
17
|
-
'been included. Did you forget to add the ' \
|
18
|
-
'`#side_load_stylesheets` helper in your views?'
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Proscenium
|
4
|
-
module SideLoad::Helper
|
5
|
-
def side_load_stylesheets
|
6
|
-
return unless Proscenium::Current.loaded
|
7
|
-
|
8
|
-
out = []
|
9
|
-
Proscenium::Current.loaded[:css].delete_if do |path|
|
10
|
-
out << stylesheet_link_tag(path, extname: false)
|
11
|
-
end
|
12
|
-
out.join("\n").html_safe
|
13
|
-
end
|
14
|
-
|
15
|
-
def side_load_javascripts(**options)
|
16
|
-
return unless Proscenium::Current.loaded
|
17
|
-
|
18
|
-
out = []
|
19
|
-
Proscenium::Current.loaded[:js].delete_if do |path|
|
20
|
-
out << javascript_include_tag(path, extname: false, **options)
|
21
|
-
end
|
22
|
-
out.join("\n").html_safe
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class Proscenium::ViewComponent::TagBuilder < ActionView::Helpers::TagHelper::TagBuilder
|
4
|
-
def tag_options(options, escape = true) # rubocop:disable Style/OptionalBooleanParameter
|
5
|
-
super(css_module_option(options), escape)
|
6
|
-
end
|
7
|
-
|
8
|
-
private
|
9
|
-
|
10
|
-
def css_module_option(options)
|
11
|
-
return options if options.blank?
|
12
|
-
|
13
|
-
unless (css_module = options.delete(:css_module) || options.delete('css_module'))
|
14
|
-
return options
|
15
|
-
end
|
16
|
-
|
17
|
-
css_module = @view_context.css_module(css_module)
|
18
|
-
|
19
|
-
options.tap do |x|
|
20
|
-
x[:class] = "#{css_module} #{options.delete(:class) || options.delete('class')}".strip
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|