Skip to content

Latest commit

 

History

History
1824 lines (1219 loc) · 70.4 KB

File metadata and controls

1824 lines (1219 loc) · 70.4 KB

swagger-typescript-api

13.6.0

Minor Changes

  • c4b02db Thanks @js2me! - paths with "produces" with binary mime types only should return only binary type - Blob

13.5.0

Minor Changes

  • 1ed598b Thanks @js2me! - add missing string->byte convertaion (Blob)

13.4.0

Minor Changes

13.3.1

Patch Changes

13.3.0

Minor Changes

13.2.18

Patch Changes

  • #1620 def2833 Thanks @smorimoto! - Restore objectAssign utility with es-toolkit to fix codeGenConstructs and primitiveTypeConstructs options. The lodash-to-es-toolkit migration (#1562) replaced objectAssign with Object.assign, which broke function-form arguments and deep merging. This restores both behaviors: functions are called with the current struct before merging, and nested properties are preserved via deep merge.

  • #1611 92a2d46 Thanks @smorimoto! - Escape */ sequences in generated JSDoc content to prevent comment injection from OpenAPI fields.

13.2.17

Patch Changes

  • #1603 19a4d29 Thanks @clicktodev! - Fix missing closing angle bracket in describeReturnType function's default case, which produced malformed return type syntax Promise<HttpResponse<T, E> instead of Promise<HttpResponse<T, E>>.

  • #1606 0528831 Thanks @smorimoto! - Replace Yarn with Bun as the package manager.

13.2.16

Patch Changes

  • #1459 6b485dd Thanks @smorimoto! - Downgrade eta from 4.0.1 to 3.5.0 to fix module resolution error.

    After the upgrade to eta@4.0.1 in version 13.2.11, API generation started failing with ERR_PACKAGE_PATH_NOT_EXPORTED: No "exports" main defined in eta/package.json. This issue is caused by incorrect package export configuration in eta@4.0.1, which is tracked in the upstream repository.

    Downgrading to eta@3.5.0 resolves the module resolution error whilst maintaining compatibility with the existing template system.

    Fixes #1427.

13.2.15

Patch Changes

  • afc2448 Thanks @js2me! - added ability to override usageSchema and originalSchema after onInit hook and before all other operations

13.2.14

Patch Changes

  • #1398 d987aee Thanks @k1rd3rf! - Fix modular template to always generate class property syntax.

    The modular template was incorrectly using object method syntax (: and ,) when route.namespace was present, introduced by PR #1326. This caused TypeScript syntax errors in generated code.

    The modular template should always generate class properties with arrow functions (= and ;), regardless of namespace presence.

    This resolves the issue reported in #1366 where version 13.2.8 generated invalid TypeScript code with modular templates.

13.2.13

Patch Changes

  • #1424 aa79764 Thanks @smorimoto! - Ensure discriminator mappings use union enum literals.

    Resolve discriminator mapping generation to use literal values when generateUnionEnums is enabled to avoid emitting enum member references. Add regression coverage that snapshots the discriminator output with union enums.

  • #1422 724b0cd Thanks @smorimoto! - Replace js-yaml with yaml.

    Switch YAML parsing from js-yaml to yaml. Update the resolver to use YAML.parse when JSON.parse fails. Remove js-yaml and its types, add yaml as a runtime dependency. No public API changes.

13.2.12

Patch Changes

  • #1420 426433b Thanks @smorimoto! - Move @types/lodash and openapi-types to dependencies.

    These type packages are referenced by the published declarations, so consumers require them at install time for correct type resolution. Moving them from devDependencies prevents downstream TypeScript errors whilst having no runtime impact.

13.2.11

Patch Changes

13.2.10

Patch Changes

  • 7b7351f Thanks @js2me! - Fix missing exported interfaces and types.

13.2.9

Patch Changes

  • #1384 0caea2c Thanks @smorimoto! - Fix enum const parsing for substrings of primitive types.

  • #1381 ba052f4 Thanks @smorimoto! - Support extracting request parameters for routes that only declare path parameters, such as DELETE methods.

  • #1382 792e96c Thanks @smorimoto! - Fix enum string value quoting when schema type mismatches.

  • #1385 859fc64 Thanks @smorimoto! - Avoid response cloning in fetch HTTP client to prevent memory leaks (#779).

  • #1383 8191970 Thanks @smorimoto! - Automatically extract enums when using enum names as values.

  • #1376 bec35e8 Thanks @smorimoto! - Merge GenerateApiParamsBase into GenerateApiConfiguration to remove duplicated type definitions and expose missing configuration fields. Document configuration defaults with JSDoc tags.

  • #1378 912e521 Thanks @smorimoto! - Allow partial extractingOptions in generateApi configuration.

  • #1380 fec0a09 Thanks @smorimoto! - Add test verifying primitive + object anyOf unions.

  • #1376 bec35e8 Thanks @smorimoto! - Restore modular option typing in generateApi parameters.

  • #1379 339a167 Thanks @smorimoto! - Support synchronous require in templates using Node's createRequire.

13.2.8

Patch Changes

  • #1326 99b5f50 Thanks @thejhh! - Fix TypeScript generation failure for operationIds starting with numbers

    What: Fixed an issue where operationIds starting with numbers (e.g., "123getUser") would cause TypeScript generation to fail due to invalid identifier names.

    Why: OperationIds that start with numbers are not valid JavaScript identifiers, causing syntax errors in the generated TypeScript code.

    How: Modified the template logic to quote property names for invalid identifiers. OperationIds starting with numbers are now generated as quoted properties (e.g., "123GetUser": ...) instead of unquoted invalid identifiers.

    This resolves GitHub issue #952.

  • #1008 c2d3e6a Thanks @frazar! - Fix handling of FormData inputs in Fetch HTTP client

    Previously, when users passed a FormData object directly to the Fetch client's multipart/form-data formatter, it would incorrectly attempt to use Object.keys() on the FormData instance, which returns an empty array. This caused the FormData to be processed incorrectly.

    The fix adds a type check to return FormData instances unchanged, allowing users to have full control over FormData construction when needed whilst maintaining backwards compatibility for object inputs. This aligns the Fetch client behaviour with the existing Axios client implementation.

    This resolves issues where users needed to send multipart requests with multiple entries for the same key, which is only possible with direct FormData manipulation.

