react-rx 1.0.0-beta.3 → 1.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.
Files changed (171) hide show
  1. package/.idea/codeStyles/Project.xml +0 -6
  2. package/.idea/inspectionProfiles/Project_Default.xml +0 -4
  3. package/.idea/workspace.xml +62 -49
  4. package/dist/cjs/WithObservable.d.ts +3 -3
  5. package/dist/cjs/WithObservable.js +3 -3
  6. package/dist/cjs/index.d.ts +6 -2
  7. package/dist/cjs/index.js +18 -11
  8. package/dist/cjs/reactiveComponent.d.ts +6 -6
  9. package/dist/cjs/reactiveComponent.js +8 -26
  10. package/dist/cjs/useAsObservable.d.ts +9 -0
  11. package/dist/cjs/useAsObservable.js +31 -0
  12. package/dist/cjs/useIsomorphicEffect.d.ts +2 -0
  13. package/dist/cjs/useIsomorphicEffect.js +5 -0
  14. package/dist/cjs/useObservable.d.ts +6 -15
  15. package/dist/cjs/useObservable.js +17 -73
  16. package/dist/cjs/useObservableCallback.d.ts +3 -0
  17. package/dist/cjs/useObservableCallback.js +24 -0
  18. package/dist/cjs/useWithObservable.d.ts +9 -0
  19. package/dist/cjs/useWithObservable.js +11 -0
  20. package/dist/cjs/utils.d.ts +7 -3
  21. package/dist/cjs/utils.js +29 -5
  22. package/dist/cjs/withPropsStream.js +3 -3
  23. package/dist/es2015/WithObservable.d.ts +3 -3
  24. package/dist/es2015/index.d.ts +6 -2
  25. package/dist/es2015/index.js +7 -2
  26. package/dist/es2015/reactiveComponent.d.ts +6 -6
  27. package/dist/es2015/reactiveComponent.js +9 -6
  28. package/dist/es2015/useAsObservable.d.ts +9 -0
  29. package/dist/es2015/useAsObservable.js +27 -0
  30. package/dist/es2015/useIsomorphicEffect.d.ts +2 -0
  31. package/dist/es2015/useIsomorphicEffect.js +2 -0
  32. package/dist/es2015/useObservable.d.ts +6 -15
  33. package/dist/es2015/useObservable.js +15 -46
  34. package/dist/es2015/useObservableCallback.d.ts +3 -0
  35. package/dist/es2015/useObservableCallback.js +19 -0
  36. package/dist/es2015/useWithObservable.d.ts +9 -0
  37. package/dist/es2015/useWithObservable.js +7 -0
  38. package/dist/es2015/utils.d.ts +7 -3
  39. package/dist/es2015/utils.js +24 -3
  40. package/dist/esm/WithObservable.d.ts +3 -3
  41. package/dist/esm/index.d.ts +6 -2
  42. package/dist/esm/index.js +7 -2
  43. package/dist/esm/reactiveComponent.d.ts +6 -6
  44. package/dist/esm/reactiveComponent.js +7 -6
  45. package/dist/esm/useAsObservable.d.ts +9 -0
  46. package/dist/esm/useAsObservable.js +27 -0
  47. package/dist/esm/useIsomorphicEffect.d.ts +2 -0
  48. package/dist/esm/useIsomorphicEffect.js +2 -0
  49. package/dist/esm/useObservable.d.ts +6 -15
  50. package/dist/esm/useObservable.js +15 -48
  51. package/dist/esm/useObservableCallback.d.ts +3 -0
  52. package/dist/esm/useObservableCallback.js +20 -0
  53. package/dist/esm/useWithObservable.d.ts +9 -0
  54. package/dist/esm/useWithObservable.js +7 -0
  55. package/dist/esm/utils.d.ts +7 -3
  56. package/dist/esm/utils.js +24 -3
  57. package/package.json +9 -4
  58. package/src/WithObservable.tsx +4 -3
  59. package/src/index.ts +12 -12
  60. package/src/reactiveComponent.ts +28 -20
  61. package/src/useAsObservable.ts +43 -0
  62. package/src/useIsomorphicEffect.ts +3 -0
  63. package/src/useObservable.ts +36 -77
  64. package/src/useObservableCallback.ts +30 -0
  65. package/src/useWithObservable.ts +23 -0
  66. package/src/utils.ts +39 -3
  67. package/website/.babelrc +21 -0
  68. package/website/.prettierrc +7 -0
  69. package/website/README.mdx +1 -0
  70. package/website/package.json +84 -0
  71. package/website/src/@types/babel.d.ts +4 -0
  72. package/website/src/@types/mdx.d.ts +11 -0
  73. package/website/src/@types/react-css-burger.d.ts +4 -0
  74. package/website/src/App.tsx +68 -0
  75. package/website/src/components/Header.tsx +118 -0
  76. package/website/src/components/Link.tsx +18 -0
  77. package/website/src/components/LoadPage.tsx +60 -0
  78. package/website/src/components/Sidebar.tsx +88 -0
  79. package/website/src/components/logos/Github.tsx +10 -0
  80. package/website/src/components/logos/React.tsx +27 -0
  81. package/website/src/components/logos/ReactRxLogo.tsx +39 -0
  82. package/website/src/components/logos/RxJs.tsx +69 -0
  83. package/website/src/components/repl/Checkerboard.tsx +25 -0
  84. package/website/src/components/repl/CodeBlock.tsx +147 -0
  85. package/website/src/components/repl/CodeMirror.tsx +37 -0
  86. package/website/src/components/repl/CodeMirrorMode.tsx +67 -0
  87. package/website/src/components/repl/EvalCode.tsx +55 -0
  88. package/website/src/components/repl/Prelude.tsx +50 -0
  89. package/website/src/components/repl/ShowError.tsx +27 -0
  90. package/website/src/components/repl/codemirror-lib.ts +8 -0
  91. package/website/src/components/repl/codemirror-theme.css +131 -0
  92. package/website/src/components/repl/compile/babel.ts +21 -0
  93. package/website/src/components/repl/eval/evalCallback.ts +27 -0
  94. package/website/src/components/repl/eval/evalCode.ts +7 -0
  95. package/website/src/components/repl/eval/evalExpression.ts +4 -0
  96. package/website/src/components/repl/eval/evalReactDomRender.ts +23 -0
  97. package/website/src/components/repl/index.ts +1 -0
  98. package/website/src/components/repl/runMode.ts +42 -0
  99. package/website/src/datastores/location.ts +14 -0
  100. package/website/src/datastores/page.ts +11 -0
  101. package/website/src/datastores/pageTransition.ts +97 -0
  102. package/website/src/entries/main.css +2 -0
  103. package/website/src/entries/main.tsx +6 -0
  104. package/website/src/examples/FizzBuzz/FizzBuzzExample.tsx +39 -0
  105. package/website/src/examples/FizzBuzz/index.tsx +9 -0
  106. package/website/src/examples/_utils/globalScope.ts +45 -0
  107. package/website/src/examples/animation/AnimationExample.tsx +152 -0
  108. package/website/src/examples/animation/easings.ts +0 -0
  109. package/website/src/examples/animation/index.tsx +15 -0
  110. package/website/src/examples/context/Context.example.jsx +67 -0
  111. package/website/src/examples/context/index.tsx +9 -0
  112. package/website/src/examples/errors/Errors.example.jsx +69 -0
  113. package/website/src/examples/errors/index.tsx +9 -0
  114. package/website/src/examples/event-handlers/EventHandlersExample.tsx +48 -0
  115. package/website/src/examples/event-handlers/index.tsx +9 -0
  116. package/website/src/examples/fetch/FetchExample.jsx +43 -0
  117. package/website/src/examples/fetch/a.txt +1 -0
  118. package/website/src/examples/fetch/b.txt +1 -0
  119. package/website/src/examples/fetch/index.tsx +9 -0
  120. package/website/src/examples/form-data/FormDataExample.jsx +119 -0
  121. package/website/src/examples/form-data/index.tsx +12 -0
  122. package/website/src/examples/form-data/storage.ts +27 -0
  123. package/website/src/examples/forward-ref/ForwardRefExample.tsx +55 -0
  124. package/website/src/examples/forward-ref/index.tsx +9 -0
  125. package/website/src/examples/hello-world/HelloWorld.example.jsx +6 -0
  126. package/website/src/examples/hello-world/index.tsx +9 -0
  127. package/website/src/examples/hooks-interop/HooksInterop.example.tsx +42 -0
  128. package/website/src/examples/hooks-interop/index.tsx +9 -0
  129. package/website/src/examples/passthrough-props/PassThroughPropsExample.jsx +57 -0
  130. package/website/src/examples/passthrough-props/index.tsx +11 -0
  131. package/website/src/examples/reactive-state/ReactiveState.example.jsx +43 -0
  132. package/website/src/examples/reactive-state/index.ts +9 -0
  133. package/website/src/examples/readme-examples/README.mdx +0 -0
  134. package/website/src/examples/readme-examples/index.ts +11 -0
  135. package/website/src/examples/shared-state/SharedState.example.tsx +59 -0
  136. package/website/src/examples/shared-state/index.tsx +9 -0
  137. package/website/src/examples/simple/Counter.example.tsx +14 -0
  138. package/website/src/examples/simple/index.tsx +9 -0
  139. package/website/src/examples/sync/Sync.example.tsx +9 -0
  140. package/website/src/examples/sync/index.tsx +9 -0
  141. package/website/src/examples/tick/TickExample.jsx +51 -0
  142. package/website/src/examples/tick/index.ts +9 -0
  143. package/website/src/examples/todo-app/TodoApp.example.tsx +88 -0
  144. package/website/src/examples/todo-app/index.tsx +12 -0
  145. package/website/src/examples/todo-app/storage.ts +27 -0
  146. package/website/src/examples/use-element/UseElementExample.tsx +70 -0
  147. package/website/src/examples/use-element/index.tsx +9 -0
  148. package/website/src/examples/use-observable/search/SearchExample.tsx +82 -0
  149. package/website/src/examples/use-observable/search/index.tsx +8 -0
  150. package/website/src/examples/use-observable/use-observable/UseObservableExample.tsx +70 -0
  151. package/website/src/examples/use-observable/use-observable/index.tsx +9 -0
  152. package/website/src/index.html +10 -0
  153. package/website/src/mdx-components.tsx +74 -0
  154. package/website/src/pages/Api/Api.mdx +134 -0
  155. package/website/src/pages/Api/ApiPage.tsx +25 -0
  156. package/website/src/pages/Examples/Examples.tsx +105 -0
  157. package/website/src/pages/Examples/ExamplesPage.tsx +13 -0
  158. package/website/src/pages/Guide/Guide.mdx +275 -0
  159. package/website/src/pages/Guide/GuidePage.tsx +25 -0
  160. package/website/src/pages/Index/IndexPage.tsx +50 -0
  161. package/website/src/pages/Index/ReactRxReadme.md +20 -0
  162. package/website/src/pages/NotFound.tsx +3 -0
  163. package/website/src/pages/pages.ts +46 -0
  164. package/website/src/pages/styles.tsx +24 -0
  165. package/website/src/theme.ts +61 -0
  166. package/website/src/utils/parseCodeFenceHeader.ts +32 -0
  167. package/website/tsconfig.json +30 -0
  168. package/website/vercel.json +4 -0
  169. package/website/webpack/config.js +5 -0
  170. package/website/webpack/createConfig.js +95 -0
  171. package/website/webpack/mdx-toc-loader.js +38 -0
