deno.land / x / jotai@v1.8.4 / tests / babel / preset.test.ts
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152import 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' )})
Version Info