
Research
Malicious npm Packages Impersonate Flashbots SDKs, Targeting Ethereum Wallet Credentials
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
@nozbe/with-observables
Advanced tools
withObservables
A higher-order component for connecting RxJS Observables to React components.
(Taken from WatermelonDB)
const Post = ({ post, comments }) => (
<article>
<h1>{post.name}</h1>
<p>{post.body}</p>
<h2>Comments</h2>
{comments.map(comment =>
<EnhancedComment key={comment.id} comment={comment} />
)}
</article>
)
const enhance = withObservables(['post'], ({ post }) => ({
post: post.observe(),
comments: post.comments.observe()
}))
const EnhancedPost = enhance(Post)
➡️ Learn more: Connecting WatermelonDB to Components
yarn add @nozbe/with-observables
And then to use:
import withObservables from '@nozbe/with-observables'
withObservables(triggerProps, getObservables)
// Injects new props to a component with values from the passed Observables
//
// Every time one of the `triggerProps` changes, `getObservables()` is called
// and the returned Observables are subscribed to.
//
// Every time one of the Observables emits a new value, the matching inner prop is updated.
//
// You can return multiple Observables in the function. You can also return arbitrary objects that have
// an `observe()` function that returns an Observable.
//
// The inner component will not render until all supplied Observables return their first values.
// If `triggerProps` change, renders will also be paused until the new Observables emit first values.
//
// If you only want to subscribe to Observables once (the Observables don't depend on outer props),
// pass `null` to `triggerProps`.
//
// Errors are re-thrown in render(). Use React Error Boundary to catch them.
//
// Example use:
// withObservables(['task'], ({ task }) => ({
// task: task,
// comments: task.comments.observe()
// }))
The TypeScript bindings expose a helper type, ObservableifyProps<Props, ObservableKeys, ObservableConvertibleKeys>
which can make it easier to wrap components without duplicating interfaces:
interface Props {
post: Post;
author: Author;
someOtherProp: boolean;
anotherProp: number;
}
const PostRenderer: React.FC<Props> = (props) => ( ... );
type InputProps = ObservableifyProps<Props, "author", "post">
const enhance = withObservables(["post", "author"], ({ post }: InputProps) => ({
post,
author: author.observe()
});
export default enhance(PostRenderer);
Or you can let getObservables
define your props for you:
import withObservables, {ExtractedObservables} from "@nozbe/with-observables"
const getObservables = ({ post }: { post: Post }}) => ({
post,
author: author.observe()
});
interface Props extends ExtractedObservables<ReturnType<typeof getObservables>> {
someOtherProp: boolean;
anotherProp: number;
}
const PostRenderer: React.FC<Props> = (props) => (
<>{props.author.id}</>
);
export default withObservables(["post"], getObservables)(PostRenderer);
withObservables was created by @Nozbe for WatermelonDB.
withObservables' main author and maintainer is Radek Pietruszewski (website ⋅ twitter ⋅ engineering posters)
withObservables is available under the MIT license. See the LICENSE file for more info.
1.6.0 - 2023-06-12
NOTE: We will be abandoning a standalone @nozbe/withObservables package and merging it into @nozbe/watermelondb. This might be the last release of this package.
If you're using withObservables WITHOUT WatermelonDB, please file an issue. If there's enough demand for a standalone package, we'll consider maintaining it.
react
, @types/react
peer dependencies to allow React 18. This fixes issues by NPMv7 usershoist-non-react-statics
dependency@types/hoist-non-react-statics
and @types/react
peer dependencies as optional (for non-TS users)_isMounted
propertyFAQs
Unknown package
The npm package @nozbe/with-observables receives a total of 3,082 weekly downloads. As such, @nozbe/with-observables popularity was classified as popular.
We found that @nozbe/with-observables demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 6 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last week’s supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.