@@ -102,12 +102,6 @@
102
102
  <option name="TAB_SIZE" value="2" />
103
103
  </indentOptions>
104
104
  </codeStyleSettings>
105
- <codeStyleSettings language="Vue">
106
- <option name="SOFT_MARGINS" value="80" />
107
- <indentOptions>
108
- <option name="CONTINUATION_INDENT_SIZE" value="2" />
109
- </indentOptions>
110
- </codeStyleSettings>
111
105
  <codeStyleSettings language="XML">
112
106
  <indentOptions>
113
107
  <option name="INDENT_SIZE" value="2" />
@@ -1,10 +1,6 @@
1
1
  <component name="InspectionProjectProfileManager">
2
2
  <profile version="1.0">
3
3
  <option name="myName" value="Project Default" />
4
- <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
5
4
  <inspection_tool class="TypescriptExplicitMemberType" enabled="false" level="INFORMATION" enabled_by_default="false" />
6
- <inspection_tool class="UnterminatedStatementJS" enabled="false" level="WARNING" enabled_by_default="false">
7
- <option name="ignoreSemicolonAtEndOfBlock" value="true" />
8
- </inspection_tool>
9
5
  </profile>
10
6
  </component>
@@ -5,28 +5,38 @@
5
5
  <change beforePath="$PROJECT_DIR$/../react-repl/src/Editor.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/../react-repl/src/Editor.tsx" afterDir="false" />
