isomorfeus-preact 10.5.2 → 10.5.6
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/lib/isomorfeus/preact/config.rb +5 -18
- data/lib/isomorfeus/preact/imports.rb +3 -6
- data/lib/isomorfeus/preact_view_helper.rb +19 -19
- data/lib/isomorfeus/props/validator.rb +1 -1
- data/lib/isomorfeus/top_level.rb +3 -6
- data/lib/preact/version.rb +1 -1
- data/lib/preact.rb +17 -7
- data/node_modules/.package-lock.json +0 -8
- data/package.json +0 -1
- metadata +18 -33
- data/node_modules/preact-deep-force-update/.babelrc +0 -8
- data/node_modules/preact-deep-force-update/.eslintrc +0 -66
- data/node_modules/preact-deep-force-update/.npmignore +0 -2
- data/node_modules/preact-deep-force-update/.travis.yml +0 -3
- data/node_modules/preact-deep-force-update/LICENSE +0 -21
- data/node_modules/preact-deep-force-update/README.md +0 -53
- data/node_modules/preact-deep-force-update/dist/deep-force-update.js +0 -36
- data/node_modules/preact-deep-force-update/dist/deep-force-update.js.map +0 -1
- data/node_modules/preact-deep-force-update/dist/deep-force-update.min.js +0 -2
- data/node_modules/preact-deep-force-update/dist/deep-force-update.min.js.map +0 -1
- data/node_modules/preact-deep-force-update/karma.conf.js +0 -32
- data/node_modules/preact-deep-force-update/package.json +0 -80
- data/node_modules/preact-deep-force-update/rollup.config.js +0 -17
- data/node_modules/preact-deep-force-update/src/index.js +0 -27
- data/node_modules/preact-deep-force-update/test/index.js +0 -50
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7b98a0ea532f106d129705403fe6380883cb163c5d3aa947bf90e452e2b8982
|
4
|
+
data.tar.gz: c08be6c7a4d0eaf6061ad4e61e90f4013c0b888137732e6041a4e1c48970aca0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1bb607e54cb39d7619f61be717971731e459dc3db0593ae18655586cae52300bb6d56752175127921fd142d9c430e719c043d2b1acc279b4b4829c65bc23134
|
7
|
+
data.tar.gz: 8bf655b3180949f71dbbedcce76b90470abbec11f6045fe5f1a649036438fe72b88a40907e90d94efadbe659c26c207fab2143a8cb960a987769b73aad19e427
|
@@ -87,22 +87,11 @@ module Isomorfeus
|
|
87
87
|
end
|
88
88
|
|
89
89
|
def force_render
|
90
|
-
|
91
|
-
if Isomorfeus.top_component
|
92
|
-
Preact.find_dom_node(Isomorfeus.top_component) if on_browser? || on_desktop? # if not mounted will raise
|
93
|
-
if `typeof Opal.global.deepForceUpdate === 'undefined'`
|
94
|
-
Isomorfeus.top_component.JS.forceUpdate()
|
95
|
-
else
|
96
|
-
`Opal.global.deepForceUpdate(#{Isomorfeus.top_component})`
|
97
|
-
end
|
98
|
-
end
|
99
|
-
rescue Exception => e
|
100
|
-
# TODO try mount first
|
101
|
-
# if it fails
|
102
|
-
`console.error("force_render failed'! Error: " + #{e.message} + "! Reloading page.")`
|
103
|
-
`location.reload()` if on_browser?
|
104
|
-
end
|
90
|
+
`Opal.Preact.deep_force_update(#{Isomorfeus.top_component})`
|
105
91
|
nil
|
92
|
+
rescue Exception => e
|
93
|
+
`console.error("force_render failed'! Error: " + #{e.message} + "! Reloading page.")`
|
94
|
+
`location.reload()` if on_browser?
|
106
95
|
end
|
107
96
|
end
|
108
97
|
|
@@ -142,14 +131,12 @@ module Isomorfeus
|
|
142
131
|
|
143
132
|
class << self
|
144
133
|
def raise_error(error: nil, error_class: nil, message: nil, stack: nil)
|
145
|
-
error_class = error.class
|
134
|
+
error_class = error.class if error
|
146
135
|
|
147
136
|
error_class = RuntimeError unless error_class
|
148
137
|
execution_environment = if on_browser? then 'on Browser'
|
149
138
|
elsif on_ssr? then 'in Server Side Rendering'
|
150
139
|
elsif on_server? then 'on Server'
|
151
|
-
elsif on_mobile? then 'on Mobile'
|
152
|
-
elsif on_database? then 'on Database'
|
153
140
|
else
|
154
141
|
'on Client'
|
155
142
|
end
|
@@ -2,11 +2,11 @@ module Isomorfeus
|
|
2
2
|
module Preact
|
3
3
|
module Imports
|
4
4
|
def self.add
|
5
|
-
Isomorfeus.add_common_js_import('preact', 'Preact')
|
6
|
-
Isomorfeus.add_common_js_import('preact/hooks', 'PreactHooks')
|
5
|
+
Isomorfeus.add_common_js_import('preact', 'Preact', '*')
|
6
|
+
Isomorfeus.add_common_js_import('preact/hooks', 'PreactHooks', '*')
|
7
7
|
Isomorfeus.add_common_js_import('wouter-preact', nil, ['Router', 'Link', 'Redirect', 'Route', 'Switch'])
|
8
8
|
|
9
|
-
Isomorfeus.add_common_js_import('nano-css', 'NanoCSS')
|
9
|
+
Isomorfeus.add_common_js_import('nano-css', 'NanoCSS', '*')
|
10
10
|
%w[rule sheet nesting hydrate unitless global keyframes].each do |addon|
|
11
11
|
Isomorfeus.add_common_js_import("nano-css/addon/#{addon}", 'NanoCSSAddons', 'addon', addon)
|
12
12
|
end
|
@@ -17,9 +17,6 @@ module Isomorfeus
|
|
17
17
|
Isomorfeus.add_ssr_js_import('wouter-preact/static-location', 'staticLocationHook')
|
18
18
|
|
19
19
|
Isomorfeus.add_web_js_import('wouter-preact/use-location', 'locationHook')
|
20
|
-
if Isomorfeus.development?
|
21
|
-
Isomorfeus.add_web_js_import('preact-deep-force-update', 'deepForceUpdate')
|
22
|
-
end
|
23
20
|
|
24
21
|
if Dir.exist?(Isomorfeus.app_root)
|
25
22
|
Isomorfeus.add_common_ruby_import('isomorfeus_loader') if File.exist?(File.join(Isomorfeus.app_root, 'isomorfeus_loader.rb'))
|
@@ -16,12 +16,12 @@ module Isomorfeus
|
|
16
16
|
render_result
|
17
17
|
end
|
18
18
|
|
19
|
-
def mount_component(component_name, props = {}, asset_key = 'ssr.js')
|
19
|
+
def mount_component(component_name, props = {}, asset_key = 'ssr.js', skip_ssr: false, use_ssr: false)
|
20
20
|
@ssr_response_status = nil
|
21
21
|
@ssr_styles = nil
|
22
22
|
thread_id_asset = "#{Thread.current.object_id}#{asset_key}"
|
23
23
|
render_result = "<div data-iso-env=\"#{Isomorfeus.env}\" data-iso-root=\"#{component_name}\" data-iso-props='#{Oj.dump(props, mode: :strict)}'"
|
24
|
-
if Isomorfeus.server_side_rendering
|
24
|
+
if !skip_ssr && (Isomorfeus.server_side_rendering || use_ssr)
|
25
25
|
if Isomorfeus.development?
|
26
26
|
# always create a new context, effectively reloading code
|
27
27
|
# delete the existing context first, saves memory
|
@@ -31,22 +31,23 @@ module Isomorfeus
|
|
31
31
|
runtime.vm.delete_context(uuid)
|
32
32
|
end
|
33
33
|
begin
|
34
|
-
|
35
|
-
raise "#{self.class.name}: Asset not found: #{asset_key}" unless asset
|
36
|
-
asset_manager.transition(asset_key, asset)
|
37
|
-
Isomorfeus.ssr_contexts[thread_id_asset] = ExecJS.permissive_compile(asset.bundle)
|
34
|
+
init_speednode_context(asset_key, thread_id_asset)
|
38
35
|
rescue Exception => e
|
39
36
|
Isomorfeus.raise_error(message: "Server Side Rendering: Failed creating context for #{asset_key}. Error: #{e.message}", stack: e.backtrace)
|
40
37
|
end
|
41
38
|
else
|
42
|
-
# initialize speednode context
|
43
39
|
unless Isomorfeus.ssr_contexts.key?(thread_id_asset)
|
44
|
-
|
45
|
-
raise "#{self.class.name}: Asset not found: #{asset_key}" unless asset
|
46
|
-
asset_manager.transition(asset_key, asset)
|
47
|
-
Isomorfeus.ssr_contexts[thread_id_asset] = ExecJS.permissive_compile(asset.bundle)
|
40
|
+
init_speednode_context(asset_key, thread_id_asset)
|
48
41
|
end
|
49
42
|
end
|
43
|
+
|
44
|
+
# if location_host and scheme are given and if Transport is loaded, connect and then render,
|
45
|
+
# otherwise do not render because only one pass is required
|
46
|
+
ws_scheme = props[:location_scheme] == 'https:' ? 'wss:' : 'ws:'
|
47
|
+
location_host = props[:location_host] ? props[:location_host] : 'localhost'
|
48
|
+
api_ws_path = Isomorfeus.respond_to?(:api_websocket_path) ? Isomorfeus.api_websocket_path : ''
|
49
|
+
transport_ws_url = ws_scheme + location_host + api_ws_path
|
50
|
+
|
50
51
|
# build javascript for rendering first pass
|
51
52
|
# it will initialize buffers to guard against leaks, maybe caused by previous exceptions
|
52
53
|
javascript = <<~JAVASCRIPT
|
@@ -63,14 +64,6 @@ module Isomorfeus
|
|
63
64
|
global.Opal.Isomorfeus['$force_init!']();
|
64
65
|
global.Opal.Isomorfeus['$ssr_response_status='](200);
|
65
66
|
global.Opal.Isomorfeus.TopLevel['$ssr_route_path=']('#{props[:location]}');
|
66
|
-
JAVASCRIPT
|
67
|
-
# if location_host and scheme are given and if Transport is loaded, connect and then render,
|
68
|
-
# otherwise do not render because only one pass is required
|
69
|
-
ws_scheme = props[:location_scheme] == 'https:' ? 'wss:' : 'ws:'
|
70
|
-
location_host = props[:location_host] ? props[:location_host] : 'localhost'
|
71
|
-
api_ws_path = Isomorfeus.respond_to?(:api_websocket_path) ? Isomorfeus.api_websocket_path : ''
|
72
|
-
transport_ws_url = ws_scheme + location_host + api_ws_path
|
73
|
-
javascript << <<~JAVASCRIPT
|
74
67
|
let api_ws_path = '#{api_ws_path}';
|
75
68
|
let exception;
|
76
69
|
if (typeof global.Opal.Isomorfeus.Transport !== 'undefined' && api_ws_path !== '') {
|
@@ -176,5 +169,12 @@ module Isomorfeus
|
|
176
169
|
def component_cache
|
177
170
|
@_component_cache ||= Isomorfeus.component_cache_init_block.call
|
178
171
|
end
|
172
|
+
|
173
|
+
def init_speednode_context(asset_key, thread_id_asset)
|
174
|
+
asset = Isomorfeus.assets[asset_key]
|
175
|
+
raise "#{self.class.name}: Asset not found: #{asset_key}" unless asset
|
176
|
+
asset_manager.transition(asset_key, asset)
|
177
|
+
Isomorfeus.ssr_contexts[thread_id_asset] = ExecJS.permissive_compile(asset.bundle)
|
178
|
+
end
|
179
179
|
end
|
180
180
|
end
|
@@ -65,7 +65,7 @@ module Isomorfeus
|
|
65
65
|
def type!
|
66
66
|
return if @o[:allow_nil] && @v.nil?
|
67
67
|
if @o.key?(:class)
|
68
|
-
Isomorfeus.raise_error(message: "#{@c}: #{@p} class not #{@o[:class]}") unless @v.class == @o[:class]
|
68
|
+
Isomorfeus.raise_error(message: "#{@c}: #{@p} class is not #{@o[:class]}") unless @v.class == @o[:class]
|
69
69
|
elsif @o.key?(:is_a)
|
70
70
|
Isomorfeus.raise_error(message: "#{@c}: #{@p} is not a #{@o[:is_a]}") unless @v.is_a?(@o[:is_a])
|
71
71
|
elsif @o.key?(:type)
|
data/lib/isomorfeus/top_level.rb
CHANGED
@@ -89,12 +89,9 @@ module Isomorfeus
|
|
89
89
|
element = element_or_query
|
90
90
|
end
|
91
91
|
|
92
|
-
top =
|
93
|
-
|
94
|
-
|
95
|
-
Preact.render(Preact.create_element(component, props), element)
|
96
|
-
end
|
97
|
-
Isomorfeus.top_component = top if top
|
92
|
+
top = Preact.create_element(component, props)
|
93
|
+
hydrated ? Preact.hydrate(top, element) : Preact.render(top, element)
|
94
|
+
Isomorfeus.top_component = top
|
98
95
|
end
|
99
96
|
end
|
100
97
|
end
|
data/lib/preact/version.rb
CHANGED
data/lib/preact.rb
CHANGED
@@ -213,6 +213,21 @@ module Preact
|
|
213
213
|
operabu[operabu.length - 1].push(Opal.global.Preact.createElement(component, native_props));
|
214
214
|
}
|
215
215
|
};
|
216
|
+
|
217
|
+
self.deep_force_update = function(component) {
|
218
|
+
if (component.forceUpdate) { component.forceUpdate(); }
|
219
|
+
if (component.__c) { self.deep_force_update(component.__c); }
|
220
|
+
else if (component.base) { self.update_components_from_dom(component.base); }
|
221
|
+
};
|
222
|
+
|
223
|
+
self.update_components_from_dom = function(node, fn) {
|
224
|
+
let children = node.childNodes;
|
225
|
+
for (let i=children && children.length; i--;) {
|
226
|
+
let child = children[i];
|
227
|
+
if (child.__c) { self.deep_force_update(child.__c); }
|
228
|
+
else { self.update_components_from_dom(child, fn); }
|
229
|
+
}
|
230
|
+
};
|
216
231
|
}
|
217
232
|
|
218
233
|
|
@@ -264,13 +279,8 @@ module Preact
|
|
264
279
|
Preact::Ref.new(`Opal.global.Preact.createRef()`)
|
265
280
|
end
|
266
281
|
|
267
|
-
def self.hydrate(native_preact_element, container_node, replace_node
|
268
|
-
|
269
|
-
if block_given?
|
270
|
-
`Opal.global.Preact.hydrate(native_preact_element, container_node, function() { block.$call() })`
|
271
|
-
else
|
272
|
-
`Opal.global.Preact.hydrate(native_preact_element, container_node)`
|
273
|
-
end
|
282
|
+
def self.hydrate(native_preact_element, container_node, replace_node)
|
283
|
+
`Opal.global.Preact.hydrate(native_preact_element, container_node)`
|
274
284
|
end
|
275
285
|
|
276
286
|
def self.location_hook(location)
|
@@ -134,14 +134,6 @@
|
|
134
134
|
"url": "https://opencollective.com/preact"
|
135
135
|
}
|
136
136
|
},
|
137
|
-
"node_modules/preact-deep-force-update": {
|
138
|
-
"version": "0.1.0",
|
139
|
-
"resolved": "https://registry.npmjs.org/preact-deep-force-update/-/preact-deep-force-update-0.1.0.tgz",
|
140
|
-
"integrity": "sha1-IWazTsISfLZ1UsouD73Sdsh4bPw=",
|
141
|
-
"peerDependencies": {
|
142
|
-
"preact": "*"
|
143
|
-
}
|
144
|
-
},
|
145
137
|
"node_modules/preact-render-to-string": {
|
146
138
|
"version": "5.1.19",
|
147
139
|
"resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.1.19.tgz",
|
data/package.json
CHANGED
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: 10.5.
|
4
|
+
version: 10.5.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Biedermann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-09-
|
11
|
+
date: 2021-09-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: oj
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 3.13.
|
33
|
+
version: 3.13.5
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 3.13.
|
40
|
+
version: 3.13.5
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: opal
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,44 +84,44 @@ dependencies:
|
|
84
84
|
name: isomorfeus-asset-manager
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.12.
|
89
|
+
version: 0.12.4
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.12.
|
96
|
+
version: 0.12.4
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: isomorfeus-redux
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 4.1.
|
103
|
+
version: 4.1.6
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 4.1.
|
110
|
+
version: 4.1.6
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: isomorfeus-speednode
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.4.
|
117
|
+
version: 0.4.1
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.4.
|
124
|
+
version: 0.4.1
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: dalli
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -168,16 +168,16 @@ dependencies:
|
|
168
168
|
name: isomorfeus-puppetmaster
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
|
-
- - "
|
171
|
+
- - "~>"
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version: 0.5.
|
173
|
+
version: 0.5.2
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
|
-
- - "
|
178
|
+
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version: 0.5.
|
180
|
+
version: 0.5.2
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: rake
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -921,21 +921,6 @@ files:
|
|
921
921
|
- node_modules/object-assign/license
|
922
922
|
- node_modules/object-assign/package.json
|
923
923
|
- node_modules/object-assign/readme.md
|
924
|
-
- node_modules/preact-deep-force-update/.babelrc
|
925
|
-
- node_modules/preact-deep-force-update/.eslintrc
|
926
|
-
- node_modules/preact-deep-force-update/.npmignore
|
927
|
-
- node_modules/preact-deep-force-update/.travis.yml
|
928
|
-
- node_modules/preact-deep-force-update/LICENSE
|
929
|
-
- node_modules/preact-deep-force-update/README.md
|
930
|
-
- node_modules/preact-deep-force-update/dist/deep-force-update.js
|
931
|
-
- node_modules/preact-deep-force-update/dist/deep-force-update.js.map
|
932
|
-
- node_modules/preact-deep-force-update/dist/deep-force-update.min.js
|
933
|
-
- node_modules/preact-deep-force-update/dist/deep-force-update.min.js.map
|
934
|
-
- node_modules/preact-deep-force-update/karma.conf.js
|
935
|
-
- node_modules/preact-deep-force-update/package.json
|
936
|
-
- node_modules/preact-deep-force-update/rollup.config.js
|
937
|
-
- node_modules/preact-deep-force-update/src/index.js
|
938
|
-
- node_modules/preact-deep-force-update/test/index.js
|
939
924
|
- node_modules/preact-render-to-string/LICENSE
|
940
925
|
- node_modules/preact-render-to-string/README.md
|
941
926
|
- node_modules/preact-render-to-string/dist/commonjs.js
|
@@ -1,66 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"parser": "babel-eslint",
|
3
|
-
"extends": "eslint:recommended",
|
4
|
-
"plugins": [
|
5
|
-
"react"
|
6
|
-
],
|
7
|
-
"env": {
|
8
|
-
"browser": true,
|
9
|
-
"mocha": true,
|
10
|
-
"es6": true,
|
11
|
-
"node": true
|
12
|
-
},
|
13
|
-
"parserOptions": {
|
14
|
-
"ecmaFeatures": {
|
15
|
-
"modules": true,
|
16
|
-
"jsx": true
|
17
|
-
}
|
18
|
-
},
|
19
|
-
"globals": {
|
20
|
-
"sinon": true,
|
21
|
-
"expect": true
|
22
|
-
},
|
23
|
-
"rules": {
|
24
|
-
"react/jsx-uses-react": 2,
|
25
|
-
"react/jsx-uses-vars": 2,
|
26
|
-
"no-unused-vars": [1, { "varsIgnorePattern": "^h$" }],
|
27
|
-
"no-cond-assign": 1,
|
28
|
-
"no-empty": 0,
|
29
|
-
"no-console": 1,
|
30
|
-
"semi": 2,
|
31
|
-
"camelcase": 0,
|
32
|
-
"comma-style": 2,
|
33
|
-
"comma-dangle": [2, "never"],
|
34
|
-
"indent": [2, "tab", {"SwitchCase": 1}],
|
35
|
-
"no-mixed-spaces-and-tabs": [2, "smart-tabs"],
|
36
|
-
"no-trailing-spaces": [2, { "skipBlankLines": true }],
|
37
|
-
"max-nested-callbacks": [2, 5],
|
38
|
-
"no-eval": 2,
|
39
|
-
"no-implied-eval": 2,
|
40
|
-
"no-new-func": 2,
|
41
|
-
"guard-for-in": 2,
|
42
|
-
"eqeqeq": 0,
|
43
|
-
"no-else-return": 2,
|
44
|
-
"no-redeclare": 2,
|
45
|
-
"no-dupe-keys": 2,
|
46
|
-
"radix": 2,
|
47
|
-
"strict": [2, "never"],
|
48
|
-
"no-shadow": 0,
|
49
|
-
"callback-return": [1, ["callback", "cb", "next", "done"]],
|
50
|
-
"no-delete-var": 2,
|
51
|
-
"no-undef-init": 2,
|
52
|
-
"no-shadow-restricted-names": 2,
|
53
|
-
"handle-callback-err": 0,
|
54
|
-
"no-lonely-if": 2,
|
55
|
-
"keyword-spacing": 2,
|
56
|
-
"constructor-super": 2,
|
57
|
-
"no-this-before-super": 2,
|
58
|
-
"no-dupe-class-members": 2,
|
59
|
-
"no-const-assign": 2,
|
60
|
-
"prefer-spread": 2,
|
61
|
-
"no-useless-concat": 2,
|
62
|
-
"no-var": 2,
|
63
|
-
"object-shorthand": 2,
|
64
|
-
"prefer-arrow-callback": 2
|
65
|
-
}
|
66
|
-
}
|
@@ -1,21 +0,0 @@
|
|
1
|
-
The MIT License (MIT)
|
2
|
-
|
3
|
-
Copyright (c) 2016 Jason Miller
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
7
|
-
in the Software without restriction, including without limitation the rights
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
10
|
-
furnished to do so, subject to the following conditions:
|
11
|
-
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
13
|
-
copies or substantial portions of the Software.
|
14
|
-
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
-
SOFTWARE.
|
@@ -1,53 +0,0 @@
|
|
1
|
-
# preact-deep-force-update
|
2
|
-
|
3
|
-
[](https://www.npmjs.com/package/preact-deep-force-update)
|
4
|
-
[](https://travis-ci.org/developit/preact-deep-force-update)
|
5
|
-
|
6
|
-
Recursively invoke forceUpdate() on a tree of components.
|
7
|
-
|
8
|
-
#### [JSFiddle Example](https://jsfiddle.net/developit/642ctu04/)
|
9
|
-
|
10
|
-
|
11
|
-
---
|
12
|
-
|
13
|
-
|
14
|
-
### Usage Example
|
15
|
-
|
16
|
-
```js
|
17
|
-
import { h, Component, render } from 'preact';
|
18
|
-
import deepForceUpdate from 'preact-deep-force-update';
|
19
|
-
|
20
|
-
class Main extends Component {
|
21
|
-
render() {
|
22
|
-
return <div><Inner /></div>;
|
23
|
-
}
|
24
|
-
}
|
25
|
-
|
26
|
-
class Inner extends Component {
|
27
|
-
render() {
|
28
|
-
let time = new Date().toTimeString();
|
29
|
-
return <span>{time}</span>;
|
30
|
-
}
|
31
|
-
}
|
32
|
-
|
33
|
-
let main;
|
34
|
-
render(<Main ref={c => main=c } />, document.body);
|
35
|
-
|
36
|
-
// force an update to the whole tree:
|
37
|
-
deepForceUpdate(main);
|
38
|
-
|
39
|
-
// you can also pass an Element:
|
40
|
-
deepForceUpdate(document.body.firstChild);
|
41
|
-
```
|
42
|
-
|
43
|
-
|
44
|
-
---
|
45
|
-
|
46
|
-
|
47
|
-
### License
|
48
|
-
|
49
|
-
[MIT]
|
50
|
-
|
51
|
-
|
52
|
-
[Preact]: https://github.com/developit/preact
|
53
|
-
[MIT]: http://choosealicense.com/licenses/mit/
|
@@ -1,36 +0,0 @@
|
|
1
|
-
(function (global, factory) {
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
3
|
-
typeof define === 'function' && define.amd ? define(factory) :
|
4
|
-
(global.preactDeepForceUpdate = factory());
|
5
|
-
}(this, function () {
|
6
|
-
|
7
|
-
/** Invoke `.forceUpdate()` on a component and all descendants. */
|
8
|
-
function deepForceUpdate(component) {
|
9
|
-
if (component.forceUpdate) {
|
10
|
-
component.forceUpdate();
|
11
|
-
}
|
12
|
-
|
13
|
-
// high-order child recursion
|
14
|
-
if (component._component) {
|
15
|
-
deepForceUpdate(component._component);
|
16
|
-
} else if (component.base) {
|
17
|
-
updateComponentsFromDom(component.base);
|
18
|
-
}
|
19
|
-
}
|
20
|
-
|
21
|
-
function updateComponentsFromDom(node, fn) {
|
22
|
-
var children = node.childNodes;
|
23
|
-
for (var i = children && children.length; i--;) {
|
24
|
-
var child = children[i];
|
25
|
-
if (child._component) {
|
26
|
-
deepForceUpdate(child._component);
|
27
|
-
} else {
|
28
|
-
updateComponentsFromDom(child, fn);
|
29
|
-
}
|
30
|
-
}
|
31
|
-
}
|
32
|
-
|
33
|
-
return deepForceUpdate;
|
34
|
-
|
35
|
-
}));
|
36
|
-
//# sourceMappingURL=deep-force-update.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":null,"sources":["../src/index.js"],"sourcesContent":["/** Invoke `.forceUpdate()` on a component and all descendants. */\nexport default function deepForceUpdate(component) {\n\tif (component.forceUpdate) {\n\t\tcomponent.forceUpdate();\n\t}\n\n\t// high-order child recursion\n\tif (component._component) {\n\t\tdeepForceUpdate(component._component);\n\t}\n\telse if (component.base) {\n\t\tupdateComponentsFromDom(component.base);\n\t}\n}\n\nfunction updateComponentsFromDom(node, fn) {\n\tlet children = node.childNodes;\n\tfor (let i=children && children.length; i--; ) {\n\t\tlet child = children[i];\n\t\tif (child._component) {\n\t\t\tdeepForceUpdate(child._component);\n\t\t}\n\t\telse {\n\t\t\tupdateComponentsFromDom(child, fn);\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;;;;CAAA;AACA,AAAe,CAAA,SAAS,eAAT,CAAyB,SAAzB,EAAoC;AAClD,CAAA,KAAI,UAAU,WAAd,EAA2B;AAC1B,CAAA,YAAU,WAAV;AACA,CAAA;;AAED,CAAA;AACA,CAAA,KAAI,UAAU,UAAd,EAA0B;AACzB,CAAA,kBAAgB,UAAU,UAA1B;AACA,CAAA,EAFD,MAGK,IAAI,UAAU,IAAd,EAAoB;AACxB,CAAA,0BAAwB,UAAU,IAAlC;AACA,CAAA;AACD,CAAA;;AAED,CAAA,SAAS,uBAAT,CAAiC,IAAjC,EAAuC,EAAvC,EAA2C;AAC1C,CAAA,KAAI,WAAW,KAAK,UAApB;AACA,CAAA,MAAK,IAAI,IAAE,YAAY,SAAS,MAAhC,EAAwC,GAAxC,GAA+C;AAC9C,CAAA,MAAI,QAAQ,SAAS,CAAT,CAAZ;AACA,CAAA,MAAI,MAAM,UAAV,EAAsB;AACrB,CAAA,mBAAgB,MAAM,UAAtB;AACA,CAAA,GAFD,MAGK;AACJ,CAAA,2BAAwB,KAAxB,EAA+B,EAA/B;AACA,CAAA;AACD,CAAA;AACD,CAAA;;;;"}
|
@@ -1,2 +0,0 @@
|
|
1
|
-
!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o():"function"==typeof define&&define.amd?define(o):e.preactDeepForceUpdate=o()}(this,function(){function e(n){n.forceUpdate&&n.forceUpdate(),n._component?e(n._component):n.base&&o(n.base)}function o(n,t){for(var c=n.childNodes,f=c&&c.length;f--;){var p=c[f];p._component?e(p._component):o(p,t)}}return e});
|
2
|
-
//# sourceMappingURL=deep-force-update.min.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["deepForceUpdate","component","forceUpdate","_component","base","updateComponentsFromDom","node","fn","children","childNodes","i","length","child"],"mappings":"oLACe,QAASA,GAAgBC,GACnCA,EAAUC,aACbD,EAAUC,cAIPD,EAAUE,WACbH,EAAgBC,EAAUE,YAElBF,EAAUG,MAClBC,EAAwBJ,EAAUG,MAIpC,QAASC,GAAwBC,EAAMC,GAEtC,IAAK,GADDC,GAAWF,EAAKG,WACXC,EAAEF,GAAYA,EAASG,OAAQD,KAAO,CAC9C,GAAIE,GAAQJ,EAASE,EACjBE,GAAMT,WACTH,EAAgBY,EAAMT,YAGtBE,EAAwBO,EAAOL","file":"deep-force-update.min.js"}
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module.exports = function(config) {
|
2
|
-
config.set({
|
3
|
-
frameworks: ['mocha', 'chai-sinon'],
|
4
|
-
reporters: ['mocha'],
|
5
|
-
browsers: ['PhantomJS'],
|
6
|
-
|
7
|
-
files: ['test/**/*.js'],
|
8
|
-
|
9
|
-
preprocessors: {
|
10
|
-
'{src,test}/**/*.js': ['webpack', 'sourcemap']
|
11
|
-
},
|
12
|
-
|
13
|
-
webpack: {
|
14
|
-
module: {
|
15
|
-
loaders: [{
|
16
|
-
test: /\.jsx?$/,
|
17
|
-
exclude: /node_modules/,
|
18
|
-
loader: 'babel'
|
19
|
-
}]
|
20
|
-
},
|
21
|
-
resolve: {
|
22
|
-
alias: {
|
23
|
-
src: __dirname+'/src'
|
24
|
-
}
|
25
|
-
}
|
26
|
-
},
|
27
|
-
|
28
|
-
webpackMiddleware: {
|
29
|
-
noInfo: true
|
30
|
-
}
|
31
|
-
});
|
32
|
-
};
|
@@ -1,80 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"name": "preact-deep-force-update",
|
3
|
-
"amdName": "preactDeepForceUpdate",
|
4
|
-
"version": "0.1.0",
|
5
|
-
"description": "Recursively invoke forceUpdate() on a tree of components.",
|
6
|
-
"main": "dist/deep-force-update.js",
|
7
|
-
"jsnext:main": "src/index.js",
|
8
|
-
"minified:main": "dist/deep-force-update.min.js",
|
9
|
-
"scripts": {
|
10
|
-
"clean": "rimraf dist/",
|
11
|
-
"build": "npm-run-all clean transpile minify size",
|
12
|
-
"transpile": "rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main",
|
13
|
-
"minify": "uglifyjs $npm_package_main -cm -o $npm_package_minified_main -p relative --in-source-map ${npm_package_main}.map --source-map ${npm_package_minified_main}.map",
|
14
|
-
"size": "size=$(gzip-size $npm_package_minified_main) && echo \"gzip size: $size / $(pretty-bytes $size)\"",
|
15
|
-
"test": "npm-run-all lint build test:karma",
|
16
|
-
"lint": "eslint {src,test}",
|
17
|
-
"test:karma": "karma start --single-run",
|
18
|
-
"test:watch": "karma start",
|
19
|
-
"prepublish": "npm-run-all build test",
|
20
|
-
"release": "npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"
|
21
|
-
},
|
22
|
-
"keywords": [
|
23
|
-
"preact",
|
24
|
-
"update",
|
25
|
-
"force"
|
26
|
-
],
|
27
|
-
"author": "Jason Miller <jason@developit.ca>",
|
28
|
-
"license": "MIT",
|
29
|
-
"repository": {
|
30
|
-
"type": "git",
|
31
|
-
"url": "https://github.com/developit/preact-deep-force-update.git"
|
32
|
-
},
|
33
|
-
"bugs": {
|
34
|
-
"url": "https://github.com/developit/preact-deep-force-update/issues"
|
35
|
-
},
|
36
|
-
"homepage": "https://github.com/developit/preact-deep-force-update",
|
37
|
-
"peerDependencies": {
|
38
|
-
"preact": "*"
|
39
|
-
},
|
40
|
-
"devDependencies": {
|
41
|
-
"babel-cli": "^6.9.0",
|
42
|
-
"babel-core": "^6.9.1",
|
43
|
-
"babel-eslint": "^6.0.4",
|
44
|
-
"babel-loader": "^6.2.4",
|
45
|
-
"babel-plugin-transform-class-properties": "^6.9.1",
|
46
|
-
"babel-plugin-transform-es2015-classes": "^6.9.0",
|
47
|
-
"babel-plugin-transform-react-jsx": "^6.8.0",
|
48
|
-
"babel-preset-es2015": "^6.9.0",
|
49
|
-
"babel-preset-es2015-minimal": "^2.0.0",
|
50
|
-
"babel-preset-es2015-minimal-rollup": "^2.0.0",
|
51
|
-
"babel-preset-react": "^6.5.0",
|
52
|
-
"babel-preset-stage-0": "^6.5.0",
|
53
|
-
"chai": "^3.5.0",
|
54
|
-
"diff": "^2.2.3",
|
55
|
-
"eslint": "^3.0.0",
|
56
|
-
"eslint-plugin-react": "^5.1.1",
|
57
|
-
"gzip-size-cli": "^1.0.0",
|
58
|
-
"karma": "^1.0.0",
|
59
|
-
"karma-chai-sinon": "^0.1.5",
|
60
|
-
"karma-mocha": "^1.0.1",
|
61
|
-
"karma-mocha-reporter": "^2.0.3",
|
62
|
-
"karma-phantomjs-launcher": "^1.0.0",
|
63
|
-
"karma-sourcemap-loader": "^0.3.7",
|
64
|
-
"karma-webpack": "^1.7.0",
|
65
|
-
"mkdirp": "^0.5.1",
|
66
|
-
"mocha": "^2.5.0",
|
67
|
-
"npm-run-all": "^2.0.0",
|
68
|
-
"phantomjs-prebuilt": "^2.1.7",
|
69
|
-
"preact": "^5.3.1",
|
70
|
-
"pretty-bytes-cli": "^1.0.0",
|
71
|
-
"rimraf": "^2.5.1",
|
72
|
-
"rollup": "^0.34.1",
|
73
|
-
"rollup-plugin-babel": "^2.4.0",
|
74
|
-
"rollup-plugin-memory": "^1.0.0",
|
75
|
-
"sinon": "^1.17.4",
|
76
|
-
"sinon-chai": "^2.8.0",
|
77
|
-
"uglify-js": "^2.6.1",
|
78
|
-
"webpack": "^1.13.1"
|
79
|
-
}
|
80
|
-
}
|
@@ -1,17 +0,0 @@
|
|
1
|
-
import fs from 'fs';
|
2
|
-
import babel from 'rollup-plugin-babel';
|
3
|
-
|
4
|
-
var babelRc = JSON.parse(fs.readFileSync('.babelrc','utf8')); // eslint-disable-line
|
5
|
-
|
6
|
-
export default {
|
7
|
-
exports: 'default',
|
8
|
-
useStrict: false,
|
9
|
-
plugins: [
|
10
|
-
babel({
|
11
|
-
babelrc: false,
|
12
|
-
presets: ['es2015-minimal-rollup'].concat(babelRc.presets.slice(1)),
|
13
|
-
plugins: babelRc.plugins,
|
14
|
-
exclude: 'node_modules/**'
|
15
|
-
})
|
16
|
-
]
|
17
|
-
};
|
@@ -1,27 +0,0 @@
|
|
1
|
-
/** Invoke `.forceUpdate()` on a component and all descendants. */
|
2
|
-
export default function deepForceUpdate(component) {
|
3
|
-
if (component.forceUpdate) {
|
4
|
-
component.forceUpdate();
|
5
|
-
}
|
6
|
-
|
7
|
-
// high-order child recursion
|
8
|
-
if (component._component) {
|
9
|
-
deepForceUpdate(component._component);
|
10
|
-
}
|
11
|
-
else if (component.base) {
|
12
|
-
updateComponentsFromDom(component.base);
|
13
|
-
}
|
14
|
-
}
|
15
|
-
|
16
|
-
function updateComponentsFromDom(node, fn) {
|
17
|
-
let children = node.childNodes;
|
18
|
-
for (let i=children && children.length; i--; ) {
|
19
|
-
let child = children[i];
|
20
|
-
if (child._component) {
|
21
|
-
deepForceUpdate(child._component);
|
22
|
-
}
|
23
|
-
else {
|
24
|
-
updateComponentsFromDom(child, fn);
|
25
|
-
}
|
26
|
-
}
|
27
|
-
}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
import { h, Component, render } from 'preact';
|
2
|
-
import deepForceUpdate from 'src';
|
3
|
-
|
4
|
-
describe('deepForceUpdate', () => {
|
5
|
-
let scratch = document.createElement('div');
|
6
|
-
|
7
|
-
before( () => document.body.appendChild(scratch) );
|
8
|
-
afterEach( () => scratch.innerHTML = '' );
|
9
|
-
after( () => document.body.removeChild(scratch) );
|
10
|
-
|
11
|
-
it('should force updates', () => {
|
12
|
-
let renders = {
|
13
|
-
outer: 0,
|
14
|
-
inner: 0
|
15
|
-
};
|
16
|
-
|
17
|
-
class Outer extends Component {
|
18
|
-
render() {
|
19
|
-
renders.outer++;
|
20
|
-
return <div><Inner /></div>;
|
21
|
-
}
|
22
|
-
}
|
23
|
-
|
24
|
-
class Inner extends Component {
|
25
|
-
render() {
|
26
|
-
renders.inner++;
|
27
|
-
let time = new Date().toTimeString();
|
28
|
-
return <span>{time}</span>;
|
29
|
-
}
|
30
|
-
}
|
31
|
-
|
32
|
-
let outer;
|
33
|
-
let root = render(<Outer ref={c => outer=c } />, scratch);
|
34
|
-
|
35
|
-
expect(renders).to.have.property('outer', 1);
|
36
|
-
expect(renders).to.have.property('inner', 1);
|
37
|
-
|
38
|
-
// force an update to the whole tree:
|
39
|
-
deepForceUpdate(outer);
|
40
|
-
|
41
|
-
expect(renders).to.have.property('outer', 2);
|
42
|
-
expect(renders).to.have.property('inner', 3);
|
43
|
-
|
44
|
-
// you can also pass an Element:
|
45
|
-
deepForceUpdate(root);
|
46
|
-
|
47
|
-
expect(renders).to.have.property('outer', 3);
|
48
|
-
expect(renders).to.have.property('inner', 5);
|
49
|
-
});
|
50
|
-
});
|