Skip to content

Commit 84b50eb

Browse files
committed
feat: Move to ESM
BREAKING CHANGE: Move to ESM
1 parent 73b580f commit 84b50eb

File tree

5 files changed

+1752
-1630
lines changed

5 files changed

+1752
-1630
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,5 @@ jest.config.js
6565
.eslintrc.js
6666
.commitlintrc.json
6767
vitest.config.ts
68+
.eslintrc.cjs
69+
.prettierrc.cjs

__tests__/index.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { describe, expect, test, vi } from 'vitest';
22
import type { Service, ServiceStartOptions } from '@openapi-typescript-infra/service';
33

4-
import { getReusableApp, clearReusableApp, getExistingApp, request } from '../src';
4+
import { getReusableApp, clearReusableApp, getExistingApp, request } from '../src/index.js';
55

6-
import { FakeServLocals } from './src/types';
6+
import { FakeServLocals } from './src/types.js';
77

88
function getFakeServiceFn(flags: {
99
started: number;

package.json

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
"name": "@openapi-typescript-infra/service-tester",
33
"version": "5.1.0",
44
"description": "Testing utilities for @openapi-typescript-infra/service",
5-
"main": "build/index.js",
5+
"exports": "./build/index.js",
66
"types": "build/index.d.ts",
7+
"type": "module",
78
"scripts": {
89
"test": "vitest",
910
"lint": "eslint .",
@@ -18,7 +19,7 @@
1819
"@openapi-typescript-infra/service": "^2.0.0"
1920
},
2021
"engines": {
21-
"node": ">18.0.0"
22+
"node": ">20.0.0"
2223
},
2324
"author": "[email protected]",
2425
"license": "MIT",
@@ -50,33 +51,35 @@
5051
]
5152
},
5253
"devDependencies": {
53-
"@commitlint/cli": "^19.3.0",
54-
"@commitlint/config-conventional": "^19.2.2",
54+
"@commitlint/cli": "^19.5.0",
55+
"@commitlint/config-conventional": "^19.5.0",
5556
"@openapi-typescript-infra/coconfig": "^4.4.0",
56-
"@openapi-typescript-infra/service": "^4.18.0",
57+
"@openapi-typescript-infra/service": "^5.1.0",
5758
"@semantic-release/changelog": "^6.0.3",
58-
"@semantic-release/commit-analyzer": "^12.0.0",
59+
"@semantic-release/commit-analyzer": "^13.0.0",
5960
"@semantic-release/exec": "^6.0.3",
6061
"@semantic-release/git": "^10.0.1",
61-
"@semantic-release/release-notes-generator": "^13.0.0",
62-
"@typescript-eslint/eslint-plugin": "^6.21.0",
63-
"@typescript-eslint/parser": "^6.21.0",
64-
"@vitest/coverage-v8": "1.5.2",
62+
"@semantic-release/release-notes-generator": "^14.0.1",
63+
"@types/node": "^22.7.6",
64+
"@typescript-eslint/eslint-plugin": "^8.10.0",
65+
"@typescript-eslint/parser": "^8.10.0",
66+
"@vitest/coverage-v8": "2.1.3",
6567
"coconfig": "^1.5.2",
6668
"eslint-config-prettier": "^9.1.0",
67-
"eslint-plugin-import": "^2.29.1",
69+
"eslint-import-resolver-typescript": "^3.6.3",
70+
"eslint-plugin-import": "^2.31.0",
6871
"ts-node": "^10.9.2",
69-
"vitest": "1.5.2"
72+
"vitest": "2.1.3"
7073
},
7174
"dependencies": {
7275
"@types/supertest": "^6.0.2",
73-
"eslint": "^8.57.0",
74-
"find-up": "^6.3.0",
75-
"pino-pretty": "^11.0.0",
76-
"read-pkg-up": "^7.0.1",
76+
"eslint": "^8.57.1",
77+
"find-up": "^7.0.0",
78+
"pino-pretty": "^11.3.0",
79+
"read-package-up": "^11.0.0",
7780
"supertest": "^7.0.0",
7881
"tsconfig-paths": "^4.2.0",
79-
"typescript": "^5.4.5"
82+
"typescript": "^5.6.3"
8083
},
8184
"packageManager": "[email protected]"
8285
}

src/index.ts

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import http from 'http';
22
import path from 'path';
3+
// We are going to test Typescript files, so use the ts-node
4+
// register hook to allow require to resolve these modules
5+
import { register } from 'node:module'
6+
import { pathToFileURL } from 'url'
37
import assert from 'assert';
48

59
import request from 'supertest';
6-
// We are going to test Typescript files, so use the ts-node
7-
// register hook to allow require to resolve these modules
8-
import { register } from 'ts-node';
9-
import readPackageUp from 'read-pkg-up';
10+
import { readPackageUp } from 'read-package-up';
1011
import { listen, startApp } from '@openapi-typescript-infra/service';
1112
import type {
1213
Service,
@@ -23,20 +24,10 @@ let app: ServiceExpress | undefined;
2324
let appService: ServiceFactory<ServiceLocals, RequestLocals> | undefined;
2425
let listener: http.Server | undefined;
2526

26-
register();
27+
register('ts-node/esm', pathToFileURL('./'))
28+
// eslint-disable-next-line @typescript-eslint/no-require-imports
2729
require('tsconfig-paths/register');
2830

29-
async function loadModule(path: string): Promise<Record<string, unknown>> {
30-
try {
31-
return require(path);
32-
} catch (error) {
33-
if ((error as Error).message.includes('Cannot use import statement outside a module')) {
34-
return import(path);
35-
}
36-
throw error;
37-
}
38-
}
39-
4031
async function getRootDirectory(cwd: string, root?: string) {
4132
if (root) {
4233
return root;
@@ -77,7 +68,7 @@ async function readOptions<
7768
}
7869
if (!factory) {
7970
const finalPath = path.resolve(rootDirectory, main);
80-
const module = await loadModule(finalPath);
71+
const module = await import(finalPath);
8172
factory = module
8273
? ((module.default || module.service) as () => Service<SLocals, RLocals>)
8374
: undefined;

0 commit comments

Comments
 (0)