6
6
  <change beforePath="$PROJECT_DIR$/../react-repl/src/ShowError.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/../react-repl/src/ShowError.tsx" afterDir="false" />
7
7
  <change beforePath="$PROJECT_DIR$/../react-repl/src/transformers/babel.ts" beforeDir="false" afterPath="$PROJECT_DIR$/../react-repl/src/transformers/babel.ts" afterDir="false" />
8
- <change beforePath="$PROJECT_DIR$/.eslintrc.json" beforeDir="false" afterPath="$PROJECT_DIR$/.eslintrc.json" afterDir="false" />
9
- <change beforePath="$PROJECT_DIR$/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/package-lock.json" afterDir="false" />
10
- <change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
11
- <change beforePath="$PROJECT_DIR$/src/__tests__/useObservable.test.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/__tests__/useObservable.test.tsx" afterDir="false" />
12
- <change beforePath="$PROJECT_DIR$/src/useObservable.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/useObservable.ts" afterDir="false" />
8
+ <change beforePath="$PROJECT_DIR$/../react-rx.dev/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/../react-rx.dev/package-lock.json" afterDir="false" />
9
+ <change beforePath="$PROJECT_DIR$/../react-rx.dev/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/../react-rx.dev/package.json" afterDir="false" />
10
+ <change beforePath="$PROJECT_DIR$/../react-rx.dev/src/pages/Index/ReactRxReadme.md" beforeDir="false" afterPath="$PROJECT_DIR$/../react-rx.dev/src/pages/Index/ReactRxReadme.md" afterDir="false" />
13
11
  </list>
14
12
  <option name="SHOW_DIALOG" value="false" />
15
13
  <option name="HIGHLIGHT_CONFLICTS" value="true" />
16
14
  <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
17
15
  <option name="LAST_RESOLUTION" value="IGNORE" />
18
16
  </component>
17
+ <component name="ChangesViewManager">
18
+ <option name="groupingKeys">
19
+ <option value="directory" />
20
+ </option>
21
+ </component>
19
22
  <component name="Git.Settings">
20
23
  <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
21
24
  <option name="ROOT_SYNC" value="DONT_SYNC" />
22
25
  </component>
26
+ <component name="GitSEFilterConfiguration">
27
+ <file-type-list>
28
+ <filtered-out-file-type name="LOCAL_BRANCH" />
29
+ <filtered-out-file-type name="REMOTE_BRANCH" />
30
+ <filtered-out-file-type name="TAG" />
31
+ <filtered-out-file-type name="COMMIT_BY_MESSAGE" />
32
+ </file-type-list>
33
+ </component>
23
34
  <component name="MacroExpansionManager">
24
35
  <option name="directoryName" value="iy052u10" />
25
36
  </component>
26
37
  <component name="ProjectId" id="1PI8FtTkoa1tFBP8398nQ82nYf0" />
27
38
  <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
28
39
  <component name="ProjectViewState">
29
- <option name="autoscrollFromSource" value="true" />
30
40
  <option name="autoscrollToSource" value="true" />
31
41
  <option name="hideEmptyMiddlePackages" value="true" />
32
42
  <option name="showLibraryContents" value="true" />
@@ -38,7 +48,7 @@
38
48
  <property name="com.intellij.ide.scratch.LRUPopupBuilder$1/New Scratch File" value="JavaScript" />
39
49
  <property name="full.screen.before.presentation.mode" value="true" />
40
50
  <property name="last.edited.regexp" value="jsx{1,2}" />
41
- <property name="last_opened_file_path" value="$PROJECT_DIR$/../react-rx.dev" />
51
+ <property name="last_opened_file_path" value="$PROJECT_DIR$/src" />
42
52
  <property name="node.js.detected.package.eslint" value="true" />
43
53
  <property name="node.js.detected.package.standard" value="true" />
44
54
  <property name="node.js.detected.package.tslint" value="true" />
@@ -53,27 +63,27 @@
53
63
  <property name="nodejs_npm_path_reset_for_default_project" value="true" />
54
64
  <property name="nodejs_package_manager_path" value="npm" />
55
65
  <property name="prettierjs.PrettierConfiguration.Package" value="$PROJECT_DIR$/node_modules/prettier" />
56
- <property name="settings.editor.selected.configurable" value="settings.javascript.linters.eslint" />
66
+ <property name="settings.editor.selected.configurable" value="project.propVCSSupport.Mappings" />
57
67
  <property name="ts.external.directory.path" value="$PROJECT_DIR$/node_modules/typescript/lib" />
58
68
  <property name="vue.rearranger.settings.migration" value="true" />
59
69
  </component>
60
70
  <component name="RecentsManager">
