podcast manager
1import globToRegexp from 'glob-to-regexp'
2import path from 'node:path'
3import {fileURLToPath} from 'node:url'
4import gitignore from 'parse-gitignore'
5import * as tsjest from 'ts-jest'
6
7function gitignorePatterns() {
8 const __filename = fileURLToPath(import.meta.url)
9 const __dirname = path.dirname(__filename)
10 const ignorefile = path.resolve(__dirname, '.gitignore')
11
12 const {patterns} = gitignore(ignorefile)
13 return patterns.map((p) => globToRegexp(p, {globstar: true}).source)
14}
15
16export default {
17 testMatch: ['<rootDir>/src/**/*.spec.{ts,tsx}'],
18 testPathIgnorePatterns: [...gitignorePatterns()],
19
20 cache: true,
21 cacheDirectory: path.join(import.meta.dirname, '.jestcache'),
22
23 testEnvironment: 'node',
24 setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
25
26 // relative imports work by default
27 moduleNameMapper: {
28 '\\.(css|scss|sass)$': 'identity-obj-proxy',
29 },
30
31 // use ts-jest preset for esm support
32 // but we have to tell it to look at jsx files too, not just tsx
33 ...tsjest.createJsWithTsEsmPreset(),
34
35 // if node_modules are ESM, we need to _include_ them from
36 transformIgnorePatterns: ['node_modules/(?!(nanoid|jose|preact|@preact)/)'],
37
38 collectCoverageFrom: ['src/**/*.{ts,tsx}', '!src/**/*.spec.{ts,tsx}', '!src/**/node_modules/**'],
39}