Simple, type-safe, "singleton" implementation.
For when your "hot module replacement" involves re-evaluating a module, but
you don't want to actually re-evaluate a portion of it.
npm install @epic-web/remember
<a alt="Epic Web logo" href="https://www.epicweb.dev"
<img width="300px" src="https://github-production-user-asset-6210df.s3.amazonaws.com/1500684/257881576-fd66040b-679f-4f25-b0d0-ab886a14909a.png" />
You're using a framework like Remix with
--manual mode and
re-evaluating your modules on every change. But you have some state that you
don't want to lose between changes. For example:
This was copy/paste/modified/tested from
@jenseng's abuse-the-platform demo
(ISC). It's basically a type-safe singleton implementation that you can use to
keep state between module re-evaluations.
import { remember } from '@epic-web/remember'
export const prisma = remember('prisma', () => new PrismaClient())
Keep in mind that any changes you make within that callback will not be reflected when the module is re-evaluated (that's the whole point). So if you need to change the callback, then you'll need to restart your server.
It might be required to explicitly forget a value if it gets outdated, a memorized connection gets lost or memorized instance closes/errors/etc.
import { remember, forget } from '@epic-web/remember'
export const server = remember('server', () =>
http.createServer().listen('8080')
.on('close', () => forget('server')))
MIT
The original code was written by @jenseng and then I modified it and published it to fit my needs.
$ claude mcp add remember \
-- python -m otcore.mcp_server <graph>