13.2.7

Patch Changes

13.2.6

Patch Changes

  • #1306 fe125cb Thanks @js2me! - better extracting description for request body extacting types

13.2.5

Patch Changes

  • #1302 790fece Thanks @js2me! - added support x-propertyNames, propertyNames for object types

13.2.4

Patch Changes

13.2.3

Patch Changes

13.2.2

Patch Changes

13.2.1

Patch Changes

13.2.0

Minor Changes

Patch Changes

13.1.3

Patch Changes

13.1.2

Patch Changes

13.1.1

Patch Changes

  • #1163 e477b58 Thanks @RoXuS! - Ensure enums are at the top of the components to avoid issue on recursive schema parsing.

13.1.0

Minor Changes

Patch Changes

13.0.28

Patch Changes

13.0.27

Patch Changes

  • #1119 c5e8d45 Thanks @smorimoto! - Add shims option in tsup configuration and update rootDir path in templates generation process.

  • #1119 c5e8d45 Thanks @smorimoto! - Resolve internal references in Swagger v2 to OpenAPI v3 conversion by adding resolveInternal option and enhancing type definitions for request payloads.

  • #1119 c5e8d45 Thanks @smorimoto! - Fix default value for no-client option in generateCommand to false.

  • #1119 c5e8d45 Thanks @smorimoto! - Add required property to output path in generateTemplatesCommand.

  • #1119 c5e8d45 Thanks @smorimoto! - Fix documentation and type definition to align with actual implementation by renaming name to fileName.

13.0.26

Patch Changes

13.0.25

Patch Changes

  • #1102 13da52a Thanks @smorimoto! - Fix CLI executable by adding the required shebang to the entry file.

  • #1102 13da52a Thanks @smorimoto! - Fix query params detection on route name parsing

  • #1102 13da52a Thanks @smorimoto! - Improve type safety by adding proper types to SchemaComponent and introducing flags for extracted elements such as request parameters, request body, response body, and response errors.

13.0.24

Patch Changes

13.0.23

  • use import pattern that supports windows external drives by @smorimoto in #983

13.0.22

  • Consola by @smorimoto in #903

13.0.21

  • Fix e.values(...).some is not a function by @smorimoto in #884

13.0.20

  • Fix #880 by @smorimoto in #881

13.0.19

  • Use default export for lodash by @smorimoto in #878

13.0.18

  • This was a version bump only, there were no code changes.

13.0.17

  • Fix types by @smorimoto in #872
  • Fix build warnings by @smorimoto in #873
  • Reduce use of lodash by @smorimoto in #874
  • Fix build warnings by @smorimoto in #875

13.0.16

  • Revert "Fix contentFormatter for FormData returning an empty FormData object" by @smorimoto in #863

13.0.15

  • Make types slightly better by @smorimoto in #859
  • Set the build target to Node.js 18 by @smorimoto in #861

13.0.14

  • fix: format option of requests when using extractResponseBody by @TaopaiC in #742
  • Fix #671 - Content-Type: "multipart/form-data" is ignored (when using axios) by @cf-dlangston in #831

13.0.13

  • Fix types by @raing3 in #825
  • Custom config: handle default export by @shrpne in #828

13.0.12

  • Fix types by @smorimoto in #812

13.0.11

  • Fix contentFormatter for FormData returning an empty FormData object by @JorensM in #747
  • Checking if instanceof FormData before creating one by @dolevl in #680
  • feat: add security in raw route info by @xfoxfu in #602
  • Get rid of require by @smorimoto in #807

13.0.10

  • Add support for both ESM and CJS by @smorimoto in #803

13.0.9

  • ESM by @smorimoto in #788

13.0.8

  • Fix type errors by @smorimoto in #787

13.0.7

  • fix: support shared prettier config files by @pebo in #781

13.0.6

  • Relax version constraints on dependencies by @smorimoto in #773
  • Keep some dependency constraints tight by @smorimoto in #774

13.0.5

  • This was a version bump only, there were no code changes.

13.0.4

  • add missing apiClassName to GenerateApiParamsBase by @Mearman in #635
  • fix: fix options manipulation by @vgprst in #631
  • Fix typos by @szepeviktor in #698
  • The default branch has been renamed and the next branch has been deprecated by @smorimoto in #735
  • Clone the response in fetch HTTP client by @depsimon in #670

13.0.3

fix: problem with type any as base type of discriminator schema (cases when schema without discriminator is empty)

13.0.2

fix: problem with incorrect settings type suffix for internal discriminator mappings

13.0.1

