isomorfeus-preact 22.10.0.rc1 → 22.10.0.rc2

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: 52289511155a5b8805b447f322b7bb1c12f32d11a7b622b65ddce9904da6ed32
4
- data.tar.gz: 3d4b57c6a439b9aebca2202ebb839eef61071b84375f41df5d77b23b0044d096
3
+ metadata.gz: ed19ddda76f48b8c66af26970d4f7b4e1927b9061bf6ec9080dc40d5e51ff1cd
4
+ data.tar.gz: 97cc9fc63e4a06bb9a7d8dd6f7b2d90737f681935bc21f274870658c26e77e5d
5
5
  SHA512:
6
- metadata.gz: 978253c3a2ddf848ea644d8e5625ef5f31f6af4358e16245bf83943132e3ae1528624df232bd8b1ad0f49db218da77c3d8145bd2aa6c77ff57efef6cedbbf1c0
7
- data.tar.gz: 7d0a9a76d291c523f87100a47277d1752d4e9ccc9d6c3fcfea4b5a6c2c09fbbb9a2408d2762ea239d937dfb0e3a1167b6750c334c35c11fea33f028bf737acc3
6
+ metadata.gz: e39ee8b131d18503cb85f83b0a3750b32163661aa46d368933f06bf4d09b873c5d1a36a03b2c54c352956c49c785be245530fa65d4eeee2526c583ce6a2f33f2
7
+ data.tar.gz: 53961fada45da80ce23e4ef9f1ebbb5bbda85358e410c5cb70f00b5457f4ffff88d1605943bdbaba88c37aed574e1ea3d513f57e69347065b59c60f347104d4c
@@ -1,5 +1,5 @@
1
1
  module Isomorfeus
2
2
  module Preact
3
- VERSION = '22.10.0.rc1'
3
+ VERSION = '22.10.0.rc2'
4
4
  end
5
5
  end
data/lib/lucid_app.rb CHANGED
@@ -78,31 +78,34 @@ class LucidApp < LucidComponent
78
78
  super(props, context)
79
79
 
80
80
  # theme
81
- @class_name_sym = @class_name.to_sym
82
81
  @theme = @self_class.css_theme
83
82
 
84
- store_state = Isomorfeus.store.get_state
85
- unless store_state[:class_state].key?(@class_name_sym)
86
- store_state[:class_state][@class_name_sym] = {}
87
- end
88
- @state.merge!({ _app_ctx: { value: { iso_location: props[:location],
89
- iso_store: store_state,
90
- iso_theme: @theme }}})
83
+ @state.merge!({ _app_ctx: { value: {
84
+ iso_location: props[:location],
85
+ iso_store: Isomorfeus.store.get_state,
86
+ iso_theme: @theme }}})
91
87
 
92
- lai = self
93
88
  if RUBY_ENGINE == 'opal'
89
+ lai = self
94
90
  @unsubscriber = Isomorfeus.store.subscribe do
