
Research
/Security News
9 Malicious NuGet Packages Deliver Time-Delayed Destructive Payloads
Socket researchers discovered nine malicious NuGet packages that use time-delayed payloads to crash applications and corrupt industrial control systems.
@nozbe/with-observables
Advanced tools
withObservablesA 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 2,838 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
/Security News
Socket researchers discovered nine malicious NuGet packages that use time-delayed payloads to crash applications and corrupt industrial control systems.

Security News
Socket CTO Ahmad Nassri discusses why supply chain attacks now target developer machines and what AI means for the future of enterprise security.

Security News
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.