feat: const keyword OpenAPI 3.0 draft fix: problem with using anyOf feat: --extract-responses (nodejs: extractResponses) option to extract all schemas from /components/responses fix: discriminator and mapping with invalid discriminator property name (#551) fix: problem with incorrect resolving type name of discriminator mapping types data contracts

13.0.0

BREAKING_CHANGE: disable support NodeJS 14.x BREAKING_CHANGE: change swagger-typescript-api NodeJS "generateApi" function return type BREAKING_CHANGE: remove rawModelTypes from output api configuration feat: --custom-config <string> option (#503) feat: --sort-routes option, ability to sort routes; fix: critical bugs based with extract types and enums fix: sort types option (sort was not correctly work with nested or extracted types) fix: problems based with extracting enums; fix: nullable enum with integer values (#543) fix: generation enum numbers as strings one (#534) chore: refactoring the axios imports fix: non-object custom spec extensions (#500) fix(docs): input instead of output in readme internal: remove redundant internal scripts internal: change process with using custom templates

interface GenerateApiOutput {
...
-  files: { name: string; content: string; declaration: { name: string; content: string } | null }[];
+  files: { fileName: string; fileContent: string; fileExtension: string }[];
...
}

internal: refactor schema parser code (preparing it for async code execution) fix: problem with filtering primitive in complex types (#459) feat: add discriminator property support (#456) internal: prepare code + templates for async code execution (next plans) fix: problems with dot in query params (hard fix) (#460) feature: ability to send custom Ts output code translator to js. Example:

const {
  Translator,
} = require("swagger-typescript-api/src/translators/translator");
const {
  JavascriptTranslator,
} = require("swagger-typescript-api/src/translators/javascript");

class MyTranslator extends Translator {
  // or use extends JavascriptTranslator
  translate({ fileName, fileExtension, fileContent }) {
    // format ts\js code with using this codeFormatter (prettier + ts import fixer)
    this.codeFormatter.format(fileContent);
    // config of the code gen process
    // logger
    this.config.this.logger.return[
      {
        fileName,
        fileExtension,
        fileContent,
      }
    ];
  }
}

12.0.4

fix: onCreateRoute skip behaviour fix: problems with prefixes\suffixes for extracted requests params, enums

Full Changelog: https://github.com/acacode/swagger-typescript-api/compare/12.0.3...12.0.4

12.0.3

security: update the eta package to address CVE-2022-25967

12.0.2

fix: missing option --extract-enums (#344)

12.0.1

fix: problem based with http requests and disableStrictSSL option (#453) docs: update docs for requestOptions nodejs option

12.0.0

new hooks:

/** calls before parse\process route path */
onPreBuildRoutePath: (routePath: string) => string | void;
/** calls after parse\process route path */
onBuildRoutePath: (data: BuildRoutePath) => BuildRoutePath | void;
/** calls before insert path param name into string path interpolation */
onInsertPathParam: (paramName: string, index: number, arr: BuildRouteParam[], resultRoute: string) => string | void;
/** calls before parse any kind of schema */
onPreParseSchema: (originalSchema: any, typeName: string, schemaType: string) => any;

BREAKING_CHANGE: add ability to custom prefix for autofix invalid enum keys, invalid type names with nodejs options (fixInvalidTypeNamePrefix: string, fixInvalidEnumKeyPrefix: string) BREAKING_CHANGE: by default all component enum schemas (even numeric) extracting as enum TS constructions (#344) feature: ability to extract all enums from nested types\interfaces to enum TS construction using --extract-enums option (#344) feature: ability to modify route path params before insert them into string (request url, #446, with using hook onInsertPathParam) feature: (nodejs) ability to add prefix\suffix for type names and enum keys

typePrefix?: string;
typeSuffix?: string;
enumKeyPrefix?: string;
enumKeySuffix?: string;

feature: ability to customize resolving process of the extracting type names (extractingOptions nodejs option)

extractingOptions = {
  // requestBodySuffix: ["Payload", "Body", "Input"],
  // or
  // requestBodyNameResolver: (typeName, reservedNames) => string;
  // requestParamsSuffix: ["Params"],
  // or
  // requestParamsNameResolver: (typeName, reservedNames) => string;
  // responseBodySuffix: ["Data", "Result", "Output"],
  // or
  // responseBodyNameResolver: (typeName, reservedNames) => string;
  // responseErrorSuffix: ["Error", "Fail", "Fails", "ErrorData", "HttpError", "BadResponse"],
  // or
  // responseErrorNameResolver: (typeName, reservedNames) => string;
};

docs: update docs for extraTemplates option fix: problem with default name of single api file (Api.ts) fix: problem based with tuple types (#445) fix: problem with defaultResponseType declaration type

11.1.3

fix: problems with text/* content types (axios, fetch http clients) (thanks @JochenDiekenbrock, #312, #443) fix: problem with application/json* content type (thanks @JochenDiekenbrock, #440, #441) fix: different query type parameters declarations (in route name {?accountStatus,createdT, #439)

11.1.2

fix: problems with missing type imports in .d.ts files with using option --js internal: add extra spec tests fix: additionalProperties management problem in Swagger 2 (#343) fix: hanging cli after execution finished (#436, thanks @Soarc)

11.1.1

fix: --api-class-name option has no default value (#433)

11.1.0

BREAKING_CHANGE: replace axios to node-fetch feat: ability to send request options for getting swagger schema by url (requestOptions property)

11.0.2

  • fix: problems with --http-client option in generate-templates command
  • fix: rewrite file content in generate-templates command (--rewrite flag)

11.0.0

Breaking changes

  • data-contract-jsdoc.ejs file uses new input structure. Please update your local copy.
  • new codebase (class way)
  • ability to change everything in codegen process configuration with using NodeJS Api
  • ability to call generateApi function 2 and more times per 1 NodeJS process.
  • new command generate-templates to create source templates

[feature] Ability to generate source templates

New command generate-templates which allow you to generate source templates which using with option --templates

[feature] Ability to modify internal codegen typescript structs

Everything which creates codegen about output typescript code now contains in Ts field in src/configuration. And this thing is available for end user modifications with using NodeJS Cli option codeGenConstructs. It contains almost all which is not contains in .eta\ .ejs templates. For example: Record<string, any>, readonly typeField?: value, etc

Structure of Ts property

const Ts = {
  Keyword: {
    Number: "number",
    String: "string",
    Boolean: "boolean",
    Any: "any",
    Void: "void",
    Unknown: "unknown",
    Null: "null",
    Undefined: "undefined",
    Object: "object",
    File: "File",
    Date: "Date",
    Type: "type",
    Enum: "enum",
    Interface: "interface",
    Array: "Array",
    Record: "Record",
    Intersection: "&",
    Union: "|",
  },
  CodeGenKeyword: {
    UtilRequiredKeys: "UtilRequiredKeys",
  },
  /**
   * $A[] or Array<$A>
   */
  ArrayType: (content) => {
    if (this.anotherArrayType) {
      return Ts.TypeWithGeneric(Ts.Keyword.Array, [content]);
    }

    return `${Ts.ExpressionGroup(content)}[]`;
  },
  /**
   * "$A"
   */
  StringValue: (content) => `"${content}"`,
  /**
   * $A
   */
  BooleanValue: (content) => `${content}`,
  /**
   * $A
   */
  NumberValue: (content) => `${content}`,
  /**
   * $A
   */
  NullValue: (content) => content,
  /**
   * $A1 | $A2
   */
  UnionType: (contents) => _.join(_.uniq(contents), ` ${Ts.Keyword.Union} `),
  /**
   * ($A1)
   */
  ExpressionGroup: (content) => (content ? `(${content})` : ""),
  /**
   * $A1 & $A2
   */
  IntersectionType: (contents) =>
    _.join(_.uniq(contents), ` ${Ts.Keyword.Intersection} `),
  /**
   * Record<$A1, $A2>
   */
  RecordType: (key, value) =>
    Ts.TypeWithGeneric(Ts.Keyword.Record, [key, value]),
  /**
   * readonly $key?:$value
   */
  TypeField: ({ readonly, key, optional, value }) =>
    _.compact([
      readonly && "readonly ",
      key,
      optional && "?",
      ": ",
      value,
    ]).join(""),
  /**
   * [key: $A1]: $A2
   */
  InterfaceDynamicField: (key, value) => `[key: ${key}]: ${value}`,
  /**
   * $A1 = $A2
   */
  EnumField: (key, value) => `${key} = ${value}`,
  /**
   * $A0.key = $A0.value,
   * $A1.key = $A1.value,
   * $AN.key = $AN.value,
   */
  EnumFieldsWrapper: (contents) =>
    _.map(contents, ({ key, value }) => `  ${Ts.EnumField(key, value)}`).join(
      ",\n"
    ),
  /**
   * {\n $A \n}
   */
  ObjectWrapper: (content) => `{\n${content}\n}`,
  /**
   * /** $A *\/
   */
  MultilineComment: (contents, formatFn) =>
    [
      ...(contents.length === 1
        ? [`/** ${contents[0]} */`]
        : ["/**", ...contents.map((content) => ` * ${content}`), " */"]),
    ].map((part) => `${formatFn ? formatFn(part) : part}\n`),
  /**
   * $A1<...$A2.join(,)>
   */
  TypeWithGeneric: (typeName, genericArgs) => {
    return `${typeName}${
      genericArgs.length ? `<${genericArgs.join(",")}>` : ""
    }`;
  },
};

[feature] Ability to modify swagger schema type/format to typescript construction translators

Swagger schema has constructions like { "type": "string" | "integer" | etc, "format": "date-time" | "float" | "etc" } where field type is not "readable" for TypeScript. And because of this swagger-typescript-api has key value group to translate swagger schema fields type/format to TypeScript constructions. See more about swagger schema type/format data here For example, current version of default configuration translates this schema

{
  "type": "string",
  "format": "date-time"
}

translates to

string;

If you need to see Date instead of string you are able to change it with using primitiveTypeConstructs

generateApiForTest({
  // ...
  primitiveTypeConstructs: (construct) => ({
    string: {
      "date-time": "Date",
    },
  }),
});

Structure of primitiveTypes property

const primitiveTypes = {
  integer: () => Ts.Keyword.Number,
  number: () => Ts.Keyword.Number,
  boolean: () => Ts.Keyword.Boolean,
  object: () => Ts.Keyword.Object,
  file: () => Ts.Keyword.File,
  string: {
    $default: () => Ts.Keyword.String,

    /** formats */
    binary: () => Ts.Keyword.File,
    file: () => Ts.Keyword.File,
    "date-time": () => Ts.Keyword.String,
    time: () => Ts.Keyword.String,
    date: () => Ts.Keyword.String,
    duration: () => Ts.Keyword.String,
    email: () => Ts.Keyword.String,
    "idn-email": () => Ts.Keyword.String,
    "idn-hostname": () => Ts.Keyword.String,
    ipv4: () => Ts.Keyword.String,
    ipv6: () => Ts.Keyword.String,
    uuid: () => Ts.Keyword.String,
    uri: () => Ts.Keyword.String,
    "uri-reference": () => Ts.Keyword.String,
    "uri-template": () => Ts.Keyword.String,
    "json-pointer": () => Ts.Keyword.String,
    "relative-json-pointer": () => Ts.Keyword.String,
    regex: () => Ts.Keyword.String,
  },
  array: ({ items, ...schemaPart }, parser) => {
    const content = parser.getInlineParseContent(items);
    return parser.safeAddNullToType(schemaPart, Ts.ArrayType(content));
  },
};

Other

feat: --another-array-type cli option (#414) fix: path params with dot style (truck.id) (#413)

10.0.3

fix: CRLF -> LF (#423) docs: add docs for addReadonly nodeJS api flag (#425) chore: remove useless trailing whitespaces which make test edit harder (thanks @qboot, #422) internal: add test snapshots (git diff + nodejs assertions) chore: add logging (project version, node version, npm version)

10.0.2

fix: host.fileExists is not a function fix: other problems linked with new typescript version (4.8.*) (thanks @elkeis, @Jnig) fix: problem with required nested properties based on root required properties list fix: fetch http client headers content type priority fix: fs.rmSync (thanks @smorimoto) fix: locally overridden security schemes (security flag) (#418, thanks @EdwardSalter) docs: add documentation for unwrapResponseData nodejs option (thanks @simowe) BREAKING_CHANGE: rename .eta file extensions to .ejs. Backward capability should be existed. fix: problem with --sort-types option

10.0.*

fix: problem with default http request headers in axios client

10.0.1

  • fix problem linked with this.name is not a function
  • [internal] add cli tests
  • fix problem with not correct working the --no-client option
  • separate data-contracts.ejs onto 4 pieces (enum, interface, type, jsdoc)

10.0.0

  • --extract-response-body option - extract response body type to data contract
  • --extract-response-error option - extract response error type to data contract
  • --add-readonly option - generate readonly properties
  • authorizationToken for axios fetch swagger schema request
  • fix: change COMPLEX_NOT_OF to COMPLEX_NOT (internal)
  • feat: improve @deprecated jsdoc info
  • feat: improve required field in complex data schemas (anyOf, oneOf, allOf etc)
  • feat: abortSignal for fetch http client
  • chore: improve typings in index.d.ts
  • fixed Request falls if FormData attachment is File instance
  • fixed Response format - global default or override ?

Co-authored-by: Sergey S. Volkov js2me@outlook.com Co-authored-by: Xavier Cassel 57092100+xcassel@users.noreply.github.com Co-authored-by: cassel xavier.cassel35@gmail.com Co-authored-by: Adrian Wieprzkowicz Argeento@users.noreply.github.com Co-authored-by: EvgenBabenko evgen.babenko@gmail.com Co-authored-by: RoCat catoio.romain@gmail.com Co-authored-by: rcatoio rcatoio@doubletrade.com Co-authored-by: 卡色 cipchk@qq.com Co-authored-by: 江麻妞 50100681+jiangmaniu@users.noreply.github.com Co-authored-by: Kasper Moskwiak kasper.moskwiak@gmail.com Co-authored-by: Ben Watkins ben@outdatedversion.com Co-authored-by: bonukai bonukai@protonmail.com Co-authored-by: baggoedw 92381702+baggoedw@users.noreply.github.com Co-authored-by: Marcus Dunn 51931484+MarcusDunn@users.noreply.github.com Co-authored-by: Daniele De Matteo daniele@kuama.net Co-authored-by: Daniel Playfair Cal daniel.playfair.cal@gmail.com Co-authored-by: Anders Cassidy anders.cassidy@dailypay.com Co-authored-by: Daniel Playfair Cal dcal@atlassian.com

9.2.0

Features:

  • full response typing for status code, data and headers. (#272, thanks @rustyconover)
  • --unwrap-response-data to unwrap the data item from the response (#268, thanks @laktak)

Fixes:

  • fix: formdata in axios template (#277, thanks @tiagoskaneta)

9.1.2

Fixes:

  • Bug with --single-http-client and private http property

9.1.1

Fixes:

  • Bug with nested objects in FormData (issue #262, thanks @avlnche64)

9.1.0

Fixes:

  • Critical bug linked with templateRequire in ETA templates
  • Critical bugs linked with --type-prefix, --type-suffix

Internal:

  • Improve manual testing scripts

9.0.2

Fixes:

  • 9.0.1 won't build with tsc when imported (thanks @mastermatt)

9.0.1

Fixes:

  • Can't compile 9.0.0 version (thanks @Nihisil )

9.0.0

NOTE: This version is not compatible with previous templates (removed route.request.params, apiConfig.props, apiConfig.generic, apiConfig.description, apiConfig.hasDescription)

Fixes:

  • Consider 2xx a successful status (thanks @wyozi)
  • GET method query option bug (thanks @rhkdgns95, @SaschaGalley)
  • silent property missed in .d.ts file (thanks @mastermatt)
  • axios file upload formData type (thanks @guhyeon)
  • make property instance to public in axios http client (It can be helpful in #226)
  • variable name "params" doesn't uniq (thanks @mixalbl4-127 )

Features:

  • --disableProxy option (thanks @kel666)
  • --extract-request-body option. Allows to extract request body type to data contract
  • Add TSDoc tag for deprecated route (thanks @wyozi)

8.0.3

  • Fixes encoding array query params in fetch http templates (thanks @prog13)

8.0.2

Fixes:

  • Wrong working the format option in fetch http client

8.0.1

Fixes:

  • Not working customFetch Error: Failed to execute 'fetch' on 'Window': Illegal invocation

8.0.0

BREAKING_CHANGES:

  • remove default json format of the response type (both for axios and fetch http clients) (issue #213, thanks @po5i)

Features:

  • Allow passing custom fetch function (fetch http client only)
  • Allow to set global response type format through HttpClient constructor Example:
const httpClient = new HttpClient({ format: "json" });
// all request responses will been formatted as json

Fixes:

  • Missing schema.$ref in inline enum schemas
  • Array query param values are serialized with the (non-default) comma separated style (issue #222, thanks @Styn, PR #223)
  • TypeScript error "TS6133: 'E' is declared but its value is never read." (axios http client) (issue #220, thanks @pmbednarczyk )

7.0.1

Fixes:

  • "securityWorker" is only used if "secure" option is specified on each request (issue #212, thanks @dkamyshov) NOTE: added global secure option for axios http client
  • index.d.ts file (add rawModelTypes)

7.0.0

BREAKING_CHANGES:

  • format namespace name in --route-types as camelCase with upper first capitalized letter foo_bar -> FooBar

Fixes:

  • Incorrect working the --route-types option with --modular option (route types should be splitted on files)
  • Fix critical bug linked with enums with boolean type (thanks @haedaal)

Features:

  • Ability to return false in onCreateRoute hook, it allow to ignore route
  • Add output util functions
  createFile: (params: {
    path: string;
    fileName: string;
    content: string;
    withPrefix?: boolean;
  }) => void;
  renderTemplate: (
    templateContent: string,
    data: Record<string, unknown>,
    etaOptions?: import("eta/dist/types/config").PartialConfig
  ) => string;
  getTemplate: (params: {
    fileName?: string;
    name?: string;
    path?: string;
  }) => string
  formatTSContent: (content: string) => Promise<string>;


  // ...

  generateApi({ /* ... */ }).then(({ createFile, renderTemplate, getTemplate }) => {
    // do something
  })

6.4.2

Fixes:

  • Bug with missing name property in in-path requests parameters
  • Problem with usage --route-types with --modular option (mising import data contracts)

6.4.1

Fixes:

  • Bug with axios headers (thanks @mutoe)

6.4.0

Features:

  • onFormatRouteName(routeInfo: RawRouteInfo, templateRouteName: string) hook. Allows to format route name, as you like :)

Fixes:

  • Bug with wrong complex types (anyOf, oneOf, allOf) when some child schema contains only description example
  • Bug with number enums which have x-enumNames
  • Problem with not existing title property in info

Minor:

  • Improve description for complex types
  • Improve description in single api file

6.3.0

Features:

  • --type-suffix option. Allows to set suffix for data contract name. (issue #191, thanks @the-ult)
  • --type-prefix option. Allows to set prefix for data contract name. (issue #191, thanks @the-ult) Examples here
  • onFormatTypeName(usageTypeName, rawTypeName, schemaType) hook. Allow to format data contract names as you want.

Internal:

  • rename and split checkAndRenameModelName -> formatModelName, fixModelName

6.2.1

Fixes:

  • missing generateUnionEnums?: boolean; in index.d.ts file (thanks @artsaban)
  • missing default params to axios http client (--axios) (issue #192, thanks @Nihisil)

6.2.0

Features:

  • --module-name-first-tag option. Splits routes based on the first tag (thanks @jnpoyser)

6.1.2

Fixes:

  • Problems with using both --axios and --modular options together (TS, organizeImports crashed the codegeneration)

6.1.1

Fixes:

  • Problems with --axios option
    • ignoring path, format, type payload properties in request() method of HttpClient
  • Missing format property for requests in --modular option

6.1.0

Features:

  • --silent option. Output only errors to console (default: false)

Fixes:

  • Bug with kebab-case path params (issue #184, thanks @Mr-sgreen)
  • Typings for --js option

6.0.0

BREAKING_CHANGES:

  • Ability to override only one template (issue #166, thanks @Nihisil)
  • removed TPromise type for --responses options (perf. problem, issue #182, thanks @mixalbl4-127)
  • breaking changes in http-client.eta
  • securityWorker now can return Promise<RequestParams | void> | RequestParams | void

Features:

  • template path prefixes @base, @default, @modular (using in Eta templates, includeFile(), see README.md)
  • --axios option for axios http client (issue #142, thanks @msklvsk, @mixalbl4-127 )

5.1.7

Fixes:

  • Do not fail if template file does not exist (issue #166, thanks @armsnyder ) Caveat: With this fix it will still error if the overridden template uses includeFile on a template file that is not overridden

5.1.6

Fixes:

  • The contentFormatter for ContentType:Json does not correctly format strings (issue #176, thanks @Styn)

5.1.5

Fixes:

  • ContentType.FormData no longer sets the correct boundary (issue #172, thanks @Styn)

5.1.4

Fixes:

  • header overwrite in default and modular API templates (issue #171 by @Styn, thanks @emilecantin for PR with fix)

5.1.3

Fixes:

  • Ignored x-nullable field
  • Schema type names which starts with number or special characters

5.1.2

Fixes:

  • Linter disable rules is not working (issue #164, thanks @Haritaso)

5.1.1

Fixes:

  • The HttpResponse type is no longer exported from http-client (issue #161, thanks @Styn)

5.1.0

Fixes:

  • Bug with optional nested properties of object schema type (issue #156, thanks @Fabiencdp)

Features:

  • onCreateRouteName(routeNameInfo: RouteNameInfo, rawRouteInfo: RawRouteInfo): RouteNameInfo | void hook Which allows to customize route name without customizing route-name.eta template
  • Improved content kinds for request infos
  • --single-http-client option which allows to send HttpClient instance to Api constructor and not to create many count of HttpClient instances with --modular api (issue #155)

Minor:

  • A bit improve type declaration file (index.d.ts) for this tool
  • make exportable ApiConfig interface

Internal:

  • clearing routeNameDuplicatesMap before each parseRoutes() function call
  • Changed templates:
    • http-client.eta
    • procedure-call.eta
    • api.eta

5.0.0

Fixes:

  • Request content types auto substitution i.e. if request body is form data, then request body content type will be multipart/form-data
  • Strange method name (issue #152, thanks @RoXuS)
  • Hardcoded Content-Type causes issues with some endpoints (issue #153, thanks @po5i)
  • Critical bug with :paramName path params (issue #154)

Features:

  • Ability to provide custom formatting fetch response
  • "IMAGE" content kind for response\request data objects
  • RequestParams RequestHeaders types for --route-types (routeTypes: true) option (issue #150, thanks @Fabiencdp )
  • --default-response option. Allows to set default type for empty response schema (default: void) (based on issue #14)
  • Request cancellation support (issue #96, thanks @ApacheEx) RequestParams type now have the cancelToken field HttpClient instance now have the abortRequest(cancelToken) method

BREAKING_CHANGES:

  • Fully refactored http-client.eta template, make it more flexible and simpler. HttpClient["request"] takes one argument with type FullRequestParams (previously it takes many count of arguments which was not flexible)
  • Changed the default response body type from any to void (issue #14)

Internal:

  • Changed templates:
    • http-client.eta
    • procedure-call.eta
    • api.eta

This version works with previous templates.

4.4.0

Fixes:

  • Client generation for Content-Type: application/x-www-form-urlencoded (issue #146, thanks @Larox)

Internal:

  • Changed templates:
    • http-client.eta
    • procedure-call.eta

4.3.0

Fixes:

  • enum + nullable: true doesn't compute the good type (issue #145, thanks @RoXuS)
  • Underscores are omitted from enum keys (issue #108, thanks @eolant)
  • CLI silently fails if the directory to put new files in doesn't exist yet (issue #141, thanks @Styn)

Features:

  • Improved type description

Internal:

  • dependencies update:
    • "js-yaml": "^4.0.0" ("^3.14.1")
    • "make-dir": "^3.1.0"
    • "swagger2openapi": "^7.0.5" ("^7.0.4")
  • Difference in templates:
    • data-contracts.eta dataContracts430

4.2.0

Features:

  • new hook onCreateRequestParams which allows modify request params (--extract-request-params option) before sending it to route info onCreateRequestParams How to use:

    generateApi({
      // ... your config,
      hooks: {
        onCreateRequestParams: (rawType) => {
          if (Object.keys(rawType.properties).length > 1) return rawType;
    
          return rawType;
        },
      },
    });
  • response content types (array of string like application/json, image/png) which allows to customize declaration of request response Exist in procedure-call.eta template it.route.response.contentTypes

Internal:

  • Difference in templates:
    • procedure-call.eta procedureCallEta1

4.1.0

Features:

  • Improve require() function used in ETA templates (using relative path imports)
  • --clean-output option. clean output folder before generate api

Fixes:

  • Error: Unexpected token = (Issue #136, Thanks @jlow-mudbath)
  • Output folder creation (Issue #137, Thanks @Rinta01) Create output folder if it is not exist

4.0.5

BREAKING_CHANGE:

  • remove 'prettier-plugin-organize-imports' dependency from package

Fixes:

  • issue #134 (Thanks @mrfratello)

4.0.4

Features:

  • add require() to template utils object

Docs:

  • add information about contributors

4.0.3

Features:

  • --disableStrictSSL option for disable strict SSL statement with fetching swagger schema. (Thanks @kel666 for PR with feature request) This option fix problem #114

4.0.2

Fixes:

  • Unexpected token '.' on v4 (Thanks @savingprivatebryan for issue #111) Replaced all new syntax sugar like ?. or ?? to prev. alternatives for support nodejs 12

4.0.1

Fixes:

  • Cannot find module 'prettier-plugin-organize-imports' #109

4.0.0

BREAKING_CHANGES:

  • Migrate from mustache template engine to ETA template engine. (Thanks @Fl0pZz)
  • Critical change in HttpResponse type (Remove D | null, E | null unions)
interface HttpResponse<D extends unknown, E extends unknown = unknown> extends Response {
-  data: D | null;
+  data: D;
-  error: E | null;
+  error: E;
}

Features:

  • --modular option. Allows to generate api class per module name. Example: here

  • new templates on ETA (enhanced EJS) which can improve your templates! (Thanks @Fl0pZz) ETA extension for Visual Studio Code (thanks @shadowtime2000) Also moved out to templates:

    • procedure-call.eta (request api method template)
    • route-name.eta (api method name template)
    • route-docs.eta (api method docs template)

    No worry about strange syntax it is very simple in usage :)

  • Optional templates feature (Except templates using in includeFile ETA directive) Now you can store only the ETA templates which you need to change for yourself.

  • --extract-request-params option. Generate path and query request params data contract and modify request payload args Example: extract-request-params

  • Improve data-contracts.eta template. Added more power :)

  • Add extraTemplates property for generateApi(). Allows to generate extra files via this tool.

  • Add hooks property for generateApi()

    hooks?: Partial<{
      onCreateComponent: (component: SchemaComponent) => SchemaComponent | void;
      onParseSchema: (originalSchema: any, parsedSchema: any) => any | void;
      onCreateRoute: (routeData: ParsedRoute) => ParsedRoute | void;
      /** Start point of work this tool (after fetching schema) */
      onInit?: <C extends GenerateApiConfiguration["config"]>(configuration: C) => C | void;
      /** Allows to customize configuration object before sending it to templates. */
      onPrepareConfig?: <C extends GenerateApiConfiguration>(currentConfiguration: C) => C | void;
    }>;
    generateApi({
      input: "./schema.json",
      output: "./__generated__",
      hooks: {
        onCreateComponent(component) {
          // do something
          return component;
        },
        // ...
      },
    });

Internal:

  • Update all dependencies to latest

Fixes:

  • x-enumNames support for enums
  • Problem of complex types (oneOf, allOf) with properties field
  • additionalProperties: true should make [key: string]: any for object types (Thanks @brookjordan for issue #103)

Common:

  • HttpClient is exportable by default
  • Improve typings when use swagger-typescript-api with NodeJS (index.d.ts)

3.1.2

Fixes:

  • axios vulnerability (#101 issue, thanks @Mvbraathen)

3.1.1

Fixes:

  • name.includes is not a function (issue #98)

3.1.0

Features:

  • --moduleNameIndex option. determines which path index should be used for routes separation (Thanks @nikalun) Examples: GET:api/v1/fruites/getFruit -> index:2 -> moduleName -> fruites GET:api/v1/fruites/getFruit -> index:0 -> moduleName -> api

3.0.1

Fixes:

  • invalid default templates path (#92, thanks @larrybotha for quick fix)

3.0.0

BREAKING_CHANGES:

  • Renamed mustache templates:
    • api.mustache -> data-contracts.mustache
    • client.mustache -> http.client.mustache + api.mustache
  • Split the client.mustache template into two parts: http-client.mustache and api.mustache

Fixes:

  • Fixed unsafe clone() of Response causing json() hang. (Thanks @Benjamin-Dobell)

2.0.0

Features:

BREAKING_CHANGES:

  • Requests returns Promise<HttpResponse<Data, Error>> type. HttpResponse it is Fetch.Response wrapper with fields data and error Example:

    const api = new Api();
    
    //
    const response: HttpResponse<Data, Error> = await api.fruits.getAll();
    
    response.data; // Data (can be null if response.ok is false)
    response.error; // Error (can be null if response.ok is true)
  • Breaking changes in the client.mustache template. Needs to update local custom templates.

Fixes:

  • Security configuration in methods. When the security definition is in the main configuration of the swagger definition

1.12.0

Features:

  • Can provide ability to generate from swagger JSON directly not from a file? #69 (Thanks @JennieJi)

Fixes:

  • handling x-omitempty property for definition properties #68
  • Additional properties map to empty interfaces (OpenAPI v3) #76
  • Pattern fields in Path Item Object are treated as operations #75
  • Remove const enum from default template #73
  • enums with spaces throw an error #71

1.11.0

Features:

  • Improve the naming of model types (#65 issue)

1.10.0

Features:

  • --templates CLI option. [feature request] Provide custom mustache templates folder which allows to generate custom code (models, Api class, routes)
  • --union-enums CLI option. [feature request] Allows to generate all enums as union types. For example, schema part:
    "StringEnum": {
      "enum": ["String1", "String2", "String3", "String4"],
      "type": "string"
    }
    
    will be converted into: export type StringEnum = "String1" | "String2" | "String3" | "String4";

1.8.4

Fixes:

  • Multiple types for a property in Swagger 2 are not handled correctly (#55 issue)

1.8.3

Fixes:

  • Generating invalid code in composed schema contexts (#51 issue)
    components:
    schemas:
      Test:
        type: object
        allOf:
          - type: object
            properties:
              x:
                type: array
                items:
                  type: string
                  enum:
                    - A-B
          - type: object
            properties:
              y:
                type: string
    export type Test = XAB & { y?: string };

1.8.2

Fixes:

  • Broken types for arrays of union types (issue)

1.8.1

Fixes:

  • form data request body (request body content multipart/form-data)

Minor:

  • inline comments of the data contract type properties one line comments
  • remove Array<T> type usage (now the more simple type T[])

1.8.0

Features:

  • Partially support FormData body types
  • Support to generate query params of nested query objects (Partial fix of this issue)

1.7.2

Fixes:

  • Critical bug with converting inline object into name of type for request body.
  • Fix bug when path parameters is not set but contains in endpoint url. path params bug 1 path params bug 2

1.7.0

Breaking Changes:

  • Remove title and version public Api class properties (moved it to Api class JSDOC)(fixes this issue) removed title and version properties
  • Move out all http client handlers/properties into HttpClient local class in module http-client-class1 http-client-class2

Chore:

  • default value for SecurityDataType Api class generic type

1.6.3

Fixes:

  • Handling of nullable for $ref in OpenAPI 3.0 (issue) Plus based on this issue was fixed most other problems with using required and nullable properties

1.6.2

Fixes:

  • Nullable not included in type definition (issue)

Internal:

  • Update swagger2openapi(6.0.0) dependency

1.6.1

Internal:

  • Update prettier(2.0.2), swagger2openapi(5.4.0) dependencies

1.6.0

Features:

  • Improvenment in optional request params (request body, query params, path params)

Fixes:

  • Fix bug when path request param have the same name as query
  • Fix bug when path request param have the same name as params

Minor/Internal:

  • changed addQueryParams() method
  • up swagger2openapi dependency version to 5.3.4

1.5.0

Features:

  • Add prettier for beautify output typescript api module
  • Support additionalProperties type data additional properties

Fixes:

  • Fix problem with array type definitions without type property(#26)

1.4.1

Fixes:

  • Fix TS problem with addQueryParams Api class method (issue #22, thanks genaby)

1.4.0

Breaking Changes:

  • Rename default typescript output api file name (prev api.ts, now Api.ts) Features:
  • -d, --default-as-success option. Allows to use "default" status codes as success response type
  • -r, --responses option. Response declarations in request rescription This option adds comments of the possible responses from request responses comments Also typings for .catch() callback responses catch types
  • Improve response body type definitions
  • Types for bad responses Changes:
  • [minor] fix jsdoc comments space right comments space

1.3.0

Features:

  • Api module description from schema info api description
  • Generate API type declarations (CLI flag --route-types, thanks azz) route types
  • Ability to not generate clint API class (CLI flag --no-client, thanks azz)

Fixes:

  • Improve response body type definition

Internal:

  • refactored generate and validate test scripts

1.2.6

Fixes: create api without -o option (use default ./ output)

1.2.5

Features: better naming of routes without operationId route naming Changes: rename @security true -> @secure, @duplicate true -> @duplicate Fixes: Support generated swagger schemes from tsoa 3.x with complex types (Omit, Pick, etc)

1.2.4

Features: add .d.ts file into npm package Changes: update help block in CLI Internal: add greenkeeper, update npm keywords

1.2.3

Features: @summary, @description comments at each route Fixes: parsing schema without routes Changes: update documentation Internal: add anyOf, allOf test schemas, slack notifications in CI

1.2.2

Fixes: fix complex types (oneOf, anyOf), required fields of object type was not required

1.2.0

Changes: rename ApiParams to RequestParams, secure module always exist in generated API module, update documentation Fixes: Query params was all required, parse yaml files, typescript minor warnings (;) Internal: test schemas + manual testing, add travis CI/CD

1.1.0

Fixes: catching http errors with use API module

1.0.9

Features: add description to interfaces and their fields Changes: update documentation

1.0.8

Changes: update documentation

1.0.7

Changes: update documentation (+ add logo), add comment about author in generated module

1.0.6

Fixes: route naming, http(s) requests for getting swagger schema, integer enums Changes: include only required files into npm pacakge

1.0.5

Changes: update documentation

1.0.4

Changes: disable linters rules for generated API module Fixes: TS issues in template

1.0.3

Fixes: NodeJS main script cannot been called on Unix* machines Changes: add LICENSE, update README

1.0.2

Changes(Internal): change dependencies

1.0.1

New features: query params, separating routes on submodules, common params in constructor, swagger v2 + yaml parsers Enhancements: better type extracting. Fixes: mustache escaping chars Changes: order of request params, emojis messages in console

1.0.0

Initial project.