From 7a2f901f42138e1ef89c63ee9ac89a0d7a630077 Mon Sep 17 00:00:00 2001 From: Dmitriy Mozgovoy Date: Wed, 14 Dec 2022 22:49:49 +0200 Subject: [PATCH] Fix/typescript tests (#5375) * chore(ci): Add release-it script; * chore(ci): add `release:no-npm` script to release the package without making an npm release; * fix(test): fixed `d.ts` typings; refactor(test): refactor typescript tests; --- .gitignore | 5 +- index.d.cts | 32 ++- index.d.ts | 7 +- package.json | 6 +- test/module/test.js | 46 ++++ .../axios.cts => module/typings/cjs/index.ts} | 236 +++++++++--------- test/module/typings/cjs/package.json | 20 ++ test/module/typings/cjs/tsconfig.json | 6 + .../axios.ts => module/typings/esm/index.ts} | 74 +++++- test/module/typings/esm/package.json | 21 ++ test/module/typings/esm/tsconfig.json | 6 + 11 files changed, 309 insertions(+), 150 deletions(-) rename test/{typescript/axios.cts => module/typings/cjs/index.ts} (66%) create mode 100644 test/module/typings/cjs/package.json create mode 100644 test/module/typings/cjs/tsconfig.json rename test/{typescript/axios.ts => module/typings/esm/index.ts} (89%) create mode 100644 test/module/typings/esm/package.json create mode 100644 test/module/typings/esm/tsconfig.json diff --git a/.gitignore b/.gitignore index 68af93b92e..96efc5d1a1 100644 --- a/.gitignore +++ b/.gitignore @@ -3,10 +3,9 @@ .tscache .DS_Store node_modules/ -typings/ coverage/ test/typescript/axios.js* sauce_connect.log -test/module/cjs/node_modules/ -test/module/cjs/package-lock.json +test/module/**/package-lock.json backup/ +./.husky/ diff --git a/index.d.cts b/index.d.cts index b830cb9a58..844cda67b7 100644 --- a/index.d.cts +++ b/index.d.cts @@ -18,16 +18,9 @@ type AxiosHeaderGetter = ((parser?: RegExp) => RegExpExecArray | null) | type AxiosHeaderTester = (matcher?: AxiosHeaderMatcher) => boolean; -type MaxUploadRate = number; - -type MaxDownloadRate = number; - -type Milliseconds = number; - declare class AxiosHeaders { constructor( - headers?: RawAxiosHeaders | AxiosHeaders, - defaultHeaders?: RawAxiosHeaders | AxiosHeaders + headers?: RawAxiosHeaders | AxiosHeaders ); set(headerName?: string, value?: AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; @@ -44,12 +37,16 @@ declare class AxiosHeaders { normalize(format: boolean): AxiosHeaders; + concat(...targets: Array): AxiosHeaders; + toJSON(asStrings?: boolean): RawAxiosHeaders; static from(thing?: AxiosHeaders | RawAxiosHeaders | string): AxiosHeaders; static accessor(header: string | string[]): AxiosHeaders; + static concat(...targets: Array): AxiosHeaders; + setContentType: AxiosHeaderSetter; getContentType: AxiosHeaderGetter; hasContentType: AxiosHeaderTester; @@ -199,7 +196,7 @@ declare namespace axios { type RawAxiosRequestHeaders = Partial; - type AxiosRequestHeaders = Partial & AxiosHeaders; + type AxiosRequestHeaders = RawAxiosRequestHeaders & AxiosHeaders; type RawAxiosResponseHeaders = Partial & { "set-cookie"?: string[] @@ -321,6 +318,10 @@ declare namespace axios { serialize?: CustomParamsSerializer; } + type MaxUploadRate = number; + + type MaxDownloadRate = number; + type BrowserProgressEvent = any; interface AxiosProgressEvent { @@ -335,20 +336,26 @@ declare namespace axios { event?: BrowserProgressEvent; } + type Milliseconds = number; + + type AxiosAdapterName = 'xhr' | 'http' | string; + + type AxiosAdapterConfig = AxiosAdapter | AxiosAdapterName; + interface AxiosRequestConfig { url?: string; method?: Method | string; baseURL?: string; transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[]; transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[]; - headers?: RawAxiosRequestHeaders; + headers?: RawAxiosRequestHeaders | AxiosHeaders; params?: any; paramsSerializer?: ParamsSerializerOptions; data?: D; timeout?: Milliseconds; timeoutErrorMessage?: string; withCredentials?: boolean; - adapter?: AxiosAdapter; + adapter?: AxiosAdapterConfig | AxiosAdapterConfig[]; auth?: AxiosBasicCredentials; responseType?: ResponseType; responseEncoding?: responseEncoding | string; @@ -396,7 +403,7 @@ declare namespace axios { } interface CreateAxiosDefaults extends Omit, 'headers'> { - headers?: RawAxiosRequestHeaders | Partial; + headers?: RawAxiosRequestHeaders | AxiosHeaders | Partial; } interface AxiosResponse { @@ -485,6 +492,7 @@ declare namespace axios { isAxiosError(payload: any): payload is AxiosError; toFormData(sourceObj: object, targetFormData?: GenericFormData, options?: FormSerializerOptions): GenericFormData; formToJSON(form: GenericFormData|GenericHTMLFormElement): object; + AxiosHeaders: typeof AxiosHeaders; } } diff --git a/index.d.ts b/index.d.ts index a6cb8ff2ca..35d50e3c1f 100644 --- a/index.d.ts +++ b/index.d.ts @@ -71,7 +71,7 @@ export class AxiosHeaders { export type RawAxiosRequestHeaders = Partial; -export type AxiosRequestHeaders = Partial & AxiosHeaders; +export type AxiosRequestHeaders = RawAxiosRequestHeaders & AxiosHeaders; export type RawAxiosResponseHeaders = Partial & { "set-cookie"?: string[] @@ -289,7 +289,7 @@ export interface AxiosRequestConfig { baseURL?: string; transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[]; transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[]; - headers?: RawAxiosRequestHeaders; + headers?: RawAxiosRequestHeaders | AxiosHeaders; params?: any; paramsSerializer?: ParamsSerializerOptions; data?: D; @@ -344,7 +344,7 @@ export interface AxiosDefaults extends Omit, 'hea } export interface CreateAxiosDefaults extends Omit, 'headers'> { - headers?: RawAxiosRequestHeaders | Partial; + headers?: RawAxiosRequestHeaders | AxiosHeaders | Partial; } export interface AxiosResponse { @@ -499,6 +499,7 @@ export interface AxiosStatic extends AxiosInstance { CancelToken: CancelTokenStatic; Axios: typeof Axios; AxiosError: typeof AxiosError; + HttpStatusCode: typeof HttpStatusCode; readonly VERSION: string; isCancel: typeof isCancel; all: typeof all; diff --git a/package.json b/package.json index 55efd6e8b9..a19904f349 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "type": "module", "types": "index.d.ts", "scripts": { - "test": "npm run test:eslint && npm run test:mocha && npm run test:karma && npm run test:exports && npm run test:dtslint", + "test": "npm run test:eslint && npm run test:mocha && npm run test:karma && npm run test:dtslint && npm run test:exports", "test:eslint": "node bin/ssl_hotfix.js eslint lib/**/*.js", "test:dtslint": "node bin/ssl_hotfix.js dtslint", "test:mocha": "node bin/ssl_hotfix.js mocha test/unit/**/*.js --timeout 30000 --exit", @@ -42,9 +42,11 @@ "fix": "eslint --fix lib/**/*.js", "prepare": "husky install && npm run prepare:hooks", "prepare:hooks": "npx husky add .husky/commit-msg \"npx commitlint --edit $1\"", - "release:dry": "release-it --dry-run", + "release:dry": "release-it --dry-run --no-npm", "release:info": "release-it --release-version", + "prerelease:no-npm": "release-it --preRelease=beta --no-npm", "prerelease": "release-it --preRelease=beta", + "release:no-npm": "release-it --no-npm", "release": "release-it" }, "repository": { diff --git a/test/module/test.js b/test/module/test.js index 166e649ce6..3410ca2a88 100644 --- a/test/module/test.js +++ b/test/module/test.js @@ -14,6 +14,16 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); const exec = util.promisify(cp.exec); +const spawn = (command, args) => new Promise((resolve, reject) => { + cp.spawn(command, args, { + shell : true, + stdio: 'inherit' + }).once('error', reject).on( + 'close', + (code) => code ? reject(new Error(`Exit code ${code}`)) : resolve() + ); +}); + const {Axios} = axiosFactory; const ignoreList = ['default']; @@ -134,4 +144,40 @@ describe('module', function () { await exec(`npm test --prefix ${pkgPath}`, {}); }); }); + + describe('typings', () => { + describe('ESM', ()=> { + const pkgPath = path.join(__dirname, './typings/esm'); + + after(async ()=> { + await remove(path.join(pkgPath, './node_modules')); + }); + + it('should pass types check', async function () { + this.timeout(30000); + + await spawn(`npm test --prefix ${pkgPath}`, [], { + shell : true, + stdio: 'pipe' + }); + }); + }); + + describe('CommonJS', ()=> { + const pkgPath = path.join(__dirname, './typings/cjs'); + + after(async ()=> { + await remove(path.join(pkgPath, './node_modules')); + }); + + it('should pass types check', async function () { + this.timeout(30000); + + await spawn(`npm test --prefix ${pkgPath}`, [], { + shell : true, + stdio: 'pipe' + }); + }); + }); + }); }); diff --git a/test/typescript/axios.cts b/test/module/typings/cjs/index.ts similarity index 66% rename from test/typescript/axios.cts rename to test/module/typings/cjs/index.ts index 6d25deedfa..95a3524e07 100644 --- a/test/typescript/axios.cts +++ b/test/module/typings/cjs/index.ts @@ -65,48 +65,48 @@ const handleError = (error: axios.AxiosError) => { }; axios(config) - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); axios.get('/user?id=12345') - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); axios.get('/user', { params: { id: 12345 } }) - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); axios.head('/user') - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); axios.options('/user') - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); axios.delete('/user') - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); axios.post('/user', { foo: 'bar' }) - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); axios.post('/user', { foo: 'bar' }, { headers: { 'X-FOO': 'bar' } }) - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); axios.put('/user', { foo: 'bar' }) - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); axios.patch('/user', { foo: 'bar' }) - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); // Typed methods interface UserCreationDef { - name: string; + name: string; } interface User { @@ -117,49 +117,49 @@ interface User { // with default axios.AxiosResponse result const handleUserResponse = (response: axios.AxiosResponse) => { - console.log(response.data.id); - console.log(response.data.name); - console.log(response.status); - console.log(response.statusText); - console.log(response.headers); - console.log(response.config); + console.log(response.data.id); + console.log(response.data.name); + console.log(response.status); + console.log(response.statusText); + console.log(response.headers); + console.log(response.config); }; axios.get('/user?id=12345') - .then(handleUserResponse) - .catch(handleError); + .then(handleUserResponse) + .catch(handleError); axios.get('/user', { params: { id: 12345 } }) - .then(handleUserResponse) - .catch(handleError); + .then(handleUserResponse) + .catch(handleError); axios.head('/user') - .then(handleUserResponse) + .then(handleUserResponse) .catch(handleError); axios.options('/user') - .then(handleUserResponse) - .catch(handleError); + .then(handleUserResponse) + .catch(handleError); axios.delete('/user') - .then(handleUserResponse) - .catch(handleError); + .then(handleUserResponse) + .catch(handleError); axios.post('/user', { name: 'foo', id: 1 }) - .then(handleUserResponse) - .catch(handleError); + .then(handleUserResponse) + .catch(handleError); axios.post('/user', { name: 'foo', id: 1 }, { headers: { 'X-FOO': 'bar' } }) - .then(handleUserResponse) - .catch(handleError); + .then(handleUserResponse) + .catch(handleError); axios.put('/user', { name: 'foo', id: 1 }) - .then(handleUserResponse) - .catch(handleError); + .then(handleUserResponse) + .catch(handleError); axios.patch('/user', { name: 'foo', id: 1 }) - .then(handleUserResponse) - .catch(handleError); + .then(handleUserResponse) + .catch(handleError); // (Typed methods) with custom response type @@ -168,47 +168,47 @@ const handleStringResponse = (response: string) => { }; axios.get('/user?id=12345') - .then(handleStringResponse) - .catch(handleError); + .then(handleStringResponse) + .catch(handleError); axios.get('/user', { params: { id: 12345 } }) - .then(handleStringResponse) - .catch(handleError); + .then(handleStringResponse) + .catch(handleError); axios.head('/user') - .then(handleStringResponse) - .catch(handleError); + .then(handleStringResponse) + .catch(handleError); axios.options('/user') - .then(handleStringResponse) - .catch(handleError); + .then(handleStringResponse) + .catch(handleError); axios.delete('/user') - .then(handleStringResponse) - .catch(handleError); + .then(handleStringResponse) + .catch(handleError); axios.post, string>('/user', { name: 'foo' }) - .then(handleStringResponse) - .catch(handleError); + .then(handleStringResponse) + .catch(handleError); axios.post, string>('/user', { name: 'foo' }, { headers: { 'X-FOO': 'bar' } }) - .then(handleStringResponse) - .catch(handleError); + .then(handleStringResponse) + .catch(handleError); axios.put, string>('/user', { name: 'foo' }) - .then(handleStringResponse) - .catch(handleError); + .then(handleStringResponse) + .catch(handleError); axios.patch, string>('/user', { name: 'foo' }) - .then(handleStringResponse) - .catch(handleError); + .then(handleStringResponse) + .catch(handleError); axios.request({ method: 'get', url: '/user?id=12345' }) - .then(handleStringResponse) - .catch(handleError); + .then(handleStringResponse) + .catch(handleError); // Instances @@ -216,32 +216,32 @@ const instance1: axios.AxiosInstance = axios.create(); const instance2: axios.AxiosInstance = axios.create(config); instance1(config) - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); instance1.request(config) - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); instance1.get('/user?id=12345') - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); instance1.options('/user') - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); instance1.get('/user', { params: { id: 12345 } }) - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); instance1.post('/user', { foo: 'bar' }) - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); instance1.post('/user', { foo: 'bar' }, { headers: { 'X-FOO': 'bar' } }) - .then(handleResponse) - .catch(handleError); + .then(handleResponse) + .catch(handleError); // Defaults @@ -276,41 +276,41 @@ axios.create({ // Interceptors const requestInterceptorId: number = axios.interceptors.request.use( - (config: axios.AxiosRequestConfig) => config, - (error: any) => Promise.reject(error) + (config: axios.AxiosRequestConfig) => config, + (error: any) => Promise.reject(error) ); axios.interceptors.request.eject(requestInterceptorId); axios.interceptors.request.use( - (config: axios.AxiosRequestConfig) => Promise.resolve(config), - (error: any) => Promise.reject(error) + (config: axios.AxiosRequestConfig) => Promise.resolve(config), + (error: any) => Promise.reject(error) ); axios.interceptors.request.use((config: axios.AxiosRequestConfig) => config); axios.interceptors.request.use((config: axios.AxiosRequestConfig) => Promise.resolve(config)); const responseInterceptorId: number = axios.interceptors.response.use( - (response: axios.AxiosResponse) => response, - (error: any) => Promise.reject(error) + (response: axios.AxiosResponse) => response, + (error: any) => Promise.reject(error) ); axios.interceptors.response.eject(responseInterceptorId); axios.interceptors.response.use( - (response: axios.AxiosResponse) => Promise.resolve(response), - (error: any) => Promise.reject(error) + (response: axios.AxiosResponse) => Promise.resolve(response), + (error: any) => Promise.reject(error) ); const voidRequestInterceptorId = axios.interceptors.request.use( - // @ts-expect-error -- Must return an axios.AxiosRequestConfig (or throw) - (_response) => {}, - (error: any) => Promise.reject(error) + // @ts-expect-error -- Must return an axios.AxiosRequestConfig (or throw) + (_response) => {}, + (error: any) => Promise.reject(error) ); const voidResponseInterceptorId = axios.interceptors.response.use( - // @ts-expect-error -- Must return an axios.AxiosResponse (or throw) - (_response) => {}, - (error: any) => Promise.reject(error) + // @ts-expect-error -- Must return an axios.AxiosResponse (or throw) + (_response) => {}, + (error: any) => Promise.reject(error) ); axios.interceptors.request.eject(voidRequestInterceptorId); axios.interceptors.response.eject(voidResponseInterceptorId); @@ -353,28 +353,28 @@ const fn2: (arr: number[]) => string = axios.spread(fn1); // Promises axios.get('/user') - .then((response: axios.AxiosResponse) => 'foo') - .then((value: string) => {}); + .then((response: axios.AxiosResponse) => 'foo') + .then((value: string) => {}); axios.get('/user') - .then((response: axios.AxiosResponse) => Promise.resolve('foo')) - .then((value: string) => {}); + .then((response: axios.AxiosResponse) => Promise.resolve('foo')) + .then((value: string) => {}); axios.get('/user') - .then((response: axios.AxiosResponse) => 'foo', (error: any) => 'bar') - .then((value: string) => {}); + .then((response: axios.AxiosResponse) => 'foo', (error: any) => 'bar') + .then((value: string) => {}); axios.get('/user') - .then((response: axios.AxiosResponse) => 'foo', (error: any) => 123) - .then((value: string | number) => {}); + .then((response: axios.AxiosResponse) => 'foo', (error: any) => 123) + .then((value: string | number) => {}); axios.get('/user') - .catch((error: any) => 'foo') - .then((value) => {}); + .catch((error: any) => 'foo') + .then((value) => {}); axios.get('/user') - .catch((error: any) => Promise.resolve('foo')) - .then((value) => {}); + .catch((error: any) => Promise.resolve('foo')) + .then((value) => {}); // axios.Cancellation @@ -394,11 +394,11 @@ source.cancel('Operation has been axios.Canceled.'); // axios.AxiosError axios.get('/user') - .catch((error) => { - if (axios.isAxiosError(error)) { - const axiosError: axios.AxiosError = error; - } - }); + .catch((error) => { + if (axios.isAxiosError(error)) { + const axiosError: axios.AxiosError = error; + } + }); // FormData @@ -411,14 +411,14 @@ axios.get('/user', {signal: new AbortController().signal}); // AxiosHeaders methods axios.get('/user', { - transformRequest: (data, headers) => { - headers.setContentType('text/plain'); - headers['Foo'] = 'bar'; - }, - - transformResponse: (data, headers) => { - headers.has('foo'); - } + transformRequest: (data, headers) => { + headers.setContentType('text/plain'); + headers['Foo'] = 'bar'; + }, + + transformResponse: (data, headers) => { + headers.has('foo'); + } }); // Max Rate @@ -434,7 +434,7 @@ axios.get('/user', { // Node progress axios.get('/user', { - onUploadProgress: (e) => { + onUploadProgress: (e: axios.AxiosProgressEvent) => { console.log(e.loaded); console.log(e.total); console.log(e.progress); diff --git a/test/module/typings/cjs/package.json b/test/module/typings/cjs/package.json new file mode 100644 index 0000000000..58c4caf88b --- /dev/null +++ b/test/module/typings/cjs/package.json @@ -0,0 +1,20 @@ +{ + "name": "commonjs-typings-test", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "npm i --no-save --no-package-lock && tsc -v && npm run test:types", + "test:types": "tsc --noEmit" + }, + "keywords": [], + "author": "", + "license": "MIT", + "dependencies": { + "@types/node": "^18.11.3", + "axios": "file:../../../.." + }, + "devDependencies": { + "typescript": "^4.9.4" + } +} diff --git a/test/module/typings/cjs/tsconfig.json b/test/module/typings/cjs/tsconfig.json new file mode 100644 index 0000000000..9d66348d14 --- /dev/null +++ b/test/module/typings/cjs/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "checkJs": true, + "module": "node16" + } +} diff --git a/test/typescript/axios.ts b/test/module/typings/esm/index.ts similarity index 89% rename from test/typescript/axios.ts rename to test/module/typings/esm/index.ts index 1be0557e9a..ba2e439509 100644 --- a/test/typescript/axios.ts +++ b/test/module/typings/esm/index.ts @@ -1,5 +1,9 @@ import axios, { AxiosRequestConfig, + AxiosHeaders, + AxiosRequestHeaders, + AxiosResponseHeaders, + RawAxiosRequestHeaders, AxiosResponse, AxiosError, AxiosInstance, @@ -293,8 +297,14 @@ axios.create({ // Interceptors const requestInterceptorId: number = axios.interceptors.request.use( - (config: AxiosRequestConfig) => config, - (error: any) => Promise.reject(error) + async (config: AxiosRequestConfig) => { + await axios.get('/foo', { + headers: config.headers + }); + return config; + }, + (error: any) => Promise.reject(error), + {synchronous: false} ); axios.interceptors.request.eject(requestInterceptorId); @@ -404,11 +414,11 @@ axios.get('/user') axios.get('/user') .catch((error: any) => 'foo') - .then((value) => {}); + .then((value: any) => {}); axios.get('/user') .catch((error: any) => Promise.resolve('foo')) - .then((value) => {}); + .then((value: any) => {}); // Cancellation @@ -434,7 +444,7 @@ source.cancel('Operation has been canceled.'); // AxiosError axios.get('/user') - .catch((error) => { + .catch((error: AxiosError) => { if (axios.isAxiosError(error)) { const axiosError: AxiosError = error; } @@ -467,16 +477,56 @@ axios.get('/user', {signal: new AbortController().signal}); // AxiosHeaders methods axios.get('/user', { - transformRequest: (data, headers) => { - headers.setContentType('text/plain'); - headers['Foo'] = 'bar'; + transformRequest: [ + (data: any, headers) => { + headers.setContentType('text/plain'); + return 'baz'; }, - - transformResponse: (data, headers) => { - headers.has('foo'); + (data: any, headers) => { + headers['foo'] = 'bar'; + return 'baz' } + ], + + transformResponse: [(data: any, headers: AxiosResponseHeaders) => { + headers.has('foo'); + }] +}); + +// config headers + +axios.get('/user', { + headers: new AxiosHeaders({x:1}) }); +axios.get('/user', { + headers: { + foo : 1 + } +}); + +// issue #5034 + +function getRequestConfig1(options: AxiosRequestConfig): AxiosRequestConfig { + return { + ...options, + headers: { + ...(options.headers as RawAxiosRequestHeaders), + Authorization: `Bearer ...`, + }, + }; +} + +function getRequestConfig2(options: AxiosRequestConfig): AxiosRequestConfig { + return { + ...options, + headers: { + ...(options.headers as AxiosHeaders).toJSON(), + Authorization: `Bearer ...`, + }, + }; +} + // Max Rate axios.get('/user', { @@ -490,7 +540,7 @@ axios.get('/user', { // Node progress axios.get('/user', { - onUploadProgress: (e) => { + onUploadProgress: (e: AxiosProgressEvent) => { console.log(e.loaded); console.log(e.total); console.log(e.progress); diff --git a/test/module/typings/esm/package.json b/test/module/typings/esm/package.json new file mode 100644 index 0000000000..744077a357 --- /dev/null +++ b/test/module/typings/esm/package.json @@ -0,0 +1,21 @@ +{ + "name": "esm-typings-test", + "version": "1.0.0", + "description": "", + "main": "index.js", + "type": "module", + "scripts": { + "test:types": "tsc --noEmit", + "test": "npm i --no-save --no-package-lock && tsc -v && npm run test:types" + }, + "keywords": [], + "author": "", + "license": "MIT", + "dependencies": { + "@types/node": "^18.11.3", + "axios": "file:../../../.." + }, + "devDependencies": { + "typescript": "^4.9.4" + } +} diff --git a/test/module/typings/esm/tsconfig.json b/test/module/typings/esm/tsconfig.json new file mode 100644 index 0000000000..9d66348d14 --- /dev/null +++ b/test/module/typings/esm/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "checkJs": true, + "module": "node16" + } +}