71
+ <key name="CopyFile.RECENT_KEYS">
72
+ <recent name="$PROJECT_DIR$/src" />
73
+ <recent name="$PROJECT_DIR$/test-concurrent-mode" />
74
+ <recent name="$PROJECT_DIR$/website/src/examples" />
75
+ <recent name="$PROJECT_DIR$/src/__tests__" />
76
+ <recent name="$PROJECT_DIR$/../react-rx.dev" />
77
+ </key>
61
78
  <key name="MoveFile.RECENT_KEYS">
79
+ <recent name="$PROJECT_DIR$/website/src/examples" />
80
+ <recent name="$PROJECT_DIR$/src" />
62
81
  <recent name="$PROJECT_DIR$/../react-rx.dev/src" />
63
82
  <recent name="$PROJECT_DIR$/../react-rx.dev/webpack" />
64
83
  <recent name="$PROJECT_DIR$/../react-rx.dev/webpack-configs" />
65
- <recent name="$PROJECT_DIR$/../react-rx.dev/webpack-plugins" />
66
- <recent name="$PROJECT_DIR$/../react-rx.dev/public" />
67
- </key>
68
- <key name="CopyFile.RECENT_KEYS">
69
- <recent name="$PROJECT_DIR$/../react-rx.dev" />
70
- <recent name="$PROJECT_DIR$/src/__tests__" />
71
- <recent name="$PROJECT_DIR$/../react-rx.dev/src/entries" />
72
- <recent name="$PROJECT_DIR$/../react-rx.dev/src/datastores" />
73
- <recent name="$PROJECT_DIR$/../react-rx.dev/src/pages/Index" />
74
84
  </key>
75
85
  </component>
76
- <component name="RunManager" selected="Jest.All Tests">
86
+ <component name="RunManager" selected="Jest.it calls the setup function once, at mount">
77
87
  <configuration name="All Tests" type="JavaScriptTestRunnerJest" nameIsGenerated="true">
78
88
  <node-interpreter value="project" />
79
89
  <node-options value="" />
@@ -83,53 +93,63 @@
83
93
  <scope-kind value="ALL" />
84
94
  <method v="2" />
85
95
  </configuration>
86
- <configuration name="should only subscribe once when given same observable on rerenders" type="JavaScriptTestRunnerJest" temporary="true" nameIsGenerated="true">
96
+ <configuration name="asObservable.test.tsx" type="JavaScriptTestRunnerJest" temporary="true" nameIsGenerated="true">
97
+ <node-interpreter value="project" />
98
+ <node-options value="" />
99
+ <jest-package value="$PROJECT_DIR$/node_modules/jest" />
100
+ <working-dir value="$PROJECT_DIR$" />
101
+ <envs />
102
+ <scope-kind value="TEST_FILE" />
103
+ <test-file value="$PROJECT_DIR$/src/__tests__/asObservable.test.tsx" />
104
+ <method v="2" />
105
+ </configuration>
106
+ <configuration name="it calls the setup function once, at mount" type="JavaScriptTestRunnerJest" temporary="true" nameIsGenerated="true">
87
107
  <node-interpreter value="project" />
88
108
  <node-options value="" />
89
109
  <jest-package value="$PROJECT_DIR$/node_modules/jest" />
90
110
  <working-dir value="$PROJECT_DIR$" />
91
111
  <envs />
92
112
  <scope-kind value="TEST" />
93
- <test-file value="$PROJECT_DIR$/src/__tests__/useObservable.test.tsx" />
113
+ <test-file value="$PROJECT_DIR$/src/__tests__/reactiveComponent.test.tsx" />
94
114
  <test-names>
95
- <test-name value="should only subscribe once when given same observable on rerenders" />
115
+ <test-name value="it calls the setup function once, at mount" />
96
116
  </test-names>
97
117
  <method v="2" />
98
118
  </configuration>
99
- <configuration name="should re-subscribe when receiving a new observable" type="JavaScriptTestRunnerJest" temporary="true" nameIsGenerated="true">
119
+ <configuration name="the returned observable should *not* receive a new value when component is rendered with an unchanged value" type="JavaScriptTestRunnerJest" temporary="true" nameIsGenerated="true">
100
120
  <node-interpreter value="project" />
101
121
  <node-options value="" />
102
122
  <jest-package value="$PROJECT_DIR$/node_modules/jest" />
103
123
  <working-dir value="$PROJECT_DIR$" />
104
124
  <envs />
105
125
  <scope-kind value="TEST" />
106
- <test-file value="$PROJECT_DIR$/src/__tests__/useObservable.test.tsx" />
126
+ <test-file value="$PROJECT_DIR$/src/__tests__/asObservable.test.tsx" />
107
127
  <test-names>
108
- <test-name value="should re-subscribe when receiving a new observable" />
128
+ <test-name value="the returned observable should *not* receive a new value when component is rendered with an unchanged value" />
109
129
  </test-names>
110
130
  <method v="2" />
111
131
  </configuration>
112
- <configuration name="toObservable on value returned from a hook" type="JavaScriptTestRunnerJest" temporary="true" nameIsGenerated="true">
132
+ <configuration name="the returned observable should receive a new value when component is rendered with a new value" type="JavaScriptTestRunnerJest" temporary="true" nameIsGenerated="true">
113
133
  <node-interpreter value="project" />
114
134
  <node-options value="" />
115
135
  <jest-package value="$PROJECT_DIR$/node_modules/jest" />
116
136
  <working-dir value="$PROJECT_DIR$" />
117
137
  <envs />
118
138
  <scope-kind value="TEST" />
119
- <test-file value="$PROJECT_DIR$/src/__tests__/toObservable.test.tsx" />
139
+ <test-file value="$PROJECT_DIR$/src/__tests__/asObservable.test.tsx" />
120
140
  <test-names>
121
- <test-name value="toObservable on value returned from a hook" />
141
+ <test-name value="the returned observable should receive a new value when component is rendered with a new value" />
122
142
  </test-names>
123
143
  <method v="2" />
124
144
  </configuration>
