From f830f05d3378dbb3b2f01d8f2d1da52edeb3cd34 Mon Sep 17 00:00:00 2001 From: barcigabri <33417277+barcigabri@users.noreply.github.com> Date: Wed, 1 Jul 2026 03:30:38 +0000 Subject: [PATCH] chore: updating templates for typescript-axios sdk --- .../typescript-axios/README.mustache | 141 ++++++++---------- .../typescript-axios/apiInner.mustache | 71 +++++---- .../typescript-axios/index.mustache | 5 +- .../typescript-axios/package.mustache | 36 ++--- .../typescript-axios/tsconfig.mustache | 1 - 5 files changed, 111 insertions(+), 143 deletions(-) diff --git a/templates/openapi-generator/typescript-axios/README.mustache b/templates/openapi-generator/typescript-axios/README.mustache index 3a33b501..9a297f7c 100644 --- a/templates/openapi-generator/typescript-axios/README.mustache +++ b/templates/openapi-generator/typescript-axios/README.mustache @@ -1,113 +1,96 @@ -# FattureInCloud TypeScript SDK - -[![NPM](https://img.shields.io/npm/v/@fattureincloud/fattureincloud-ts-sdk?color=g)](https://www.npmjs.com/package/@fattureincloud/fattureincloud-ts-sdk) ![unit tests](https://github.com/fattureincloud/fattureincloud-ts-sdk/actions/workflows/validate.yml/badge.svg) - -{{npmName}} - TypeScript/JavaScript client for Fatture in Cloud API. - ## {{npmName}}@{{npmVersion}} -This SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: +This generator creates TypeScript/JavaScript client that utilizes [axios](https://github.com/axios/axios). The generated Node module can be used in the following environments: + +Environment +* Node.js +* Webpack +* Browserify -- API version: {{appVersion}} -- Package version: {{npmVersion}} +Language level +* ES5 - you must have a Promises/A+ library installed +* ES6 Module system * CommonJS * ES6 module system -It can be used in both TypeScript and JavaScript. In TypeScript, the definition should be automatically resolved via `package.json`. ([Reference](http://www.typescriptlang.org/docs/handbook/typings-for-npm-packages.html)) - - -{{#infoUrl}} - For more information, please visit [{{{infoUrl}}}]({{{infoUrl}}}) -{{/infoUrl}} - -## Installation - -### For [Node.js](https://nodejs.org/) +It can be used in both TypeScript and JavaScript. In TypeScript, the definition will be automatically resolved via `package.json`. ([Reference](https://www.typescriptlang.org/docs/handbook/declaration-files/consumption.html)) -Using npm: +### Building -```shell -npm install {{{npmName}}} +To build and compile the typescript sources to javascript use: ``` - -Using yarn: - -```shell -yarn add {{{npmName}}} +npm install +npm run build ``` -## Getting Started +### Publishing -Please follow the [installation](#installation) instruction and execute the following TS code: +First build the package then run `npm publish` -```javascript -import { Configuration, ArchiveApi , CreateArchiveDocumentRequest } from '@fattureincloud/fattureincloud-ts-sdk'; +### Consuming -// Configure OAuth2 access token for authorization: -const apiConfig = new Configuration({ - accessToken: "YOUR ACCESS TOKEN" -}); +navigate to the folder of your consuming project and run one of the following commands. -let apiInstance = new ArchiveApi(apiConfig); -let companyId = 12345; // Number | The ID of the company. +_published:_ -let createArchiveDocumentRequest: CreateArchiveDocumentRequest = {"data":{"date":"2021-08-20","category":"Altri documenti","description":"spesa 1","attachment_token":"ibfjdbf94ey9w94g3w894qbasrga"}} // CreateArchiveDocumentRequest | The Archive Document. +``` +npm install {{npmName}}@{{npmVersion}} --save +``` -apiInstance.createArchiveDocument(companyId, createArchiveDocumentRequest).then((data) => { - console.log('API called successfully. Returned data: ' + data); -}, (error) => { - console.error(error); -}); +_unPublished (not recommended):_ + +``` +npm install PATH_TO_GENERATED_PACKAGE --save ``` -## Documentation for API Endpoints +### Documentation for API Endpoints -All URIs are relative to *{{basePath}}* +All URIs are relative to *{{{basePath}}}* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}*{{classname}}* | [**{{operationId}}**](docs/{{apiDocPath}}{{classname}}.md#{{operationId}}) | **{{httpMethod}}** {{path}} | {{summary}} +{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}*{{classname}}* | [**{{operationId}}**]({{apiDocPath}}{{classname}}.md#{{operationIdLowerCase}}) | **{{httpMethod}}** {{path}} | {{summary}} {{/operation}}{{/operations}}{{/apis}}{{/apiInfo}} -## Documentation for Models +### Documentation For Models -{{#models}}{{#model}} - [{{classname}}](docs/{{modelDocPath}}{{classname}}.md) +{{#models}}{{#model}} - [{{{classname}}}]({{modelDocPath}}{{{classname}}}.md) {{/model}}{{/models}} -## Documentation for Authorization + +## Documentation For Authorization -{{^authMethods}} - All endpoints do not require authorization. -{{/authMethods}} +{{^authMethods}}Endpoints do not require authorization.{{/authMethods}} +{{#hasAuthMethods}}Authentication schemes defined for the API:{{/hasAuthMethods}} {{#authMethods}} - {{#last}} Authentication schemes defined for the API:{{/last}} - - ### {{name}} - - {{#isApiKey}} - - - **Type**: API key - - **API key parameter name**: {{keyParamName}} - - **Location**: {{#isKeyInQuery}}URL query string{{/isKeyInQuery}}{{#isKeyInHeader}}HTTP header{{/isKeyInHeader}} - {{/isApiKey}} - {{#isBasic}} - {{#isBasicBasic}} - - **Type**: HTTP basic authentication - {{/isBasicBasic}} - {{#isBasicBearer}} - - **Type**: Bearer authentication{{#bearerFormat}} ({{{.}}}){{/bearerFormat}} - {{/isBasicBearer}} - {{/isBasic}} - {{#isOAuth}} - - - **Type**: OAuth - - **Flow**: {{flow}} - - **Authorization URL**: {{authorizationUrl}} - - **Scopes**: {{^scopes}}N/A{{/scopes}} - {{#scopes}} - _{{scope}}_: {{description}} - {{/scopes}} - {{/isOAuth}} + +### {{{name}}} + +{{#isApiKey}} +- **Type**: API key +- **API key parameter name**: {{{keyParamName}}} +- **Location**: {{#isKeyInQuery}}URL query string{{/isKeyInQuery}}{{#isKeyInHeader}}HTTP header{{/isKeyInHeader}} +{{/isApiKey}} +{{#isBasic}} +{{#isBasicBasic}} +- **Type**: HTTP basic authentication +{{/isBasicBasic}} +{{#isBasicBearer}} +- **Type**: Bearer authentication{{#bearerFormat}} ({{{.}}}){{/bearerFormat}} +{{/isBasicBearer}} +{{#isHttpSignature}} +- **Type**: HTTP signature authentication +{{/isHttpSignature}} +{{/isBasic}} +{{#isOAuth}} +- **Type**: OAuth +- **Flow**: {{{flow}}} +- **Authorization URL**: {{{authorizationUrl}}} +- **Scopes**: {{^scopes}}N/A{{/scopes}} +{{#scopes}} - **{{{scope}}}**: {{{description}}} +{{/scopes}} +{{/isOAuth}} {{/authMethods}} diff --git a/templates/openapi-generator/typescript-axios/apiInner.mustache b/templates/openapi-generator/typescript-axios/apiInner.mustache index 1b761c73..f68146f6 100644 --- a/templates/openapi-generator/typescript-axios/apiInner.mustache +++ b/templates/openapi-generator/typescript-axios/apiInner.mustache @@ -3,6 +3,7 @@ /* eslint-disable */ {{>licenseInfo}} + import type { Configuration } from '{{apiRelativeToRoot}}configuration{{importFileExtension}}'; import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; import globalAxios from 'axios'; @@ -10,16 +11,18 @@ import globalAxios from 'axios'; // URLSearchParams not necessarily used // @ts-ignore import { URL, URLSearchParams } from 'url'; +{{#multipartFormData}} import FormData from 'form-data' +{{/multipartFormData}} {{/withNodeImports}} // Some imports not used depending on template conditions // @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '{{apiRelativeToRoot}}common{{importFileExtension}}'; +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction, replaceWithSerializableTypeIfNeeded{{#withAWSV4Signature}}, setAWS4SignatureInterceptor{{/withAWSV4Signature}} } from '{{apiRelativeToRoot}}common{{importFileExtension}}'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '{{apiRelativeToRoot}}base{{importFileExtension}}'; {{#imports}} // @ts-ignore -import type { {{classname}} } from '{{apiRelativeToRoot}}{{tsModelPackage}}{{importFileExtension}}'; +import type { {{classname}} } from '{{apiRelativeToRoot}}{{tsModelPackage}}{{#importFileExtension}}/index{{importFileExtension}}{{/importFileExtension}}'; {{/imports}} {{/withSeparateModelsAndApi}} {{^withSeparateModelsAndApi}} @@ -28,7 +31,6 @@ import type { {{classname}} } from '{{apiRelativeToRoot}}{{tsModelPackage}}{{imp /** * {{classname}} - axios parameter creator{{#description}} * {{&description}}{{/description}} - * @export */ export const {{classname}}AxiosParamCreator = function (configuration?: Configuration) { return { @@ -53,7 +55,7 @@ export const {{classname}}AxiosParamCreator = function (configuration?: Configur {{/required}} {{/allParams}} const localVarPath = `{{{path}}}`{{#pathParams}} - .replace(`{${"{{baseName}}"}}`, encodeURIComponent(String({{paramName}}))){{/pathParams}}; + .replace({{=<< >>=}}'{<>}'<<={{ }}=>>, encodeURIComponent(String({{paramName}}))){{/pathParams}}; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); let baseOptions; @@ -69,6 +71,10 @@ export const {{classname}}AxiosParamCreator = function (configuration?: Configur {{#authMethods}} // authentication {{name}} required {{#isApiKey}} + {{#withAWSV4Signature}} + // aws v4 signature authentication required + await setAWS4SignatureInterceptor(globalAxios, configuration) + {{/withAWSV4Signature}} {{#isKeyInHeader}} await setApiKeyToObject(localVarHeaderParameter, "{{keyParamName}}", configuration) {{/isKeyInHeader}} @@ -160,7 +166,7 @@ export const {{classname}}AxiosParamCreator = function (configuration?: Configur if ({{paramName}}) { {{#isCollectionFormatMulti}} {{#contentType}} - localVarFormParams.append('{{baseName}}', new Blob([JSON.stringify({{paramName}})], { type: "{{contentType}}", })); + localVarFormParams.append('{{baseName}}', new Blob([JSON.stringify({{paramName}}, replaceWithSerializableTypeIfNeeded)], { type: "{{contentType}}", })); {{/contentType}} {{^contentType}} {{paramName}}.forEach((element) => { @@ -178,13 +184,20 @@ export const {{classname}}AxiosParamCreator = function (configuration?: Configur localVarFormParams.append('{{baseName}}', {{paramName}} as any);{{/isBoolean}}{{/isPrimitiveType}}{{#isPrimitiveType}}{{#isBoolean}} localVarFormParams.append('{{baseName}}', String({{paramName}}) as any);{{/isBoolean}}{{/isPrimitiveType}}{{^isPrimitiveType}}{{#isEnumRef}} localVarFormParams.append('{{baseName}}', {{paramName}} as any);{{/isEnumRef}}{{^isEnumRef}} - localVarFormParams.append('{{baseName}}', new Blob([JSON.stringify({{paramName}})], { type: "application/json", }));{{/isEnumRef}}{{/isPrimitiveType}}{{/multipartFormData}} + localVarFormParams.append('{{baseName}}', new Blob([JSON.stringify({{paramName}}, replaceWithSerializableTypeIfNeeded)], { type: "application/json", }));{{/isEnumRef}}{{/isPrimitiveType}}{{/multipartFormData}} }{{/isArray}} - {{/formParams}}{{/vendorExtensions}} - {{#vendorExtensions}}{{#hasFormParams}}{{^multipartFormData}} - localVarHeaderParameter['Content-Type'] = 'application/x-www-form-urlencoded';{{/multipartFormData}}{{#multipartFormData}} - localVarHeaderParameter['Content-Type'] = 'multipart/form-data';{{/multipartFormData}} - {{/hasFormParams}}{{/vendorExtensions}} + {{/formParams}} + {{/vendorExtensions}} + {{#vendorExtensions}} + {{#hasFormParams}} + {{^multipartFormData}} + localVarHeaderParameter['Content-Type'] = 'application/x-www-form-urlencoded'; + {{/multipartFormData}} + {{#multipartFormData}} + localVarHeaderParameter['Content-Type'] = 'multipart/form-data'; + {{/multipartFormData}} + {{/hasFormParams}} + {{/vendorExtensions}} {{#bodyParam}} {{^consumes}} localVarHeaderParameter['Content-Type'] = 'application/json'; @@ -192,17 +205,19 @@ export const {{classname}}AxiosParamCreator = function (configuration?: Configur {{#consumes.0}} localVarHeaderParameter['Content-Type'] = '{{{mediaType}}}'; {{/consumes.0}} - localVarHeaderParameter['User-Agent'] = 'FattureInCloud/{{{npmVersion}}}/TypeScript-SDK'; - {{/bodyParam}} + {{#hasProduces}} + localVarHeaderParameter['Accept'] = '{{#produces}}{{{mediaType}}}{{^-last}},{{/-last}}{{/produces}}'; + {{/hasProduces}} + {{#headerParams}} {{#isArray}} if ({{paramName}}) { {{#uniqueItems}} - let mapped = Array.from({{paramName}}).map(value => ("{{{dataType}}}" !== "Set") ? JSON.stringify(value) : (value || "")); + let mapped = Array.from({{paramName}}).map(value => ("{{{dataType}}}" !== "Set") ? JSON.stringify(value, replaceWithSerializableTypeIfNeeded) : (value || "")); {{/uniqueItems}} {{^uniqueItems}} - let mapped = {{paramName}}.map(value => ("{{{dataType}}}" !== "Array") ? JSON.stringify(value) : (value || "")); + let mapped = {{paramName}}.map(value => ("{{{dataType}}}" !== "Array") ? JSON.stringify(value, replaceWithSerializableTypeIfNeeded) : (value || "")); {{/uniqueItems}} localVarHeaderParameter['{{baseName}}'] = mapped.join(COLLECTION_FORMATS["{{collectionFormat}}"]); } @@ -217,7 +232,7 @@ export const {{classname}}AxiosParamCreator = function (configuration?: Configur {{! isString is falsy also for $ref that defines a string or enum type}} localVarHeaderParameter['{{baseName}}'] = typeof {{paramName}} === 'string' ? {{paramName}} - : JSON.stringify({{paramName}}); + : JSON.stringify({{paramName}}, replaceWithSerializableTypeIfNeeded); {{/isString}} } {{/isArray}} @@ -244,7 +259,6 @@ export const {{classname}}AxiosParamCreator = function (configuration?: Configur /** * {{classname}} - functional programming interface{{#description}} * {{{.}}}{{/description}} - * @export */ export const {{classname}}Fp = function(configuration?: Configuration) { const localVarAxiosParamCreator = {{classname}}AxiosParamCreator(configuration) @@ -275,7 +289,6 @@ export const {{classname}}Fp = function(configuration?: Configuration) { /** * {{classname}} - factory interface{{#description}} * {{&description}}{{/description}} - * @export */ export const {{classname}}Factory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { const localVarFp = {{classname}}Fp(configuration) @@ -318,8 +331,6 @@ export const {{classname}}Factory = function (configuration?: Configuration, bas /** * {{classname}} - interface{{#description}} * {{&description}}{{/description}} - * @export - * @interface {{classname}} */ export interface {{classname}}Interface { {{#operation}} @@ -341,7 +352,6 @@ export interface {{classname}}Interface { * @param {*} [options] Override http request option.{{#isDeprecated}} * @deprecated{{/isDeprecated}} * @throws {RequiredError} - * @memberof {{classname}}Interface */ {{#useSingleRequestParameter}} {{nickname}}({{#allParams.0}}requestParameters{{^hasRequiredParams}}?{{/hasRequiredParams}}: {{classname}}{{operationIdCamelCase}}Request, {{/allParams.0}}options?: RawAxiosRequestConfig): AxiosPromise<{{{returnType}}}{{^returnType}}void{{/returnType}}>; @@ -359,16 +369,14 @@ export interface {{classname}}Interface { {{#allParams.0}} /** * Request parameters for {{nickname}} operation in {{classname}}. - * @export - * @interface {{classname}}{{operationIdCamelCase}}Request */ export interface {{classname}}{{operationIdCamelCase}}Request { {{#allParams}} + {{#description}} /** * {{description}} - * @type {{=<% %>=}}{<%&dataType%>}<%={{ }}=%> - * @memberof {{classname}}{{operationIdCamelCase}} */ + {{/description}} readonly {{paramName}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{#isNullable}} | null{{/isNullable}}{{/isEnum}} {{^-last}} @@ -382,9 +390,6 @@ export interface {{classname}}{{operationIdCamelCase}}Request { /** * {{classname}} - object-oriented interface{{#description}} * {{{.}}}{{/description}} - * @export - * @class {{classname}} - * @extends {BaseAPI} */ {{#withInterfaces}} export class {{classname}} extends BaseAPI implements {{classname}}Interface { @@ -411,7 +416,6 @@ export class {{classname}} extends BaseAPI { * @param {*} [options] Override http request option.{{#isDeprecated}} * @deprecated{{/isDeprecated}} * @throws {RequiredError} - * @memberof {{classname}} */ {{#useSingleRequestParameter}} public {{nickname}}({{#allParams.0}}requestParameters: {{classname}}{{operationIdCamelCase}}Request{{^hasRequiredParams}} = {}{{/hasRequiredParams}}, {{/allParams.0}}options?: RawAxiosRequestConfig) { @@ -435,10 +439,6 @@ export class {{classname}} extends BaseAPI { {{#allParams}} {{#isEnum}} {{#stringEnums}} -/** - * @export - * @enum {string} - */ export enum {{operationIdCamelCase}}{{enumName}} { {{#allowableValues}} {{#enumVars}} @@ -448,13 +448,10 @@ export enum {{operationIdCamelCase}}{{enumName}} { } {{/stringEnums}} {{^stringEnums}} -/** - * @export - */ export const {{operationIdCamelCase}}{{enumName}} = { {{#allowableValues}} {{#enumVars}} - {{{name}}}: {{{value}}}{{^-last}},{{/-last}} + {{{name}}}: {{{value}}}, {{/enumVars}} {{/allowableValues}} } as const; diff --git a/templates/openapi-generator/typescript-axios/index.mustache b/templates/openapi-generator/typescript-axios/index.mustache index edc5480d..fca806d2 100644 --- a/templates/openapi-generator/typescript-axios/index.mustache +++ b/templates/openapi-generator/typescript-axios/index.mustache @@ -2,8 +2,7 @@ /* eslint-disable */ {{>licenseInfo}} -export * from "./src/filter"; -export * from "./src/oauth2"; + export * from "./api{{importFileExtension}}"; export * from "./configuration{{importFileExtension}}"; -{{#withSeparateModelsAndApi}}export * from "./{{tsModelPackage}}{{importFileExtension}}";{{/withSeparateModelsAndApi}} +{{#withSeparateModelsAndApi}}export * from "./{{tsModelPackage}}{{#importFileExtension}}/index{{importFileExtension}}{{/importFileExtension}}";{{/withSeparateModelsAndApi}} diff --git a/templates/openapi-generator/typescript-axios/package.mustache b/templates/openapi-generator/typescript-axios/package.mustache index d0765f89..34ed22e3 100644 --- a/templates/openapi-generator/typescript-axios/package.mustache +++ b/templates/openapi-generator/typescript-axios/package.mustache @@ -1,8 +1,12 @@ { "name": "{{npmName}}", "version": "{{npmVersion}}", - "description": "TypeScript SDK for the Fatture in Cloud API", - "author": "Fatture in Cloud API Team", + "description": "OpenAPI client for {{npmName}}", + "author": "OpenAPI-Generator Contributors", + "repository": { + "type": "git", + "url": "https://{{gitHost}}/{{gitUserId}}/{{gitRepoId}}.git" + }, "keywords": [ "axios", "typescript", @@ -10,7 +14,7 @@ "openapi-generator", "{{npmName}}" ], - "license": "MIT", + "license": "{{licenseName}}", "main": "./dist/index.js", "typings": "./dist/index.d.ts", {{#supportsES6}} @@ -19,31 +23,17 @@ {{/supportsES6}} "scripts": { "build": "tsc{{#supportsES6}} && tsc -p tsconfig.esm.json{{/supportsES6}}", - "prepare": "npm run build", - "test": "mocha -r ts-node/register 'test/**/*.ts'" + "prepare": "npm run build" }, "dependencies": { - "axios": "^1.6.1", - "form-data": "^4.0.0" + "axios": "{{axiosVersion}}" + {{#withAWSV4Signature}} + "aws4-axios": "^3.3.4" + {{/withAWSV4Signature}} }, "devDependencies": { "@types/node": "12.11.5 - 12.20.42", - "typescript": "^4.0 || ^5.0", - "ts-node": "^10.7.0", - "chai": "^4.3.6", - "@types/chai": "^4.3.0", - "mocha": "^8.0.1", - "@types/mocha": "^9.1.0", - "sinon": "^7.2.0", - "@types/sinon": "^10.0.11", - "@typescript-eslint/eslint-plugin": "^5.22.0", - "@typescript-eslint/parser": "^5.22.0", - "eslint": "^8.14.0", - "eslint-config-standard": "^17.0.0", - "eslint-plugin-unused-imports": "^2.0.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-n": "^15.2.0", - "eslint-plugin-promise": "^6.0.0" + "typescript": "^4.0 || ^5.0" }{{#npmRepository}},{{/npmRepository}} {{#npmRepository}} "publishConfig": { diff --git a/templates/openapi-generator/typescript-axios/tsconfig.mustache b/templates/openapi-generator/typescript-axios/tsconfig.mustache index 61bb29f6..d0ebbd47 100644 --- a/templates/openapi-generator/typescript-axios/tsconfig.mustache +++ b/templates/openapi-generator/typescript-axios/tsconfig.mustache @@ -3,7 +3,6 @@ "declaration": true, "target": "{{#supportsES6}}ES6{{/supportsES6}}{{^supportsES6}}ES5{{/supportsES6}}", "module": "commonjs", - "esModuleInterop": true, "noImplicitAny": true, "outDir": "dist", "rootDir": ".",