Skip to content

Commit 3093c77

Browse files
authored
Adds an importExtension option
adds an importExtension option
2 parents 6003b2c + 869e770 commit 3093c77

28 files changed

+111
-68
lines changed

.circleci/config.yml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
version: 2.1
22

33
orbs:
4-
codacy: codacy/base@7.0.0
4+
codacy: codacy/base@10.8.0
55

66
references:
77
release_filter: &release_filter
@@ -10,11 +10,10 @@ references:
1010
only:
1111
- master
1212

13-
1413
jobs:
1514
build_package:
1615
docker:
17-
- image: cimg/node:20.8
16+
- image: cimg/node:20.1.0
1817
working_directory: ~/workdir
1918
steps:
2019
- attach_workspace:
@@ -27,7 +26,7 @@ jobs:
2726
- run:
2827
name: Install dependencies and generate
2928
command: |
30-
npm install
29+
PUPPETEER_SKIP_DOWNLOAD=true npm install --unsafe-perm=true
3130
- run:
3231
name: Build library
3332
command: |
@@ -44,7 +43,7 @@ jobs:
4443

4544
publish_packages:
4645
docker:
47-
- image: cimg/node:20.8
46+
- image: cimg/node:20.1.0
4847
working_directory: ~/workdir
4948
steps:
5049
- attach_workspace:

