Skip to content

Commit 63637fe

Browse files
committed
feat: 🥼 basic utilis and jest setup
1 parent ac32cf6 commit 63637fe

File tree

11 files changed

+157
-2
lines changed

11 files changed

+157
-2
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
node_modules
22
yarn.lock
3+
yarn-error.log
4+
coverage

esbuild-runner.config.mjs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export default {
2+
type: 'bundle',
3+
esbuild: {
4+
format: 'esm',
5+
platform: 'node',
6+
target: 'esnext'
7+
}
8+
}

jest.config.mjs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/** @type {import('@jest/types').Config.InitialOptions} */
2+
export default {
3+
clearMocks: true,
4+
collectCoverageFrom: ['src/**/*', '!**/index.ts'],
5+
coverageDirectory: 'coverage',
6+
testEnvironment: 'node',
7+
extensionsToTreatAsEsm: ['.ts'],
8+
moduleFileExtensions: [ 'ts', 'tsx', 'mjs', 'js', 'jsx', 'json', 'node' ],
9+
transformIgnorePatterns: ['/node_modules/.*\\.js$'],
10+
transform: {
11+
'\\.(ts|tsx)?$': 'esbuild-runner/jest',
12+
}
13+
}

package.json

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,33 @@
22
"name": "@nested-code/configs",
33
"version": "0.0.1",
44
"description": "Centralised config of dev tooling for Nested Code packages.",
5-
"main": "index.js",
65
"repository": "https://github.com/nested-code/configs",
76
"author": "Tim Kinnane <[email protected]>",
87
"license": "MIT",
9-
"private": "false"
8+
"private": "false",
9+
"type": "module",
10+
"scripts": {
11+
"test": "jest --collectCoverage"
12+
},
13+
"dependencies": {
14+
"@types/node": "14",
15+
"esbuild": "^0.14.10",
16+
"esbuild-runner": "^2.2.1",
17+
"jest": "^27.4.5",
18+
"jest-config": "^27.4.5",
19+
"npm-dts": "^1.3.10",
20+
"rimraf": "^3.0.2",
21+
"ts-jest": "^27.1.2"
22+
},
23+
"devDependencies": {
24+
"@jest/types": "^27.4.2",
25+
"@types/jest": "^27.4.0",
26+
"ts-node": "^10.4.0",
27+
"typescript": "^4.5.4"
28+
},
29+
"exports": {
30+
"import": "./esm/index.mjs",
31+
"types": "./dist/index.d.ts",
32+
"utils": "./dist/utils/index.mjs"
33+
}
1034
}

src/jest/config.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { configure } from './config'
2+
3+
describe('jest > configure', () => {
4+
describe('configure', () => {
5+
it('provides defaults', () => {
6+
expect(configure())
7+
.toMatchObject({
8+
clearMocks: true,
9+
collectCoverage: true,
10+
})
11+
})
12+
it('merges args with defaults', () => {
13+
expect(configure({ collectCoverage: false }))
14+
.toMatchObject({
15+
clearMocks: true,
16+
collectCoverage: false,
17+
})
18+
})
19+
})
20+
})

src/jest/config.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import type { Config } from '@jest/types'
2+
3+
export const defaults: Config.InitialOptions = {
4+
clearMocks: true,
5+
collectCoverage: true,
6+
collectCoverageFrom: ['src/**/*', '!**/index.ts'],
7+
coverageDirectory: 'coverage',
8+
testEnvironment: 'node',
9+
extensionsToTreatAsEsm: ['.ts'],
10+
transformIgnorePatterns: ['/node_modules/.*\\.js$'],
11+
transform: {
12+
'\\.(ts|tsx)?$': 'esbuild-runner/jest',
13+
}
14+
}
15+
16+
/**
17+
* Merge cogs default initial options with any given.
18+
* @todo Import from jest.config.mjs at root to keep in sync.
19+
*/
20+
export const configure = (options: Config.InitialOptions = {}): Config.InitialOptions => ({
21+
...defaults,
22+
...options
23+
})

src/jest/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import * as config from './config'
2+
3+
export const jest = {
4+
...config
5+
}
6+
7+
export default jest

src/utils/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import * as pkg from './package'
2+
3+
export const utils = {
4+
...pkg
5+
}
6+
7+
export default utils

src/utils/package.test.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { readPackage, requirePackage } from './package'
2+
3+
describe('utils > package', () => {
4+
describe('readPackage', () => {
5+
it('reads current package json', () => {
6+
expect(readPackage('./'))
7+
.toHaveProperty('name', '@nested-code/configs')
8+
})
9+
})
10+
describe('requirePackage', () => {
11+
it('reads current package json', () => {
12+
expect(requirePackage('./'))
13+
.toHaveProperty('name', '@nested-code/configs')
14+
})
15+
})
16+
})

src/utils/package.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { readFileSync } from 'fs'
2+
import { createRequire } from 'module'
3+
import { resolve } from 'path'
4+
5+
export const readPackage = (path: string) =>
6+
JSON.parse(readFileSync(resolve(path, 'package.json'), { encoding: 'utf-8' }))
7+
8+
export const requirePackage = (path: string) =>
9+
createRequire(import.meta.url)(resolve(path, 'package.json'))

0 commit comments

Comments
 (0)