deno.land / x / jotai@v1.8.4 / tests / babel / plugin-react-refresh.test.ts
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185import path from 'path'import { transformSync } from '@babel/core'
const plugin = path.join(__dirname, '../../src/babel/plugin-react-refresh')
const transform = (code: string, filename?: string) => transformSync(code, { babelrc: false, configFile: false, filename, root: '.', plugins: [[plugin]], })?.code
it('Should add a cache for a single atom', () => { expect(transform(`const countAtom = atom(0);`, '/src/atoms/index.ts')) .toMatchInlineSnapshot(` "globalThis.jotaiAtomCache = globalThis.jotaiAtomCache || { cache: new Map(),
get(name, inst) { if (this.cache.has(name)) { return this.cache.get(name); }
this.cache.set(name, inst); return inst; }
}; const countAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/countAtom", atom(0));" `)})
it('Should add a cache for multiple atoms', () => { expect( transform( ` const countAtom = atom(0); const doubleAtom = atom((get) => get(countAtom) * 2); `, '/src/atoms/index.ts' ) ).toMatchInlineSnapshot(` "globalThis.jotaiAtomCache = globalThis.jotaiAtomCache || { cache: new Map(),
get(name, inst) { if (this.cache.has(name)) { return this.cache.get(name); }
this.cache.set(name, inst); return inst; }
}; const countAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/countAtom", atom(0)); const doubleAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/doubleAtom", atom(get => get(countAtom) * 2));" `)})
it('Should add a cache for multiple exported atoms', () => { expect( transform( ` export const countAtom = atom(0); export const doubleAtom = atom((get) => get(countAtom) * 2); `, '/src/atoms/index.ts' ) ).toMatchInlineSnapshot(` "globalThis.jotaiAtomCache = globalThis.jotaiAtomCache || { cache: new Map(),
get(name, inst) { if (this.cache.has(name)) { return this.cache.get(name); }
this.cache.set(name, inst); return inst; }
}; export const countAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/countAtom", atom(0)); export const doubleAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/doubleAtom", atom(get => get(countAtom) * 2));" `)})
it('Should add a cache for a default exported atom', () => { expect(transform(`export default atom(0);`, '/src/atoms/index.ts')) .toMatchInlineSnapshot(` "globalThis.jotaiAtomCache = globalThis.jotaiAtomCache || { cache: new Map(),
get(name, inst) { if (this.cache.has(name)) { return this.cache.get(name); }
this.cache.set(name, inst); return inst; }
}; export default globalThis.jotaiAtomCache.get("/src/atoms/index.ts/defaultExport", atom(0));" `)})
it('Should add a cache for mixed exports of atoms', () => { expect( transform( ` export const countAtom = atom(0); export default atom((get) => get(countAtom) * 2); `, '/src/atoms/index.ts' ) ).toMatchInlineSnapshot(` "globalThis.jotaiAtomCache = globalThis.jotaiAtomCache || { cache: new Map(),
get(name, inst) { if (this.cache.has(name)) { return this.cache.get(name); }
this.cache.set(name, inst); return inst; }
}; export const countAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/countAtom", atom(0)); export default globalThis.jotaiAtomCache.get("/src/atoms/index.ts/defaultExport", atom(get => get(countAtom) * 2));" `)})
it('Should fail if no filename is available', () => { expect(() => transform(`const countAtom = atom(0);`)).toThrowError( 'Filename must be available' )})
it('Should handle atoms returned from functions (#891)', () => { expect( transform( `function createAtom(label) { const anAtom = atom(0); anAtom.debugLabel = label; return anAtom; } const countAtom = atom(0); const countAtom2 = createAtom("countAtom2"); const countAtom3 = createAtom("countAtom3");`, '/src/atoms/index.ts' ) ).toMatchInlineSnapshot(` "globalThis.jotaiAtomCache = globalThis.jotaiAtomCache || { cache: new Map(),
get(name, inst) { if (this.cache.has(name)) { return this.cache.get(name); }
this.cache.set(name, inst); return inst; }
};
function createAtom(label) { const anAtom = atom(0); anAtom.debugLabel = label; return anAtom; }
const countAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/countAtom", atom(0)); const countAtom2 = createAtom("countAtom2"); const countAtom3 = createAtom("countAtom3");" `)})
Version Info