mayu-live 0.0.0
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 +7 -0
- data/COPYING +661 -0
- data/README.md +598 -0
- data/exe/mayu +33 -0
- data/lib/mayu/app_metrics.rb +93 -0
- data/lib/mayu/banner.rb +12 -0
- data/lib/mayu/client/README.md +17 -0
- data/lib/mayu/client/dist/DecompressionStreamPolyfill-3ceba43e.js +1 -0
- data/lib/mayu/client/dist/DecompressionStreamPolyfill-3ceba43e.js.br +0 -0
- data/lib/mayu/client/dist/DecompressionStreamPolyfill-3ceba43e.js.map +1 -0
- data/lib/mayu/client/dist/DecompressionStreamPolyfill-3ceba43e.js.map.br +0 -0
- data/lib/mayu/client/dist/custom-elements/mayu-alert-cd7ad2a4.js +1 -0
- data/lib/mayu/client/dist/custom-elements/mayu-alert-cd7ad2a4.js.map +1 -0
- data/lib/mayu/client/dist/custom-elements/mayu-disconnected-9f349f46.js +1 -0
- data/lib/mayu/client/dist/custom-elements/mayu-disconnected-9f349f46.js.map +1 -0
- data/lib/mayu/client/dist/custom-elements/mayu-exception-63df4e8c.js +1 -0
- data/lib/mayu/client/dist/custom-elements/mayu-exception-63df4e8c.js.map +1 -0
- data/lib/mayu/client/dist/custom-elements/mayu-ping-c498c2a6.js +1 -0
- data/lib/mayu/client/dist/custom-elements/mayu-ping-c498c2a6.js.map +1 -0
- data/lib/mayu/client/dist/custom-elements/mayu-progress-bar-eb3e1ac8.js +1 -0
- data/lib/mayu/client/dist/custom-elements/mayu-progress-bar-eb3e1ac8.js.map +1 -0
- data/lib/mayu/client/dist/entries.json +3 -0
- data/lib/mayu/client/dist/main-4b49dbc4.js +1 -0
- data/lib/mayu/client/dist/main-4b49dbc4.js.br +0 -0
- data/lib/mayu/client/dist/main-4b49dbc4.js.map +1 -0
- data/lib/mayu/client/dist/main-4b49dbc4.js.map.br +0 -0
- data/lib/mayu/client/package.json +39 -0
- data/lib/mayu/client/rollup.config.js +81 -0
- data/lib/mayu/client/src/DecompressionStream.ts +15 -0
- data/lib/mayu/client/src/DecompressionStreamPolyfill.ts +43 -0
- data/lib/mayu/client/src/MimeTypes.ts +4 -0
- data/lib/mayu/client/src/NodeTree.ts +445 -0
- data/lib/mayu/client/src/custom-elements/mayu-alert.html +137 -0
- data/lib/mayu/client/src/custom-elements/mayu-alert.ts +62 -0
- data/lib/mayu/client/src/custom-elements/mayu-disconnected.html +134 -0
- data/lib/mayu/client/src/custom-elements/mayu-disconnected.ts +51 -0
- data/lib/mayu/client/src/custom-elements/mayu-exception.html +79 -0
- data/lib/mayu/client/src/custom-elements/mayu-exception.ts +28 -0
- data/lib/mayu/client/src/custom-elements/mayu-log.html +70 -0
- data/lib/mayu/client/src/custom-elements/mayu-log.ts +42 -0
- data/lib/mayu/client/src/custom-elements/mayu-ping.html +36 -0
- data/lib/mayu/client/src/custom-elements/mayu-ping.ts +53 -0
- data/lib/mayu/client/src/custom-elements/mayu-progress-bar.html +44 -0
- data/lib/mayu/client/src/custom-elements/mayu-progress-bar.ts +40 -0
- data/lib/mayu/client/src/custom-elements/types.d.ts +4 -0
- data/lib/mayu/client/src/global.d.ts +26 -0
- data/lib/mayu/client/src/h.ts +27 -0
- data/lib/mayu/client/src/logger.ts +56 -0
- data/lib/mayu/client/src/main.ts +271 -0
- data/lib/mayu/client/src/serializeEvent.ts +90 -0
- data/lib/mayu/client/src/stream.ts +175 -0
- data/lib/mayu/client/src/types.ts +1 -0
- data/lib/mayu/client/src/utils.ts +71 -0
- data/lib/mayu/client/tsconfig.json +18 -0
- data/lib/mayu/colors.rb +34 -0
- data/lib/mayu/commands/base.rb +22 -0
- data/lib/mayu/commands/build.rb +82 -0
- data/lib/mayu/commands.rb +53 -0
- data/lib/mayu/component/base.rb +177 -0
- data/lib/mayu/component/handler_ref.rb +99 -0
- data/lib/mayu/component/helpers.rb +93 -0
- data/lib/mayu/component/interface.rb +18 -0
- data/lib/mayu/component/wrapper.rb +165 -0
- data/lib/mayu/component.rb +54 -0
- data/lib/mayu/configuration.rb +195 -0
- data/lib/mayu/disable_sorbet.rb +23 -0
- data/lib/mayu/environment.rb +151 -0
- data/lib/mayu/event_stream.rb +158 -0
- data/lib/mayu/fetch.rb +88 -0
- data/lib/mayu/html.rb +53 -0
- data/lib/mayu/html.yaml +767 -0
- data/lib/mayu/message_cipher.rb +172 -0
- data/lib/mayu/message_cipher.test.rb +16 -0
- data/lib/mayu/metrics/collector.rb +161 -0
- data/lib/mayu/metrics/exporter.rb +47 -0
- data/lib/mayu/metrics/reporter.rb +187 -0
- data/lib/mayu/metrics.rb +82 -0
- data/lib/mayu/ref_counter.rb +57 -0
- data/lib/mayu/resources/README.md +14 -0
- data/lib/mayu/resources/asset.rb +71 -0
- data/lib/mayu/resources/assets.rb +76 -0
- data/lib/mayu/resources/dependency_graph.rb +306 -0
- data/lib/mayu/resources/dot_exporter.rb +167 -0
- data/lib/mayu/resources/generators/base.rb +18 -0
- data/lib/mayu/resources/generators/copy_file.rb +26 -0
- data/lib/mayu/resources/generators/image.rb +106 -0
- data/lib/mayu/resources/generators/write_file.rb +39 -0
- data/lib/mayu/resources/hot_swap/file_watcher.rb +69 -0
- data/lib/mayu/resources/hot_swap.rb +46 -0
- data/lib/mayu/resources/mermaid_exporter.rb +210 -0
- data/lib/mayu/resources/registry.rb +190 -0
- data/lib/mayu/resources/resolver/base.rb +32 -0
- data/lib/mayu/resources/resolver/filesystem.rb +94 -0
- data/lib/mayu/resources/resolver/static.rb +27 -0
- data/lib/mayu/resources/resolver.rb +13 -0
- data/lib/mayu/resources/resource.rb +150 -0
- data/lib/mayu/resources/transformers/__test__/css/adjacent_selectors.in.css +3 -0
- data/lib/mayu/resources/transformers/__test__/css/adjacent_selectors.out.css +6 -0
- data/lib/mayu/resources/transformers/__test__/css/attributes.in.css +3 -0
- data/lib/mayu/resources/transformers/__test__/css/attributes.out.css +6 -0
- data/lib/mayu/resources/transformers/__test__/css/composes.in.css +6 -0
- data/lib/mayu/resources/transformers/__test__/css/composes.out.css +10 -0
- data/lib/mayu/resources/transformers/__test__/css/element_selectors.in.css +3 -0
- data/lib/mayu/resources/transformers/__test__/css/element_selectors.out.css +6 -0
- data/lib/mayu/resources/transformers/__test__/css/has.in.css +7 -0
- data/lib/mayu/resources/transformers/__test__/css/has.out.css +10 -0
- data/lib/mayu/resources/transformers/__test__/css/media_queries.in.css +8 -0
- data/lib/mayu/resources/transformers/__test__/css/media_queries.out.css +12 -0
- data/lib/mayu/resources/transformers/__test__/css/pseudo_classes.in.css +5 -0
- data/lib/mayu/resources/transformers/__test__/css/pseudo_classes.out.css +6 -0
- data/lib/mayu/resources/transformers/__test__/haml/README.md +10 -0
- data/lib/mayu/resources/transformers/__test__/haml/case.haml +8 -0
- data/lib/mayu/resources/transformers/__test__/haml/case.rb +15 -0
- data/lib/mayu/resources/transformers/__test__/haml/class_names.haml +13 -0
- data/lib/mayu/resources/transformers/__test__/haml/class_names.rb +26 -0
- data/lib/mayu/resources/transformers/__test__/haml/comments.haml +5 -0
- data/lib/mayu/resources/transformers/__test__/haml/comments.rb +5 -0
- data/lib/mayu/resources/transformers/__test__/haml/css.haml +3 -0
- data/lib/mayu/resources/transformers/__test__/haml/css.rb +11 -0
- data/lib/mayu/resources/transformers/__test__/haml/dashes.haml +3 -0
- data/lib/mayu/resources/transformers/__test__/haml/dashes.rb +11 -0
- data/lib/mayu/resources/transformers/__test__/haml/early_return.haml +4 -0
- data/lib/mayu/resources/transformers/__test__/haml/early_return.rb +9 -0
- data/lib/mayu/resources/transformers/__test__/haml/early_return2.haml +3 -0
- data/lib/mayu/resources/transformers/__test__/haml/early_return2.rb +6 -0
- data/lib/mayu/resources/transformers/__test__/haml/handlers.haml +6 -0
- data/lib/mayu/resources/transformers/__test__/haml/handlers.rb +12 -0
- data/lib/mayu/resources/transformers/__test__/haml/if_else.haml +6 -0
- data/lib/mayu/resources/transformers/__test__/haml/if_else.rb +12 -0
- data/lib/mayu/resources/transformers/__test__/haml/interpolation.haml +8 -0
- data/lib/mayu/resources/transformers/__test__/haml/interpolation.rb +11 -0
- data/lib/mayu/resources/transformers/__test__/haml/object_ref_as_key.haml +1 -0
- data/lib/mayu/resources/transformers/__test__/haml/object_ref_as_key.rb +5 -0
- data/lib/mayu/resources/transformers/__test__/haml/props.haml +4 -0
- data/lib/mayu/resources/transformers/__test__/haml/props.rb +11 -0
- data/lib/mayu/resources/transformers/__test__/haml/slots.haml +5 -0
- data/lib/mayu/resources/transformers/__test__/haml/slots.rb +9 -0
- data/lib/mayu/resources/transformers/__test__/haml/slots_dynamic.haml +3 -0
- data/lib/mayu/resources/transformers/__test__/haml/slots_dynamic.rb +9 -0
- data/lib/mayu/resources/transformers/__test__/haml/slots_fallback.haml +3 -0
- data/lib/mayu/resources/transformers/__test__/haml/slots_fallback.rb +5 -0
- data/lib/mayu/resources/transformers/__test__/haml/spacing.haml +5 -0
- data/lib/mayu/resources/transformers/__test__/haml/spacing.rb +14 -0
- data/lib/mayu/resources/transformers/__test__/haml/spacing2.haml +10 -0
- data/lib/mayu/resources/transformers/__test__/haml/spacing2.rb +11 -0
- data/lib/mayu/resources/transformers/__test__/haml/spacing3.haml +3 -0
- data/lib/mayu/resources/transformers/__test__/haml/spacing3.rb +10 -0
- data/lib/mayu/resources/transformers/css/rouge_lexer.rb +841 -0
- data/lib/mayu/resources/transformers/css.rb +100 -0
- data/lib/mayu/resources/transformers/css.test.rb +87 -0
- data/lib/mayu/resources/transformers/haml.rb +984 -0
- data/lib/mayu/resources/transformers/haml.test.rb +114 -0
- data/lib/mayu/resources/types/README.md +36 -0
- data/lib/mayu/resources/types/base.rb +35 -0
- data/lib/mayu/resources/types/component.rb +198 -0
- data/lib/mayu/resources/types/image.rb +169 -0
- data/lib/mayu/resources/types/javascript.rb +50 -0
- data/lib/mayu/resources/types/nil.rb +23 -0
- data/lib/mayu/resources/types/stylesheet.rb +119 -0
- data/lib/mayu/resources/types/svg.rb +69 -0
- data/lib/mayu/resources/types.rb +37 -0
- data/lib/mayu/routes.rb +170 -0
- data/lib/mayu/routing/builder.rb +108 -0
- data/lib/mayu/routing/matcher.rb +58 -0
- data/lib/mayu/routing/routes.rb +85 -0
- data/lib/mayu/routing.rb +17 -0
- data/lib/mayu/server/app.rb +494 -0
- data/lib/mayu/server/controller.rb +152 -0
- data/lib/mayu/server/errors.rb +110 -0
- data/lib/mayu/server/file_server.rb +140 -0
- data/lib/mayu/server.rb +63 -0
- data/lib/mayu/session.rb +358 -0
- data/lib/mayu/state/README.md +6 -0
- data/lib/mayu/state/action_creator.rb +191 -0
- data/lib/mayu/state/action_wrapper.rb +30 -0
- data/lib/mayu/state/loader.rb +220 -0
- data/lib/mayu/state/store.rb +82 -0
- data/lib/mayu/state.rb +8 -0
- data/lib/mayu/state.test.rb +97 -0
- data/lib/mayu/utils.rb +114 -0
- data/lib/mayu/vdom/children.rb +117 -0
- data/lib/mayu/vdom/component_marshaler.rb +53 -0
- data/lib/mayu/vdom/css_attributes.rb +131 -0
- data/lib/mayu/vdom/descriptor.rb +151 -0
- data/lib/mayu/vdom/descriptor.test.rb +26 -0
- data/lib/mayu/vdom/dom.rb +239 -0
- data/lib/mayu/vdom/h.rb +22 -0
- data/lib/mayu/vdom/id_generator.rb +55 -0
- data/lib/mayu/vdom/interfaces.rb +186 -0
- data/lib/mayu/vdom/marshalling.rb +78 -0
- data/lib/mayu/vdom/reconciliation.rb +205 -0
- data/lib/mayu/vdom/reconciliation.test.rb +56 -0
- data/lib/mayu/vdom/special_elements.rb +108 -0
- data/lib/mayu/vdom/update_context.rb +180 -0
- data/lib/mayu/vdom/vdom.perf.test.rb +146 -0
- data/lib/mayu/vdom/vnode.rb +266 -0
- data/lib/mayu/vdom/vtree.rb +672 -0
- data/lib/mayu/vdom/vtree.test.rb +68 -0
- data/lib/mayu/vdom.rb +8 -0
- data/lib/mayu/vdom.test.rb +73 -0
- data/lib/mayu/version.rb +6 -0
- data/lib/mayu.rb +8 -0
- data/mayu-live.gemspec +70 -0
- metadata +612 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# typed: strict
|
3
|
+
|
4
|
+
module Mayu
|
5
|
+
module Resources
|
6
|
+
module Resolver
|
7
|
+
class Base
|
8
|
+
class ResolveError < StandardError
|
9
|
+
end
|
10
|
+
|
11
|
+
extend T::Sig
|
12
|
+
extend T::Helpers
|
13
|
+
abstract!
|
14
|
+
|
15
|
+
sig { returns(T::Hash[String, String]) }
|
16
|
+
attr_reader :resolved_paths
|
17
|
+
|
18
|
+
sig { void }
|
19
|
+
def initialize
|
20
|
+
@resolved_paths = T.let({}, T::Hash[String, String])
|
21
|
+
end
|
22
|
+
|
23
|
+
sig do
|
24
|
+
overridable.params(path: String, source_dir: String).returns(String)
|
25
|
+
end
|
26
|
+
def resolve(path, source_dir = "/")
|
27
|
+
raise ResolveError, "Could not resolve #{path} from #{source_dir}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# typed: strict
|
3
|
+
|
4
|
+
require_relative "base"
|
5
|
+
|
6
|
+
module Mayu
|
7
|
+
module Resources
|
8
|
+
module Resolver
|
9
|
+
class Filesystem < Base
|
10
|
+
sig { params(root: String, extensions: T::Array[String]).void }
|
11
|
+
def initialize(root, extensions: [""])
|
12
|
+
super()
|
13
|
+
@root = root
|
14
|
+
@extensions = extensions
|
15
|
+
end
|
16
|
+
|
17
|
+
sig do
|
18
|
+
override.params(path: String, source_dir: String).returns(String)
|
19
|
+
end
|
20
|
+
def resolve(path, source_dir = "/")
|
21
|
+
# TODO: Fix this!!
|
22
|
+
# if path.start_with?("/")
|
23
|
+
# return resolve(".#{path}", "/")
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# if !path.match(/\A\.\.?\//)
|
27
|
+
# return resolve("./#{path}", "/components")
|
28
|
+
# end
|
29
|
+
|
30
|
+
relative_to_root = File.absolute_path(path, source_dir)
|
31
|
+
|
32
|
+
if found = @resolved_paths[relative_to_root]
|
33
|
+
return found
|
34
|
+
end
|
35
|
+
|
36
|
+
absolute_path = File.join(@root, relative_to_root)
|
37
|
+
|
38
|
+
resolve_with_extensions(absolute_path) do |extension|
|
39
|
+
return(
|
40
|
+
@resolved_paths.store(
|
41
|
+
relative_to_root,
|
42
|
+
relative_to_root + extension
|
43
|
+
)
|
44
|
+
)
|
45
|
+
end
|
46
|
+
|
47
|
+
if File.directory?(absolute_path)
|
48
|
+
basename = File.basename(absolute_path)
|
49
|
+
|
50
|
+
resolve_with_extensions(
|
51
|
+
File.join(absolute_path, basename)
|
52
|
+
) do |extension|
|
53
|
+
return(
|
54
|
+
@resolved_paths.store(
|
55
|
+
relative_to_root,
|
56
|
+
File.join(relative_to_root, basename) + extension
|
57
|
+
)
|
58
|
+
)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
raise ResolveError,
|
63
|
+
"Could not resolve #{path} from #{source_dir} (app root: #{@root})"
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
sig do
|
69
|
+
params(
|
70
|
+
absolute_path: String,
|
71
|
+
block: T.proc.params(arg0: String).void
|
72
|
+
).void
|
73
|
+
end
|
74
|
+
def resolve_with_extensions(absolute_path, &block)
|
75
|
+
@extensions.find do |extension|
|
76
|
+
absolute_path_with_extension = absolute_path + extension
|
77
|
+
|
78
|
+
if File.file?(absolute_path_with_extension)
|
79
|
+
puts "\e[1mFound #{absolute_path_with_extension}\e[0m"
|
80
|
+
yield extension
|
81
|
+
else
|
82
|
+
puts "\e[2mTried #{absolute_path_with_extension}\e[0m"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
sig { params(path: String).returns(T::Boolean) }
|
88
|
+
def exist?(path)
|
89
|
+
File.exist?(path)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# typed: strict
|
3
|
+
|
4
|
+
require_relative "base"
|
5
|
+
|
6
|
+
module Mayu
|
7
|
+
module Resources
|
8
|
+
module Resolver
|
9
|
+
class Static < Base
|
10
|
+
sig { params(paths: T::Hash[String, String]).void }
|
11
|
+
def initialize(paths)
|
12
|
+
super()
|
13
|
+
@resolved_paths = paths
|
14
|
+
# Console.logger.info(self, *@resolved_paths.map { "#{_1} => #{_2}" })
|
15
|
+
end
|
16
|
+
|
17
|
+
sig do
|
18
|
+
override.params(path: String, source_dir: String).returns(String)
|
19
|
+
end
|
20
|
+
def resolve(path, source_dir = "/")
|
21
|
+
relative_to_root = File.absolute_path(path, source_dir)
|
22
|
+
@resolved_paths[relative_to_root] || relative_to_root
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# typed: strict
|
3
|
+
|
4
|
+
module Mayu
|
5
|
+
module Resources
|
6
|
+
module Resolver
|
7
|
+
# https://bugs.ruby-lang.org/issues/15330
|
8
|
+
# https://bugs.ruby-lang.org/issues/18841
|
9
|
+
autoload :Static, File.join(__dir__, "resolver", "static")
|
10
|
+
autoload :Filesystem, File.join(__dir__, "resolver", "filesystem")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# typed: strict
|
3
|
+
|
4
|
+
require "digest"
|
5
|
+
|
6
|
+
module Mayu
|
7
|
+
module Resources
|
8
|
+
class Resource < Module
|
9
|
+
class Wrapper < BasicObject
|
10
|
+
extend ::T::Sig
|
11
|
+
|
12
|
+
sig { params(impl: ::T.untyped).void }
|
13
|
+
def initialize(impl)
|
14
|
+
@impl = impl
|
15
|
+
end
|
16
|
+
|
17
|
+
sig do
|
18
|
+
params(
|
19
|
+
meth: ::Symbol,
|
20
|
+
args: ::T.untyped,
|
21
|
+
kwargs: ::T.untyped,
|
22
|
+
block: ::T.untyped
|
23
|
+
).returns(::T.untyped)
|
24
|
+
end
|
25
|
+
def method_missing(meth, *args, **kwargs, &block)
|
26
|
+
@impl.send(meth, *args, **kwargs, &block)
|
27
|
+
end
|
28
|
+
|
29
|
+
sig { params(impl: ::T.untyped).returns(::T.untyped) }
|
30
|
+
def __replace_impl!(impl)
|
31
|
+
@impl = impl
|
32
|
+
end
|
33
|
+
|
34
|
+
sig { returns(::String) }
|
35
|
+
def inspect
|
36
|
+
"#<Resource::Wrapper @impl=#{@impl.inspect}>"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
extend T::Sig
|
41
|
+
|
42
|
+
Impl = T.type_alias { T.untyped }
|
43
|
+
|
44
|
+
sig { returns(Registry) }
|
45
|
+
attr_reader :registry
|
46
|
+
sig { returns(String) }
|
47
|
+
attr_reader :path
|
48
|
+
sig { returns(String) }
|
49
|
+
attr_reader :path_hash
|
50
|
+
sig { returns(T.untyped) }
|
51
|
+
attr_reader :wrapper
|
52
|
+
|
53
|
+
sig { params(registry: Registry, path: String).void }
|
54
|
+
def initialize(registry:, path:)
|
55
|
+
@registry = registry
|
56
|
+
@path = path
|
57
|
+
@path_hash = T.let(Digest::SHA256.hexdigest(path), String)
|
58
|
+
@type = T.let(nil, T.untyped)
|
59
|
+
@wrapper = T.let(Wrapper.new(nil), T.untyped)
|
60
|
+
@content_hash = T.let(nil, T.nilable(String))
|
61
|
+
end
|
62
|
+
|
63
|
+
sig { params(encoding: String).returns(String) }
|
64
|
+
def read(encoding: "binary")
|
65
|
+
File.read(absolute_path)
|
66
|
+
end
|
67
|
+
|
68
|
+
sig { returns(T::Boolean) }
|
69
|
+
def exists?
|
70
|
+
File.exist?(absolute_path)
|
71
|
+
end
|
72
|
+
|
73
|
+
sig { returns(String) }
|
74
|
+
def content_hash
|
75
|
+
@content_hash ||= calculate_content_hash
|
76
|
+
end
|
77
|
+
|
78
|
+
sig { returns(String) }
|
79
|
+
def calculate_content_hash
|
80
|
+
Digest::SHA256.file(absolute_path).digest
|
81
|
+
end
|
82
|
+
|
83
|
+
sig { returns(T::Array[Asset]) }
|
84
|
+
def assets
|
85
|
+
self.type&.assets || []
|
86
|
+
end
|
87
|
+
|
88
|
+
sig { params(assets_dir: String).returns(T::Array[Asset]) }
|
89
|
+
def generate_assets(assets_dir)
|
90
|
+
if type = self.type
|
91
|
+
type.generate_assets(assets_dir)
|
92
|
+
else
|
93
|
+
[]
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
sig { returns(String) }
|
98
|
+
def app_root = @registry.root
|
99
|
+
|
100
|
+
sig { returns(String) }
|
101
|
+
def absolute_path = @registry.absolute_path(@path)
|
102
|
+
|
103
|
+
sig { returns(T.untyped) }
|
104
|
+
def type
|
105
|
+
@type || load_type
|
106
|
+
end
|
107
|
+
|
108
|
+
sig { returns(T.untyped) }
|
109
|
+
def load_type
|
110
|
+
@content_hash = nil
|
111
|
+
@wrapper.__replace_impl!(
|
112
|
+
@type =
|
113
|
+
if exists?
|
114
|
+
Types.for_path(self.path).new(self)
|
115
|
+
else
|
116
|
+
Types::Nil.new(self)
|
117
|
+
end
|
118
|
+
)
|
119
|
+
end
|
120
|
+
|
121
|
+
sig { params(path: String).returns(T.untyped) }
|
122
|
+
def import(path)
|
123
|
+
resource = self.registry.load_resource(path, File.dirname(self.path))
|
124
|
+
self.registry.dependency_graph.add_dependency(self.path, resource.path)
|
125
|
+
resource.type
|
126
|
+
end
|
127
|
+
|
128
|
+
MarshalFormat =
|
129
|
+
T.type_alias do
|
130
|
+
[String, String, T.nilable(String), Resources::Types::Base]
|
131
|
+
end
|
132
|
+
|
133
|
+
sig { returns(MarshalFormat) }
|
134
|
+
def marshal_dump
|
135
|
+
if exists?
|
136
|
+
[path, path_hash, content_hash, type]
|
137
|
+
else
|
138
|
+
[path, path_hash, nil, type]
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
sig { params(args: MarshalFormat).void }
|
143
|
+
def marshal_load(args)
|
144
|
+
@path, @path_hash, @content_hash, @type = args
|
145
|
+
@type.instance_variable_set(:@resource, self)
|
146
|
+
@wrapper = Wrapper.new(@type)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
@layer app\/components\/MyComponent\?tjLaPD8V {
|
2
|
+
.app\/components\/MyComponent\.formGroup\?vNHgJWqX:has(:invalid) {
|
3
|
+
--color: var(--invalid);
|
4
|
+
}
|
5
|
+
|
6
|
+
.app\/components\/MyComponent\.formGroup\?vNHgJWqX:has(:invalid:not(:focus)) {
|
7
|
+
animation: .25s shake;
|
8
|
+
}
|
9
|
+
|
10
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
Self = setup_component(assets: [], styles: {})
|
3
|
+
public def render
|
4
|
+
Mayu::VDOM::H[
|
5
|
+
:div,
|
6
|
+
case props[:value]
|
7
|
+
when "foo"
|
8
|
+
Mayu::VDOM::H[:p, "Foo"]
|
9
|
+
when "bar"
|
10
|
+
Mayu::VDOM::H[:p, "Bar"]
|
11
|
+
else
|
12
|
+
Mayu::VDOM::H[:p, "Other"]
|
13
|
+
end
|
14
|
+
]
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
:ruby
|
2
|
+
lol = "lol"
|
3
|
+
id = "check123"
|
4
|
+
props = { label: "label", asd: "asd" }
|
5
|
+
|
6
|
+
%div.foo(class="bar" asdd=lol){class: "baz"}
|
7
|
+
= "hello"
|
8
|
+
%input(id=id){
|
9
|
+
class: classname,
|
10
|
+
type: "checkbox",
|
11
|
+
placeholder: props[:label],
|
12
|
+
**props.except(:label),
|
13
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
Self = setup_component(assets: [], styles: {})
|
3
|
+
begin
|
4
|
+
lol = "lol"
|
5
|
+
id = "check123"
|
6
|
+
props = { label: "label", asd: "asd" }
|
7
|
+
end
|
8
|
+
public def render
|
9
|
+
Mayu::VDOM::H[
|
10
|
+
:div,
|
11
|
+
"hello",
|
12
|
+
Mayu::VDOM::H[
|
13
|
+
:input,
|
14
|
+
**mayu.merge_props(
|
15
|
+
{
|
16
|
+
class: classname,
|
17
|
+
type: "checkbox",
|
18
|
+
placeholder: props[:label],
|
19
|
+
**props.except(:label)
|
20
|
+
},
|
21
|
+
{ id: id }
|
22
|
+
)
|
23
|
+
],
|
24
|
+
**mayu.merge_props({ class: %i[foo bar] }, { class: "baz" }, { asdd: lol })
|
25
|
+
]
|
26
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
Self =
|
3
|
+
setup_component(
|
4
|
+
assets: ["rKxGn-R511h2m1nlvs18PwsPwrzW-iGCNVojf-x0LRg=.css"],
|
5
|
+
styles: {
|
6
|
+
button: "app/components/MyComponent.button?dhhHwAZl"
|
7
|
+
}
|
8
|
+
)
|
9
|
+
public def render
|
10
|
+
Mayu::VDOM::H[:button, "Click me", **mayu.merge_props({ class: :button })]
|
11
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
Self = setup_component(assets: [], styles: {})
|
3
|
+
def handle_click(e)
|
4
|
+
Console.logger.info(self, e)
|
5
|
+
end
|
6
|
+
public def render
|
7
|
+
Mayu::VDOM::H[
|
8
|
+
:button,
|
9
|
+
"Click me",
|
10
|
+
**mayu.merge_props({ onclick: mayu.handler(:handle_click) })
|
11
|
+
]
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
Self = setup_component(assets: [], styles: {})
|
3
|
+
begin
|
4
|
+
# setup
|
5
|
+
end
|
6
|
+
public def render
|
7
|
+
if true
|
8
|
+
Mayu::VDOM::H[:div, **mayu.merge_props({ class: :foo })]
|
9
|
+
else
|
10
|
+
Mayu::VDOM::H[:div, **mayu.merge_props({ class: :bar })]
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
Self = setup_component(assets: [], styles: {})
|
3
|
+
public def render
|
4
|
+
Mayu::VDOM::H[
|
5
|
+
:div,
|
6
|
+
Mayu::VDOM::H[:div, "foo #{bar} baz"],
|
7
|
+
Mayu::VDOM::H[:div, "foo #{bar} baz"],
|
8
|
+
Mayu::VDOM::H[:div, "foo #{bar} baz"],
|
9
|
+
Mayu::VDOM::H[:div, ("lol #{boll} polle" if bar)]
|
10
|
+
]
|
11
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
%div["hello"]
|