bin/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const params = program
1616
.option('--name <value>', 'Custom client class name')
1717
.option('--useOptions', 'Use options instead of arguments')
1818
.option('--splitParameters', 'User arguments for path parameters and options for query parameters')
19+
.option('--importExtension', 'Add .js extension to import statements')
1920
.option('--useUnionTypes', 'Use union types instead of enums')
2021
.option('--exportCore <value>', 'Write core files to disk', true)
2122
.option('--exportServices <value>', 'Write services to disk', true)
@@ -38,6 +39,7 @@ if (OpenAPI) {
3839
clientName: params.name,
3940
useOptions: params.useOptions,
4041
splitParameters: params.splitParameters,
42+
importExtension: params.importExtension,
4143
useUnionTypes: params.useUnionTypes,
4244
exportCore: JSON.parse(params.exportCore) === true,
4345
exportServices: JSON.parse(params.exportServices) === true,

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@
4747
"eslint:fix": "eslint . --fix",
4848
"prepare": "npm run clean && npm run release",
4949
"generate-spa-codacy": "npm run build && rimraf ./generated && node ./bin/index.js --input ./samples/spec/codacy-api.yaml --output ./generated --useUnionTypes --indent 2 --client fetch --splitParameters",
50-
"generate-ide-codacy": "npm run build && rimraf ./generated && node ./bin/index.js --input ./samples/spec/codacy-api.yaml --output ./generated --useUnionTypes --indent 2 --client axios"
50+
"generate-ide-codacy": "npm run build && rimraf ./generated && node ./bin/index.js --input ./samples/spec/codacy-api.yaml --output ./generated --useUnionTypes --indent 2 --client axios",
51+
"generate-mcp-codacy": "npm run build && rimraf ./generated && node ./bin/index.js --input ./samples/spec/codacy-api.yaml --output ./generated --useUnionTypes --indent 2 --client fetch --importExtension"
5152
},
5253
"dependencies": {
5354
"@apidevtools/json-schema-ref-parser": "^10.1.0",

src/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export type Options = {
1919
clientName?: string;
2020
useOptions?: boolean;
2121
splitParameters?: boolean;
22+
importExtension?: boolean;
2223
useUnionTypes?: boolean;
2324
exportCore?: boolean;
2425
exportServices?: boolean;
@@ -41,6 +42,7 @@ export type Options = {
4142
* @param clientName Custom client class name
4243
* @param useOptions Use options or arguments functions
4344
* @param splitParameters User arguments for path parameters and options for query parameters
45+
* @param importExtension Add .js extension to import statements
4446
* @param useUnionTypes Use union types instead of enums
4547
* @param exportCore Generate core client classes
4648
* @param exportServices Generate services
@@ -59,6 +61,7 @@ export const generate = async ({
5961
clientName,
6062
useOptions = false,
6163
splitParameters = false,
64+
importExtension = false,
6265
useUnionTypes = false,
6366
exportCore = true,
6467
exportServices = true,
@@ -90,6 +93,7 @@ export const generate = async ({
9093
httpClient,
9194
useOptions,
9295
splitParameters,
96+
importExtension,
9397
useUnionTypes,
9498
exportCore,
9599
exportServices,
@@ -115,6 +119,7 @@ export const generate = async ({
115119
httpClient,
116120
useOptions,
117121
splitParameters,
122+
importExtension,
118123
useUnionTypes,
119124
exportCore,
120125
exportServices,

src/templates/core/ApiError.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{{>header}}
22

3-
import type { ApiRequestOptions } from './ApiRequestOptions';
4-
import type { ApiResult } from './ApiResult';
3+
import type { ApiRequestOptions } from './ApiRequestOptions{{#if @root.importExtension}}.js{{/if}}';
4+
import type { ApiResult } from './ApiResult{{#if @root.importExtension}}.js{{/if}}';
55

66
export class ApiError extends Error {
77
public readonly url: string;

src/templates/core/BaseHttpRequest.hbs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
import type { HttpClient } from '@angular/common/http';
55
import type { Observable } from 'rxjs';
66

7-
import type { ApiRequestOptions } from './ApiRequestOptions';
7+
import type { ApiRequestOptions } from './ApiRequestOptions{{#if @root.importExtension}}.js{{/if}}';
88
import type { OpenAPIConfig } from './OpenAPI';
99
{{else}}
10-
import type { ApiRequestOptions } from './ApiRequestOptions';
11-
import type { CancelablePromise } from './CancelablePromise';
12-
import type { OpenAPIConfig } from './OpenAPI';
10+
import type { ApiRequestOptions } from './ApiRequestOptions{{#if @root.importExtension}}.js{{/if}}';
11+
import type { CancelablePromise } from './CancelablePromise{{#if @root.importExtension}}.js{{/if}}';
12+
import type { OpenAPIConfig } from './OpenAPI{{#if @root.importExtension}}.js{{/if}}';
1313
{{/equals}}
1414

1515
export abstract class BaseHttpRequest {

src/templates/core/HttpRequest.hbs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@ import { Inject, Injectable } from '@angular/core';
55
import { HttpClient } from '@angular/common/http';
66
import type { Observable } from 'rxjs';
77

8-
import type { ApiRequestOptions } from './ApiRequestOptions';
8+
import type { ApiRequestOptions } from './ApiRequestOptions{{#if @root.importExtension}}.js{{/if}}';
99
import { BaseHttpRequest } from './BaseHttpRequest';
1010
import type { OpenAPIConfig } from './OpenAPI';
1111
import { OpenAPI } from './OpenAPI';
1212
import { request as __request } from './request';
1313
{{else}}
14-
import type { ApiRequestOptions } from './ApiRequestOptions';
15-
import { BaseHttpRequest } from './BaseHttpRequest';
16-
import type { CancelablePromise } from './CancelablePromise';
17-
import type { OpenAPIConfig } from './OpenAPI';
18-
import { request as __request } from './request';
14+
import type { ApiRequestOptions } from './ApiRequestOptions{{#if @root.importExtension}}.js{{/if}}';
15+
import { BaseHttpRequest } from './BaseHttpRequest{{#if @root.importExtension}}.js{{/if}}';
16+
import type { CancelablePromise } from './CancelablePromise{{#if @root.importExtension}}.js{{/if}}';
17+
import type { OpenAPIConfig } from './OpenAPI{{#if @root.importExtension}}.js{{/if}}';
18+
import { request as __request } from './request{{#if @root.importExtension}}.js{{/if}}';
1919
{{/equals}}
2020

2121
{{#equals @root.httpClient 'angular'}}

src/templates/core/OpenAPI.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{{>header}}
22

3-
import type { ApiRequestOptions } from './ApiRequestOptions';
3+
import type { ApiRequestOptions } from './ApiRequestOptions{{#if @root.importExtension}}.js{{/if}}';
44

55
type Resolver<T> = (options: ApiRequestOptions) => Promise<T | undefined>;
66
type Headers = Record<string, string>;

src/templates/core/angular/request.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { catchError, map, switchMap } from 'rxjs/operators';
77
import type { Observable } from 'rxjs';
88

99
import { ApiError } from './ApiError';
10-
import type { ApiRequestOptions } from './ApiRequestOptions';
10+
import type { ApiRequestOptions } from './ApiRequestOptions{{#if @root.importExtension}}.js{{/if}}';
1111
import type { ApiResult } from './ApiResult';
1212
import type { OpenAPIConfig } from './OpenAPI';
1313

src/templates/core/axios/request.hbs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ import axios from 'axios';
44
import type { AxiosError, AxiosRequestConfig, AxiosResponse, AxiosInstance } from 'axios';
55
import FormData from 'form-data';
66

7-
import { ApiError } from './ApiError';
8-
import type { ApiRequestOptions } from './ApiRequestOptions';
9-
import type { ApiResult } from './ApiResult';
10-
import { CancelablePromise } from './CancelablePromise';
11-
import type { OnCancel } from './CancelablePromise';
12-
import type { OpenAPIConfig } from './OpenAPI';
7+
import { ApiError } from './ApiError{{#if @root.importExtension}}.js{{/if}}';
8+
import type { ApiRequestOptions } from './ApiRequestOptions{{#if @root.importExtension}}.js{{/if}}';
9+
import type { ApiResult } from './ApiResult{{#if @root.importExtension}}.js{{/if}}';
10+
import { CancelablePromise } from './CancelablePromise{{#if @root.importExtension}}.js{{/if}}';
11+
import type { OnCancel } from './CancelablePromise{{#if @root.importExtension}}.js{{/if}}';
12+
import type { OpenAPIConfig } from './OpenAPI{{#if @root.importExtension}}.js{{/if}}';
1313

1414
{{>functions/isDefined}}
1515

src/templates/core/fetch/request.hbs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{{>header}}
22

3-
import { ApiError } from './ApiError';
4-
import type { ApiRequestOptions } from './ApiRequestOptions';
5-
import type { ApiResult } from './ApiResult';
6-
import { CancelablePromise } from './CancelablePromise';
7-
import type { OnCancel } from './CancelablePromise';
8-
import type { OpenAPIConfig } from './OpenAPI';
3+
import { ApiError } from './ApiError{{#if @root.importExtension}}.js{{/if}}';
4+
import type { ApiRequestOptions } from './ApiRequestOptions{{#if @root.importExtension}}.js{{/if}}';
5+
import type { ApiResult } from './ApiResult{{#if @root.importExtension}}.js{{/if}}';
6+
import { CancelablePromise } from './CancelablePromise{{#if @root.importExtension}}.js{{/if}}';
7+
import type { OnCancel } from './CancelablePromise{{#if @root.importExtension}}.js{{/if}}';
8+
import type { OpenAPIConfig } from './OpenAPI{{#if @root.importExtension}}.js{{/if}}';
99

1010
{{>functions/isDefined}}
1111

src/templates/core/node/request.hbs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import fetch, { Headers } from 'node-fetch';
55
import type { RequestInit, Response } from 'node-fetch';
66
import type { AbortSignal } from 'node-fetch/externals';
77

8-
import { ApiError } from './ApiError';
9-
import type { ApiRequestOptions } from './ApiRequestOptions';
10-
import type { ApiResult } from './ApiResult';
11-
import { CancelablePromise } from './CancelablePromise';
12-
import type { OnCancel } from './CancelablePromise';
13-
import type { OpenAPIConfig } from './OpenAPI';
8+
import { ApiError } from './ApiError{{#if @root.importExtension}}.js{{/if}}';
9+
import type { ApiRequestOptions } from './ApiRequestOptions{{#if @root.importExtension}}.js{{/if}}';
10+
import type { ApiResult } from './ApiResult{{#if @root.importExtension}}.js{{/if}}';
11+
import { CancelablePromise } from './CancelablePromise{{#if @root.importExtension}}.js{{/if}}';
12+
import type { OnCancel } from './CancelablePromise{{#if @root.importExtension}}.js{{/if}}';
13+
import type { OpenAPIConfig } from './OpenAPI{{#if @root.importExtension}}.js{{/if}}';
1414

1515
{{>functions/isDefined}}
1616

src/templates/core/xhr/request.hbs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{{>header}}
22

3-
import { ApiError } from './ApiError';
4-
import type { ApiRequestOptions } from './ApiRequestOptions';
5-
import type { ApiResult } from './ApiResult';
6-
import { CancelablePromise } from './CancelablePromise';
7-
import type { OnCancel } from './CancelablePromise';
8-
import type { OpenAPIConfig } from './OpenAPI';
3+
import { ApiError } from './ApiError{{#if @root.importExtension}}.js{{/if}}';
4+
import type { ApiRequestOptions } from './ApiRequestOptions{{#if @root.importExtension}}.js{{/if}}';
5+
import type { ApiResult } from './ApiResult{{#if @root.importExtension}}.js{{/if}}';
6+
import { CancelablePromise } from './CancelablePromise{{#if @root.importExtension}}.js{{/if}}';
7+
import type { OnCancel } from './CancelablePromise{{#if @root.importExtension}}.js{{/if}}';
8+
import type { OpenAPIConfig } from './OpenAPI{{#if @root.importExtension}}.js{{/if}}';
99

1010
{{>functions/isDefined}}
1111

src/templates/exportModel.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
{{#if imports}}
44

55
{{#each imports}}
6-
import type { {{{this}}} } from './{{{this}}}';
6+
import type { {{{this}}} } from './{{{this}}}{{#if @root.importExtension}}.js{{/if}}';
77
{{/each}}
88
{{/if}}
99

src/templates/exportService.hbs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,22 @@ import type { Observable } from 'rxjs';
1313
{{/equals}}
1414
{{#if imports}}
1515
{{#each imports}}
16-
import type { {{{this}}} } from '../models/{{{this}}}';
16+
import type { {{{this}}} } from '../models/{{{this}}}{{#if @root.importExtension}}.js{{/if}}';
1717
{{/each}}
1818

1919
{{/if}}
2020
{{#notEquals @root.httpClient 'angular'}}
21-
import type { CancelablePromise } from '../core/CancelablePromise';
21+
import type { CancelablePromise } from '../core/CancelablePromise{{#if @root.importExtension}}.js{{/if}}';
2222
{{/notEquals}}
2323
{{#if @root.exportClient}}
2424
{{#equals @root.httpClient 'angular'}}
25-
import { BaseHttpRequest } from '../core/BaseHttpRequest';
25+
import { BaseHttpRequest } from '../core/BaseHttpRequest{{#if @root.importExtension}}.js{{/if}}';
2626
{{else}}
27-
import type { BaseHttpRequest } from '../core/BaseHttpRequest';
27+
import type { BaseHttpRequest } from '../core/BaseHttpRequest{{#if @root.importExtension}}.js{{/if}}';
2828
{{/equals}}
2929
{{else}}
30-
import { OpenAPI } from '../core/OpenAPI';
31-
import { request as __request } from '../core/request';
30+
import { OpenAPI } from '../core/OpenAPI{{#if @root.importExtension}}.js{{/if}}';
31+
import { request as __request } from '../core/request{{#if @root.importExtension}}.js{{/if}}';
3232
{{/if}}
3333

3434
{{#equals @root.httpClient 'angular'}}

src/templates/index.hbs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
{{>header}}
22

33
{{#if @root.exportClient}}
4-
export { {{{clientName}}} } from './{{{clientName}}}';
4+
export { {{{clientName}}} } from './{{{clientName}}}{{#if @root.importExtension}}.js{{/if}}';
55

66
{{/if}}
77
{{#if @root.exportCore}}
8-
export { ApiError as OpenAPIError } from './core/ApiError';
8+
export { ApiError as OpenAPIError } from './core/ApiError{{#if @root.importExtension}}.js{{/if}}';
99
{{#if @root.exportClient}}
10-
export { BaseHttpRequest } from './core/BaseHttpRequest';
10+
export { BaseHttpRequest } from './core/BaseHttpRequest{{#if @root.importExtension}}.js{{/if}}';
1111
{{/if}}
12-
export { CancelablePromise, CancelError } from './core/CancelablePromise';
13-
export { OpenAPI } from './core/OpenAPI';
14-
export type { OpenAPIConfig } from './core/OpenAPI';
12+
export { CancelablePromise, CancelError } from './core/CancelablePromise{{#if @root.importExtension}}.js{{/if}}';
13+
export { OpenAPI } from './core/OpenAPI{{#if @root.importExtension}}.js{{/if}}';
14+
export type { OpenAPIConfig } from './core/OpenAPI{{#if @root.importExtension}}.js{{/if}}';
1515
{{/if}}
1616
{{#if @root.exportModels}}
1717
{{#if models}}
1818

1919
{{#each models}}
2020
{{#if @root.useUnionTypes}}
21-
export type { {{{name}}}{{#if @root.postfixModels}} as {{{name}}}{{{@root.postfixModels}}}{{/if}} } from './models/{{{name}}}';
21+
export type { {{{name}}}{{#if @root.postfixModels}} as {{{name}}}{{{@root.postfixModels}}}{{/if}} } from './models/{{{name}}}{{#if @root.importExtension}}.js{{/if}}';
2222
{{else if enum}}
23-
export { {{{name}}}{{#if @root.postfixModels}} as {{{name}}}{{{@root.postfixModels}}}{{/if}} } from './models/{{{name}}}';
23+
export { {{{name}}}{{#if @root.postfixModels}} as {{{name}}}{{{@root.postfixModels}}}{{/if}} } from './models/{{{name}}}{{#if @root.importExtension}}.js{{/if}}';
2424
{{else if enums}}
25-
export { {{{name}}}{{#if @root.postfixModels}} as {{{name}}}{{{@root.postfixModels}}}{{/if}} } from './models/{{{name}}}';
25+
export { {{{name}}}{{#if @root.postfixModels}} as {{{name}}}{{{@root.postfixModels}}}{{/if}} } from './models/{{{name}}}{{#if @root.importExtension}}.js{{/if}}';
2626
{{else}}
27-
export type { {{{name}}}{{#if @root.postfixModels}} as {{{name}}}{{{@root.postfixModels}}}{{/if}} } from './models/{{{name}}}';
27+
export type { {{{name}}}{{#if @root.postfixModels}} as {{{name}}}{{{@root.postfixModels}}}{{/if}} } from './models/{{{name}}}{{#if @root.importExtension}}.js{{/if}}';
2828
{{/if}}
2929
{{/each}}
3030
{{/if}}
@@ -33,15 +33,15 @@ export type { {{{name}}}{{#if @root.postfixModels}} as {{{name}}}{{{@root.postfi
3333
{{#if models}}
3434

3535
{{#each models}}
36-
export { ${{{name}}} } from './schemas/${{{name}}}';
36+
export { ${{{name}}} } from './schemas/${{{name}}}{{#if @root.importExtension}}.js{{/if}}';
3737
{{/each}}
3838
{{/if}}
3939
{{/if}}
4040
{{#if @root.exportServices}}
4141
{{#if services}}
4242

4343
{{#each services}}
44-
export { {{{name}}}{{{@root.postfixServices}}} } from './services/{{{name}}}{{{@root.postfixServices}}}';
44+
export { {{{name}}}{{{@root.postfixServices}}} } from './services/{{{name}}}{{{@root.postfixServices}}}{{#if @root.importExtension}}.js{{/if}}';
4545
{{/each}}
4646
{{/if}}
4747
{{/if}}

src/utils/writeClient.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ describe('writeClient', () => {
4444
false,
4545
false,
4646
false,
47+
false,
4748
true,
4849
true,
4950
true,

0 commit comments

Comments
 (0)