125
- <configuration name="toObservable.test.tsx" type="JavaScriptTestRunnerJest" temporary="true" nameIsGenerated="true">
145
+ <configuration name="useAsObservable.test.tsx" type="JavaScriptTestRunnerJest" temporary="true" nameIsGenerated="true">
126
146
  <node-interpreter value="project" />
127
147
  <node-options value="" />
128
148
  <jest-package value="$PROJECT_DIR$/node_modules/jest" />
129
149
  <working-dir value="$PROJECT_DIR$" />
130
150
  <envs />
131
151
  <scope-kind value="TEST_FILE" />
132
- <test-file value="$PROJECT_DIR$/src/__tests__/toObservable.test.tsx" />
152
+ <test-file value="$PROJECT_DIR$/src/__tests__/useAsObservable.test.tsx" />
133
153
  <method v="2" />
134
154
  </configuration>
135
155
  <configuration name="useObservable.test.tsx" type="JavaScriptTestRunnerJest" nameIsGenerated="true">
@@ -142,32 +162,22 @@
142
162
  <test-file value="$PROJECT_DIR$/src/__tests__/useObservable.test.tsx" />
143
163
  <method v="2" />
144
164
  </configuration>
145
- <configuration name="build" type="js.build_tools.npm" temporary="true" nameIsGenerated="true">
146
- <package-json value="$PROJECT_DIR$/package.json" />
147
- <command value="run" />
148
- <scripts>
149
- <script value="build" />
150
- </scripts>
151
- <node-interpreter value="project" />
152
- <envs />
153
- <method v="2" />
154
- </configuration>
155
165
  <list>
156
166
  <item itemvalue="Jest.All Tests" />
157
167
  <item itemvalue="Jest.useObservable.test.tsx" />
158
- <item itemvalue="Jest.toObservable.test.tsx" />
159
- <item itemvalue="Jest.toObservable on value returned from a hook" />
160
- <item itemvalue="Jest.should re-subscribe when receiving a new observable" />
161
- <item itemvalue="Jest.should only subscribe once when given same observable on rerenders" />
162
- <item itemvalue="npm.build" />
168
+ <item itemvalue="Jest.asObservable.test.tsx" />
169
+ <item itemvalue="Jest.it calls the setup function once, at mount" />
170
+ <item itemvalue="Jest.the returned observable should *not* receive a new value when component is rendered with an unchanged value" />
171
+ <item itemvalue="Jest.the returned observable should receive a new value when component is rendered with a new value" />
172
+ <item itemvalue="Jest.useAsObservable.test.tsx" />
163
173
  </list>
164
174
  <recent_temporary>
165
175
  <list>
166
- <item itemvalue="Jest.should only subscribe once when given same observable on rerenders" />
167
- <item itemvalue="Jest.should re-subscribe when receiving a new observable" />
168
- <item itemvalue="npm.build" />
169
- <item itemvalue="Jest.toObservable.test.tsx" />
170
- <item itemvalue="Jest.toObservable on value returned from a hook" />
176
+ <item itemvalue="Jest.it calls the setup function once, at mount" />
177
+ <item itemvalue="Jest.useAsObservable.test.tsx" />
178
+ <item itemvalue="Jest.asObservable.test.tsx" />
179
+ <item itemvalue="Jest.the returned observable should receive a new value when component is rendered with a new value" />
180
+ <item itemvalue="Jest.the returned observable should *not* receive a new value when component is rendered with an unchanged value" />
171
181
  </list>
172
182
  </recent_temporary>
173
183
  </component>
@@ -204,6 +214,9 @@
204
214
  <component name="VcsManagerConfiguration">
205
215
  <ignored-roots>
206
216
  <path value="$PROJECT_DIR$/../../_/parcel-plugin-mdx" />
217
+ <path value="$PROJECT_DIR$/test-concurrent-mode" />
218
+ <path value="$PROJECT_DIR$/test-concurrent-mode2" />
219
+ <path value="$PROJECT_DIR$/website" />
207
220
  </ignored-roots>
208
221
  </component>
209
222
  <component name="com.intellij.coverage.CoverageDataManagerImpl">
@@ -1,10 +1,10 @@
1
- import * as React from 'react';
2
1
  import { Observable } from 'rxjs';
2
+ import { ComponentType, ReactNode } from 'react';
3
3
  interface Props<T> {
4
4
  observable: Observable<T>;
5
- children: (value: T) => React.ReactNode;
5
+ children: (value: T) => ReactNode;
6
6
  }
7
- declare type ObservableComponent<T> = React.ComponentType<Props<T>>;
7
+ declare type ObservableComponent<T> = ComponentType<Props<T>>;
8
8
  /**
9
9
  * @deprecated Use the useObservable hook instead
10
10
  */
@@ -4,9 +4,9 @@ exports.WithObservable = void 0;
4
4
  var operators_1 = require("rxjs/operators");
5
5
  var reactiveComponent_1 = require("./reactiveComponent");
