Skip to main content
Module

x/jotai/tests/babel/preset.test.ts

👻 Primitive and flexible state management for React
Go to Latest
File
import path from 'path'import { transformSync } from '@babel/core'
const preset = path.join(__dirname, '../../src/babel/preset')
const transform = (code: string, filename?: string) => transformSync(code, { babelrc: false, configFile: false, filename, presets: [[preset]], })?.code
it('Should add a debugLabel and cache to an atom', () => { expect(transform(`const countAtom = atom(0);`, '/src/atoms.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.ts/countAtom\\", atom(0)); countAtom.debugLabel = \\"countAtom\\";" `)})
it('Should add a debugLabel and cache to multiple atoms', () => { expect( transform( ` const countAtom = atom(0); const doubleAtom = atom((get) => get(countAtom) * 2);`, '/src/atoms.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.ts/countAtom\\", atom(0)); countAtom.debugLabel = \\"countAtom\\"; const doubleAtom = globalThis.jotaiAtomCache.get(\\"/src/atoms.ts/doubleAtom\\", atom(get => get(countAtom) * 2)); doubleAtom.debugLabel = \\"doubleAtom\\";" `)})
it('Should add a cache and debugLabel 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)); countAtom.debugLabel = \\"countAtom\\"; export const doubleAtom = globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/doubleAtom\\", atom(get => get(countAtom) * 2)); doubleAtom.debugLabel = \\"doubleAtom\\";" `)})
it('Should add a cache and debugLabel 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; }
}; const atoms = globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/atoms\\", atom(0)); atoms.debugLabel = \\"atoms\\"; export default atoms;" `)})
it('Should add a cache and debugLabel 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)); countAtom.debugLabel = \\"countAtom\\"; const atoms = globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/atoms\\", atom(get => get(countAtom) * 2)); atoms.debugLabel = \\"atoms\\"; export default atoms;" `)})
it('Should fail if no filename is available', () => { expect(() => transform(`const countAtom = atom(0);`)).toThrowError( 'Filename must be available' )})