95
- store_state = Isomorfeus.store.get_state
96
- unless store_state[:class_state].key?(@class_name_sym)
97
- store_state[:class_state][@class_name_sym] = {}
98
- end
99
- lai.set_state({ _app_ctx: { value: { iso_location: lai.props[:location],
100
- iso_store: store_state,
91
+ lai.set_state({ _app_ctx: { value: {
92
+ iso_location: lai.props[:location],
93
+ iso_store: Isomorfeus.store.get_state,
101
94
  iso_theme: lai.theme }}})
102
95
  end
103
96
  end
104
97
  end
105
98
 
99
+ def app_state
100
+ @state.dig(:_app_ctx, :value, :iso_store, :application_state)
101
+ end
102
+
103
+ def class_state
104
+ res = @state.dig(:_app_ctx, :value, :iso_store, :class_state, @class_name)
105
+ return res if res
106
+ {}
107
+ end
108
+
106
109
  def should_component_update?(next_props, next_state, _next_context)
107
110
  return true if @props != next_props || @state != next_state
108
111
  false
@@ -11,10 +11,15 @@ module Preact::ComponentResolution
11
11
  %x{
12
12
  let constant;
13
13
  let sc = self.$class();
14
+ // disable stack traces here for improved performance
15
+ // if const cannot be found, the orignal method_mising will throw with stacktrace
16
+ Opal.config.enable_stack_trace = false
14
17
  try {
15
18
  constant = sc.$const_get(component_name);
16
19
  } catch(err) {
17
- let module_names = sc.$to_s().split("::");
20
+ let module_names;
21
+ if (sc.$$full_name) { module_names = sc.$$full_name.split("::"); }
22
+ else { module_names = sc.$to_s().split("::"); }
18
23
  let module_name;
19
24
  for (let i = module_names.length - 1; i > 0; i--) {
20
25
  module_name = module_names.slice(0, i).join('::');
@@ -23,6 +28,8 @@ module Preact::ComponentResolution
23
28
  break;
24
29
  } catch(err) { }
25
30
  }
31
+ } finally {
32
+ Opal.config.enable_stack_trace = true
26
33
  }
27
34
  if (constant) {
28
35
  let last = args[args.length-1];
@@ -13,9 +13,16 @@ class Module
13
13
  let constant = null;
14
14
  let c = component_name[0];
15
15
  if (c == c.toUpperCase()) {
16
+ // disable stack traces here for improved performance
17
+ // if const cannot be found, the orignal method_mising will throw with stacktrace
18
+ Opal.config.enable_stack_trace = false;
16
19
  try {
17
20
  constant = self.$const_get(component_name);
18
- } catch(err) { }
21
+ } catch(err) {
22
+ // nothing
23
+ } finally {
24
+ Opal.config.enable_stack_trace = true;
25
+ }
19
26
  if (constant) {
20
27
  let last = args[args.length-1];
21
28
  #{`Opal.Preact`._render_element(`constant`, `(last === undefined || last === null) ? nil : last`, &block)};
data/lib/preact.rb CHANGED
@@ -971,6 +971,13 @@ module Preact
971
971
 
972
972
  function is_a_vnode(type) { return type === vnode_class; }
973
973
  function is_nil() { return false; }
974
+ function vnode_eql(me, other) {
975
+ for(let prop in me) {
976
+ if (prop === 'props') { continue; }
977
+ else if (me[prop] != other[prop]) { return false; }
978
+ }
979
+ return me.props["$=="](other.props);
980
+ }
974
981
 
975
982
  self.createVNode = function(type, props, key, ref, original) {
976
983
  // V8 seems to be better at detecting type shapes if the object is allocated from the same call site
@@ -993,19 +1000,9 @@ module Preact
993
1000
  _component: null,
994
1001
  _hydrating: null,
995
1002
  constructor: undefined,
996
- _original: original == null ? ++vnodeId : original,
1003
+ _original: (original == null) ? ++vnodeId : original,
997
1004
  "$is_a?": is_a_vnode,
998
- "$==": eql = function(other) {
999
- for(let prop in vnode) {
1000
- if (prop === 'props') {
1001
- let res = vnode[prop]["$=="](other[prop]);
1002
- if (!res) return false;
1003
- } else if (vnode[prop] != other[prop]) {
1004
- return false;
1005
- }
1006
- }
1007
- return true;
1008
- },
1005
+ "$==": eql = function(other) { return vnode_eql(vnode, other); },
1009
1006
  "$eql?": eql,
1010
1007
  "$nil?": is_nil,
1011
1008
  "$$is_vnode": true
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isomorfeus-preact
3
3
  version: !ruby/object:Gem::Version
4
- version: 22.10.0.rc1
4
+ version: 22.10.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-06 00:00:00.000000000 Z
11
+ date: 2022-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj
@@ -58,28 +58,28 @@ dependencies:
58
58
  requirements:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: 22.10.0.rc1
61
+ version: 22.10.0.rc2
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: 22.10.0.rc1
68
+ version: 22.10.0.rc2
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: isomorfeus-redux
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 22.10.0.rc1
75
+ version: 22.10.0.rc2
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 22.10.0.rc1
82
+ version: 22.10.0.rc2
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: isomorfeus-puppetmaster
85
85
  requirement: !ruby/object:Gem::Requirement