6
6
  function createWithObservable() {
7
- return reactiveComponent_1.reactiveComponent(function (props$) {
8
- return props$.pipe(operators_1.distinctUntilChanged(function (props, prevProps) { return props.observable === prevProps.observable; }), operators_1.switchMap(function (props) {
9
- return props.observable.pipe(operators_1.map(function (observableValue) { return props.children(observableValue); }));
7
+ return (0, reactiveComponent_1.reactiveComponent)(function (props$) {
8
+ return props$.pipe((0, operators_1.distinctUntilChanged)(function (props, prevProps) { return props.observable === prevProps.observable; }), (0, operators_1.switchMap)(function (props) {
9
+ return props.observable.pipe((0, operators_1.map)(function (observableValue) { return props.children(observableValue); }));
10
10
  }));
11
11
  });
12
12
  }
@@ -1,3 +1,7 @@
1
1
  export { reactiveComponent, reactiveComponent as rxComponent, forwardRef } from './reactiveComponent';
2
- export { createEventHandler, createState } from './utils';
3
- export { useObservableState as useState, useObservableState, useObservableContext as useContext, useObservableContext, useObservableEvent as useEvent, useObservableEvent, useObservableElement as useElement, useObservable, toObservable, } from './useObservable';
2
+ export { observeState, observeCallback, observeContext, observeElement } from './utils';
3
+ export { observeState as state, observeCallback as handler, observeContext as context, observeElement as elementRef, } from './utils';
4
+ export { observableCallback } from 'observable-callback';
5
+ export { useObservable, useMemoObservable } from './useObservable';
6
+ export { useAsObservable } from './useAsObservable';
7
+ export { useObservableCallback } from './useObservableCallback';
package/dist/cjs/index.js CHANGED
@@ -1,21 +1,28 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toObservable = exports.useObservable = exports.useElement = exports.useObservableEvent = exports.useEvent = exports.useObservableContext = exports.useContext = exports.useObservableState = exports.useState = exports.createState = exports.createEventHandler = exports.forwardRef = exports.rxComponent = exports.reactiveComponent = void 0;
3
+ exports.useObservableCallback = exports.useAsObservable = exports.useMemoObservable = exports.useObservable = exports.observableCallback = exports.elementRef = exports.context = exports.handler = exports.state = exports.observeElement = exports.observeContext = exports.observeCallback = exports.observeState = exports.forwardRef = exports.rxComponent = exports.reactiveComponent = void 0;
4
4
  // Main package exports
5
5
  var reactiveComponent_1 = require("./reactiveComponent");
6
6
  Object.defineProperty(exports, "reactiveComponent", { enumerable: true, get: function () { return reactiveComponent_1.reactiveComponent; } });
7
7
  Object.defineProperty(exports, "rxComponent", { enumerable: true, get: function () { return reactiveComponent_1.reactiveComponent; } });
8
8
  Object.defineProperty(exports, "forwardRef", { enumerable: true, get: function () { return reactiveComponent_1.forwardRef; } });
9
9
  var utils_1 = require("./utils");
10
- Object.defineProperty(exports, "createEventHandler", { enumerable: true, get: function () { return utils_1.createEventHandler; } });
11
- Object.defineProperty(exports, "createState", { enumerable: true, get: function () { return utils_1.createState; } });
10
+ Object.defineProperty(exports, "observeState", { enumerable: true, get: function () { return utils_1.observeState; } });
11
+ Object.defineProperty(exports, "observeCallback", { enumerable: true, get: function () { return utils_1.observeCallback; } });
12
+ Object.defineProperty(exports, "observeContext", { enumerable: true, get: function () { return utils_1.observeContext; } });
13
+ Object.defineProperty(exports, "observeElement", { enumerable: true, get: function () { return utils_1.observeElement; } });
14
+ var utils_2 = require("./utils");
15
+ Object.defineProperty(exports, "state", { enumerable: true, get: function () { return utils_2.observeState; } });
16
+ Object.defineProperty(exports, "handler", { enumerable: true, get: function () { return utils_2.observeCallback; } });
17
+ Object.defineProperty(exports, "context", { enumerable: true, get: function () { return utils_2.observeContext; } });
18
+ Object.defineProperty(exports, "elementRef", { enumerable: true, get: function () { return utils_2.observeElement; } });
19
+ var observable_callback_1 = require("observable-callback");
20
+ Object.defineProperty(exports, "observableCallback", { enumerable: true, get: function () { return observable_callback_1.observableCallback; } });
21
+ // hooks
12
22
  var useObservable_1 = require("./useObservable");
13
- Object.defineProperty(exports, "useState", { enumerable: true, get: function () { return useObservable_1.useObservableState; } });
14
- Object.defineProperty(exports, "useObservableState", { enumerable: true, get: function () { return useObservable_1.useObservableState; } });
15
- Object.defineProperty(exports, "useContext", { enumerable: true, get: function () { return useObservable_1.useObservableContext; } });
16
- Object.defineProperty(exports, "useObservableContext", { enumerable: true, get: function () { return useObservable_1.useObservableContext; } });
17
- Object.defineProperty(exports, "useEvent", { enumerable: true, get: function () { return useObservable_1.useObservableEvent; } });
18
- Object.defineProperty(exports, "useObservableEvent", { enumerable: true, get: function () { return useObservable_1.useObservableEvent; } });
19
- Object.defineProperty(exports, "useElement", { enumerable: true, get: function () { return useObservable_1.useObservableElement; } });
20
23
  Object.defineProperty(exports, "useObservable", { enumerable: true, get: function () { return useObservable_1.useObservable; } });
21
- Object.defineProperty(exports, "toObservable", { enumerable: true, get: function () { return useObservable_1.toObservable; } });
24
+ Object.defineProperty(exports, "useMemoObservable", { enumerable: true, get: function () { return useObservable_1.useMemoObservable; } });
25
+ var useAsObservable_1 = require("./useAsObservable");
26
+ Object.defineProperty(exports, "useAsObservable", { enumerable: true, get: function () { return useAsObservable_1.useAsObservable; } });
27
+ var useObservableCallback_1 = require("./useObservableCallback");
28
+ Object.defineProperty(exports, "useObservableCallback", { enumerable: true, get: function () { return useObservableCallback_1.useObservableCallback; } });
@@ -1,8 +1,8 @@
1
- import * as React from 'react';
2
1
  import { Observable } from 'rxjs';
3
- declare type Component<Props> = (input$: Observable<Props>) => Observable<React.ReactNode>;
4
- export declare function reactiveComponent<Props>(observable: Observable<Props>): React.FunctionComponent<{}>;
5
- export declare function reactiveComponent<Props>(component: Component<Props>): React.FunctionComponent<Props>;
6
- declare type ForwardRefComponent<RefType, Props> = (input$: Observable<Props>, ref: React.Ref<RefType>) => Observable<React.ReactNode>;
7
- export declare function forwardRef<RefType, Props = {}>(component: ForwardRefComponent<RefType, Props>): React.ForwardRefExoticComponent<React.PropsWithoutRef<Props> & React.RefAttributes<RefType>>;
2
+ import { FunctionComponent, ReactNode, Ref } from 'react';
3
+ declare type Component<Props> = (input$: Observable<Props>) => Observable<ReactNode>;
4
+ export declare function reactiveComponent<Props>(observable: Observable<Props>): FunctionComponent<{}>;
5
+ export declare function reactiveComponent<Props>(component: Component<Props>): FunctionComponent<Props>;
6
+ declare type ForwardRefComponent<RefType, Props> = (input$: Observable<Props>, ref: Ref<RefType>) => Observable<ReactNode>;
7
+ export declare function forwardRef<RefType, Props = {}>(component: ForwardRefComponent<RefType, Props>): import("react").ForwardRefExoticComponent<import("react").PropsWithoutRef<Props> & import("react").RefAttributes<RefType>>;
8
8
  export {};
@@ -1,38 +1,20 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
2
  Object.defineProperty(exports, "__esModule", { value: true });
22
3
  exports.forwardRef = exports.reactiveComponent = void 0;
23
- var React = __importStar(require("react"));
24
4
  var displayName_1 = require("./displayName");
5
+ var useAsObservable_1 = require("./useAsObservable");
25
6
  var useObservable_1 = require("./useObservable");
7
+ var react_1 = require("react");
26
8
  function fromComponent(component) {
27
9
  var wrappedComponent = function (props) {
28
- return React.createElement(React.Fragment, null, useObservable_1.useObservable(useObservable_1.toObservable(props, component)));
10
+ return (0, react_1.createElement)(react_1.Fragment, null, (0, useObservable_1.useObservable)((0, react_1.useRef)(component((0, useAsObservable_1.useAsObservable)(props))).current));
29
11
  };
30
- wrappedComponent.displayName = displayName_1.wrapDisplayName(component, 'reactiveComponent');
12
+ wrappedComponent.displayName = (0, displayName_1.wrapDisplayName)(component, 'reactiveComponent');
31
13
  return wrappedComponent;
32
14
  }
33
15
  function fromObservable(input$) {
34
16
  return function ReactiveComponent() {
35
- return React.createElement(React.Fragment, null, useObservable_1.useObservable(input$));
17
+ return (0, react_1.createElement)(react_1.Fragment, null, (0, useObservable_1.useObservable)(input$));
36
18
  };
37
19
  }
38
20
  function reactiveComponent(observableOrComponent) {
@@ -42,10 +24,10 @@ function reactiveComponent(observableOrComponent) {
42
24
  }
43
25
  exports.reactiveComponent = reactiveComponent;
44
26
  function forwardRef(component) {
45
- var wrappedComponent = React.forwardRef(function (props, ref) {
46
- return React.createElement(React.Fragment, null, useObservable_1.useObservable(component(useObservable_1.toObservable(props), ref)));
27
+ var wrappedComponent = (0, react_1.forwardRef)(function (props, ref) {
28
+ return (0, react_1.createElement)(react_1.Fragment, null, (0, useObservable_1.useObservable)((0, react_1.useRef)(component((0, useAsObservable_1.useAsObservable)(props), ref)).current));
47
29
  });
48
- wrappedComponent.displayName = displayName_1.wrapDisplayName(component, 'reactiveComponent');
30
+ wrappedComponent.displayName = (0, displayName_1.wrapDisplayName)(component, 'reactiveComponent');
49
31
  return wrappedComponent;
50
32
  }
51
33
  exports.forwardRef = forwardRef;
@@ -0,0 +1,9 @@
1
+ import { Observable } from 'rxjs';
2
+ /**
3
+ * React hook to convert any props or state value into an observable
4
+ * Returns an observable representing updates to any React value (props, state or any other calculated value)
5
+ * Note: the returned observable is the same instance throughout the component lifecycle
6
+ * @param value
7
+ */
8
+ export declare function useAsObservable<T>(value: T): Observable<T>;
9
+ export declare function useAsObservable<T, K>(value: T, operator: (input: Observable<T>) => Observable<K>): Observable<K>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useAsObservable = void 0;
4
+ var rxjs_1 = require("rxjs");
5
+ var react_1 = require("react");
6
+ var useIsomorphicEffect_1 = require("./useIsomorphicEffect");
7
+ function useAsObservable(value, operator) {
8
+ var isInitial = (0, react_1.useRef)(true);
9
+ var subjectRef = (0, react_1.useRef)(new rxjs_1.BehaviorSubject(value));
10
+ var observableRef = (0, react_1.useRef)();
11
+ if (!observableRef.current) {
12
+ var observable = subjectRef.current.asObservable();
13
+ observableRef.current = operator ? observable.pipe(operator) : observable;
14
+ }
15
+ (0, useIsomorphicEffect_1.useIsomorphicEffect)(function () {
16
+ if (isInitial.current) {
17
+ isInitial.current = false;
18
+ }
19
+ else {
20
+ // emit only on update
21
+ subjectRef.current.next(value);
22
+ }
23
+ }, [value]);
24
+ (0, useIsomorphicEffect_1.useIsomorphicEffect)(function () {
25
+ return function () {
26
+ return subjectRef.current.complete();
27
+ };
28
+ }, []);
29
+ return observableRef.current;
30
+ }
31
+ exports.useAsObservable = useAsObservable;
@@ -0,0 +1,2 @@
1
+ import { useLayoutEffect } from 'react';
2
+ export declare const useIsomorphicEffect: typeof useLayoutEffect;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useIsomorphicEffect = void 0;
4
+ var react_1 = require("react");
5
+ exports.useIsomorphicEffect = typeof window !== 'undefined' ? react_1.useLayoutEffect : react_1.useEffect;
@@ -1,16 +1,7 @@
1
- import * as React from 'react';
2
1
  import { Observable } from 'rxjs';
3
- export declare function toObservable<T>(value: T): Observable<T>;
4
- export declare function toObservable<T, K>(value: T, setup: (props$: Observable<T>) => Observable<K>): Observable<K>;
5
- export declare function useObservable<T>(observable$: Observable<T>): T | undefined;
6
- export declare function useObservable<T>(observable$: Observable<T>, initialValue: T): T;
7
- export declare function useObservable<T>(observable$: Observable<T>, initialValue: () => T): T;
8
- export declare function useObservableState<T>(initial: T | (() => T)): [Observable<T>, React.Dispatch<React.SetStateAction<T>>];
9
- export declare function useObservableContext<T>(context: React.Context<T>): Observable<T>;
10
- declare type ObservableEventTuple<Event> = [Observable<Event>, (event: Event) => void];
11
- export declare function useObservableEvent<Event>(): ObservableEventTuple<Event>;
12
- export declare function useObservableElement<Element extends HTMLElement>(): [
13
- Observable<Element | null>,
14
- (el: Element | null) => void
15
- ];
16
- export {};
2
+ import { DependencyList } from 'react';
3
+ export declare function useObservable<T>(observable: Observable<T>): T | undefined;
4
+ export declare function useObservable<T>(observable: Observable<T>, initialValue: T): T;
5
+ export declare function useObservable<T>(observable: Observable<T>, initialValue: () => T): T;
6
+ export declare function useMemoObservable<T>(observableOrFactory: Observable<T> | (() => Observable<T>), deps: DependencyList): T | undefined;
7
+ export declare function useMemoObservable<T>(observableOrFactory: Observable<T> | (() => Observable<T>), deps: DependencyList, initialValue: T | (() => T)): T;
@@ -1,62 +1,18 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
2
  Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.useObservableElement = exports.useObservableEvent = exports.useObservableContext = exports.useObservableState = exports.useObservable = exports.toObservable = void 0;
23
- var React = __importStar(require("react"));
24
- var rxjs_1 = require("rxjs");
25
- var utils_1 = require("./utils");
26
- function toObservable(value, setup) {
27
- var isInitial = React.useRef(true);
28
- var subject = React.useRef(new rxjs_1.BehaviorSubject(value));
29
- React.useEffect(function () {
30
- if (isInitial.current) {
31
- isInitial.current = false;
32
- }
33
- else {
34
- // emit only on update
35
- subject.current.next(value);
36
- }
37
- }, [value]);
38
- React.useEffect(function () {
39
- return function () {
40
- return subject.current.complete();
41
- };
42
- }, []);
43
- var observable = subject.current.asObservable();
44
- return setup ? setup(observable) : observable;
45
- }
46
- exports.toObservable = toObservable;
47
- var isCallable = function (val) {
48
- return typeof val === 'function';
49
- };
3
+ exports.useMemoObservable = exports.useObservable = void 0;
4
+ var react_1 = require("react");
5
+ var useIsomorphicEffect_1 = require("./useIsomorphicEffect");
50
6
  function getValue(value) {
51
- return isCallable(value) ? value() : value;
7
+ return typeof value === 'function' ? value() : value;
52
8
  }
53
- function useObservable(observable$, initialValue) {
54
- var subscription = React.useRef();
55
- var isInitial = React.useRef(true);
56
- var _a = React.useState(function () {
9
+ function useObservable(observable, initialValue) {
10
+ var subscription = (0, react_1.useRef)();
11
+ var isInitial = (0, react_1.useRef)(true);
12
+ var _a = (0, react_1.useState)(function () {
57
13
  var isSync = true;
58
14
  var syncVal = getValue(initialValue);
59
- subscription.current = observable$.subscribe(function (nextVal) {
15
+ subscription.current = observable.subscribe(function (nextVal) {
60
16
  if (isSync) {
61
17
  syncVal = nextVal;
62
18
  }
@@ -67,35 +23,23 @@ function useObservable(observable$, initialValue) {
67
23
  isSync = false;
68
24
  return syncVal;
69
25
  }), value = _a[0], setState = _a[1];
70
- React.useEffect(function () {
71
- // when the observable$ changes after initial (possibly sync render)
26
+ (0, useIsomorphicEffect_1.useIsomorphicEffect)(function () {
27
+ // when the observable changes after initial (possibly sync render)
72
28
  if (!isInitial.current) {
73
- subscription.current = observable$.subscribe(function (nextVal) { return setState(nextVal); });
29
+ subscription.current = observable.subscribe(function (nextVal) { return setState(nextVal); });
74
30
  }
75
31
  isInitial.current = false;
76
32
  return function () {
77
33
  if (subscription.current) {
78
34
  subscription.current.unsubscribe();
35
+ subscription.current = undefined;
79
36
  }
80
37
  };
81
- }, [observable$]);
38
+ }, [observable]);
82
39
  return value;
83
40
  }
84
41
  exports.useObservable = useObservable;
85
- function useObservableState(initial) {
86
- var _a = React.useState(initial), value = _a[0], update = _a[1];
87
- return [toObservable(value), update];
88
- }
89
- exports.useObservableState = useObservableState;
90
- function useObservableContext(context) {
91
- return toObservable(React.useContext(context));
92
- }
93
- exports.useObservableContext = useObservableContext;
94
- function useObservableEvent() {
95
- return React.useMemo(utils_1.createEventHandler, []);
96
- }
97
- exports.useObservableEvent = useObservableEvent;
98
- function useObservableElement() {
99
- return useObservableState(null);
42
+ function useMemoObservable(observableOrFactory, deps, initialValue) {
43
+ return useObservable((0, react_1.useMemo)(function () { return getValue(observableOrFactory); }, deps), initialValue);
100
44
  }
101
- exports.useObservableElement = useObservableElement;
45
+ exports.useMemoObservable = useMemoObservable;
@@ -0,0 +1,3 @@
1
+ import { DependencyList } from 'react';
2
+ import { Observable } from 'rxjs';
3
+ export declare function useObservableCallback<T, U>(fn: (arg: Observable<T>) => Observable<U>, dependencies?: DependencyList): (arg: T) => void;