From 524d6e84f7efec239f35efad778dc21ca2a8783a Mon Sep 17 00:00:00 2001
From: yangdan <yangdan1@wps.cn>
Date: Mon, 24 Feb 2025 14:51:34 +0800
Subject: [PATCH] feat(template): support custom templates

---
 eslint.config.js                              |   3 +-
 packages/openapi-ts/package.json              |   2 +-
 packages/openapi-ts/src/index.ts              |   2 +-
 packages/openapi-ts/src/initConfigs.ts        |   2 +
 .../src/legacy/handlebars/compiled/client.js  | 457 ------------------
 .../handlebars/compiled/core/ApiError.js      |   7 -
 .../compiled/core/ApiRequestOptions.js        |   7 -
 .../handlebars/compiled/core/ApiResult.js     |   7 -
 .../compiled/core/BaseHttpRequest.js          | 109 -----
 .../compiled/core/CancelablePromise.js        |   7 -
 .../handlebars/compiled/core/HttpRequest.js   | 147 ------
 .../handlebars/compiled/core/OpenAPI.js       | 275 -----------
 .../compiled/core/angular/getHeaders.js       |   7 -
 .../compiled/core/angular/getRequestBody.js   |   7 -
 .../compiled/core/angular/getResponseBody.js  |   7 -
 .../core/angular/getResponseHeader.js         |   7 -
 .../compiled/core/angular/request.js          | 230 ---------
 .../compiled/core/angular/sendRequest.js      |   7 -
 .../compiled/core/axios/getHeaders.js         |   7 -
 .../compiled/core/axios/getRequestBody.js     |   7 -
 .../compiled/core/axios/getResponseBody.js    |   7 -
 .../compiled/core/axios/getResponseHeader.js  |   7 -
 .../handlebars/compiled/core/axios/request.js | 311 ------------
 .../compiled/core/axios/sendRequest.js        |   7 -
 .../compiled/core/fetch/getHeaders.js         |   7 -
 .../compiled/core/fetch/getRequestBody.js     |   7 -
 .../compiled/core/fetch/getResponseBody.js    |   7 -
 .../compiled/core/fetch/getResponseHeader.js  |   7 -
 .../handlebars/compiled/core/fetch/request.js | 321 ------------
 .../compiled/core/fetch/sendRequest.js        |  47 --
 .../compiled/core/functions/base64.js         |   7 -
 .../core/functions/catchErrorCodes.js         |   7 -
 .../compiled/core/functions/getFormData.js    |   7 -
 .../compiled/core/functions/getQueryString.js |   7 -
 .../compiled/core/functions/getUrl.js         |   7 -
 .../compiled/core/functions/isBlob.js         |   7 -
 .../compiled/core/functions/isFormData.js     |   7 -
 .../compiled/core/functions/isString.js       |   7 -
 .../core/functions/isStringWithValue.js       |   7 -
 .../compiled/core/functions/isSuccess.js      |   7 -
 .../compiled/core/functions/resolve.js        |   7 -
 .../handlebars/compiled/core/request.js       | 225 ---------
 .../compiled/core/xhr/getHeaders.js           |   7 -
 .../compiled/core/xhr/getRequestBody.js       |   7 -
 .../compiled/core/xhr/getResponseBody.js      |   7 -
 .../compiled/core/xhr/getResponseHeader.js    |   7 -
 .../handlebars/compiled/core/xhr/request.js   | 311 ------------
 .../compiled/core/xhr/sendRequest.js          |   7 -
 .../src/legacy/handlebars/handlebars.cjs      |  72 ---
 packages/openapi-ts/src/types/config.d.ts     |  88 ++--
 packages/openapi-ts/src/types/env.d.ts        |   4 +
 .../src/utils/__tests__/handlebars.test.ts    |   4 +-
 packages/openapi-ts/src/utils/handlebars.ts   | 378 +++++++--------
 .../handlebars => }/templates/client.hbs      |   0
 .../templates/core/ApiError.hbs               |   0
 .../templates/core/ApiRequestOptions.hbs      |   0
 .../templates/core/ApiResult.hbs              |   0
 .../templates/core/BaseHttpRequest.hbs        |   0
 .../templates/core/CancelablePromise.hbs      |   0
 .../templates/core/HttpRequest.hbs            |   0
 .../templates/core/OpenAPI.hbs                |   0
 .../templates/core/angular/getHeaders.hbs     |   0
 .../templates/core/angular/getRequestBody.hbs |   0
 .../core/angular/getResponseBody.hbs          |   0
 .../core/angular/getResponseHeader.hbs        |   0
 .../templates/core/angular/request.hbs        |   0
 .../templates/core/angular/sendRequest.hbs    |   0
 .../templates/core/axios/getHeaders.hbs       |   0
 .../templates/core/axios/getRequestBody.hbs   |   0
 .../templates/core/axios/getResponseBody.hbs  |   0
 .../core/axios/getResponseHeader.hbs          |   0
 .../templates/core/axios/request.hbs          |   0
 .../templates/core/axios/sendRequest.hbs      |   0
 .../templates/core/fetch/getHeaders.hbs       |   0
 .../templates/core/fetch/getRequestBody.hbs   |   0
 .../templates/core/fetch/getResponseBody.hbs  |   0
 .../core/fetch/getResponseHeader.hbs          |   0
 .../templates/core/fetch/request.hbs          |   0
 .../templates/core/fetch/sendRequest.hbs      |   0
 .../templates/core/functions/base64.hbs       |   0
 .../core/functions/catchErrorCodes.hbs        |   0
 .../templates/core/functions/getFormData.hbs  |   0
 .../core/functions/getQueryString.hbs         |   0
 .../templates/core/functions/getUrl.hbs       |   0
 .../templates/core/functions/isBlob.hbs       |   0
 .../templates/core/functions/isFormData.hbs   |   0
 .../templates/core/functions/isString.hbs     |   0
 .../core/functions/isStringWithValue.hbs      |   0
 .../templates/core/functions/isSuccess.hbs    |   0
 .../templates/core/functions/resolve.hbs      |   0
 .../templates/core/request.hbs                |   0
 .../templates/core/xhr/getHeaders.hbs         |   0
 .../templates/core/xhr/getRequestBody.hbs     |   0
 .../templates/core/xhr/getResponseBody.hbs    |   0
 .../templates/core/xhr/getResponseHeader.hbs  |   0
 .../templates/core/xhr/request.hbs            |   0
 .../templates/core/xhr/sendRequest.hbs        |   0
 97 files changed, 234 insertions(+), 2992 deletions(-)
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/client.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/ApiError.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/ApiRequestOptions.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/ApiResult.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/BaseHttpRequest.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/CancelablePromise.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/HttpRequest.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/OpenAPI.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/getHeaders.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/getRequestBody.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/getResponseBody.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/getResponseHeader.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/request.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/sendRequest.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/getHeaders.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/getRequestBody.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/getResponseBody.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/getResponseHeader.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/request.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/sendRequest.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/getHeaders.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/getRequestBody.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/getResponseBody.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/getResponseHeader.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/request.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/sendRequest.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/base64.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/catchErrorCodes.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/getFormData.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/getQueryString.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/getUrl.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isBlob.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isFormData.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isString.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isStringWithValue.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isSuccess.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/resolve.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/request.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/getHeaders.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/getRequestBody.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/getResponseBody.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/getResponseHeader.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/request.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/sendRequest.js
 delete mode 100644 packages/openapi-ts/src/legacy/handlebars/handlebars.cjs
 create mode 100644 packages/openapi-ts/src/types/env.d.ts
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/client.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/ApiError.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/ApiRequestOptions.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/ApiResult.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/BaseHttpRequest.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/CancelablePromise.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/HttpRequest.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/OpenAPI.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/angular/getHeaders.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/angular/getRequestBody.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/angular/getResponseBody.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/angular/getResponseHeader.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/angular/request.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/angular/sendRequest.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/axios/getHeaders.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/axios/getRequestBody.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/axios/getResponseBody.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/axios/getResponseHeader.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/axios/request.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/axios/sendRequest.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/fetch/getHeaders.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/fetch/getRequestBody.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/fetch/getResponseBody.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/fetch/getResponseHeader.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/fetch/request.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/fetch/sendRequest.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/functions/base64.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/functions/catchErrorCodes.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/functions/getFormData.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/functions/getQueryString.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/functions/getUrl.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/functions/isBlob.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/functions/isFormData.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/functions/isString.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/functions/isStringWithValue.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/functions/isSuccess.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/functions/resolve.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/request.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/xhr/getHeaders.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/xhr/getRequestBody.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/xhr/getResponseBody.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/xhr/getResponseHeader.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/xhr/request.hbs (100%)
 rename packages/openapi-ts/{src/legacy/handlebars => }/templates/core/xhr/sendRequest.hbs (100%)

diff --git a/eslint.config.js b/eslint.config.js
index 57124fefd..eda9487eb 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -66,8 +66,7 @@ export default tseslint.config(
       '**/dist/',
       '**/node_modules/',
       'temp/',
-      'packages/openapi-ts/src/legacy/handlebars/compiled/**/*.js',
-      'packages/openapi-ts/src/legacy/handlebars/templates/**/*.hbs',
+      'packages/openapi-ts/templates/**/*.hbs',
       '**/test/e2e/generated/',
       '**/test/generated/',
       '**/__snapshots__/',
diff --git a/packages/openapi-ts/package.json b/packages/openapi-ts/package.json
index af83e36d5..a2bcf2692 100644
--- a/packages/openapi-ts/package.json
+++ b/packages/openapi-ts/package.json
@@ -60,13 +60,13 @@
   "files": [
     "bin",
     "dist",
+    "templates",
     "LICENSE.md"
   ],
   "scripts": {
     "build": "tsup && pnpm check-exports",
     "check-exports": "attw --pack .",
     "dev": "tsup --watch",
-    "handlebars": "node src/legacy/handlebars/handlebars.cjs",
     "prepublishOnly": "pnpm build",
     "test:coverage": "vitest run --config vitest.config.unit.ts --coverage",
     "test:e2e": "vitest run --config vitest.config.e2e.ts",
diff --git a/packages/openapi-ts/src/index.ts b/packages/openapi-ts/src/index.ts
index 21bd98fc3..2d28c529d 100644
--- a/packages/openapi-ts/src/index.ts
+++ b/packages/openapi-ts/src/index.ts
@@ -29,7 +29,7 @@ export const createClient = async (
     Performance.end('config');
 
     Performance.start('handlebars');
-    const templates = registerHandlebarTemplates();
+    const templates = await registerHandlebarTemplates();
     Performance.end('handlebars');
 
     const clients = await Promise.all(
diff --git a/packages/openapi-ts/src/initConfigs.ts b/packages/openapi-ts/src/initConfigs.ts
index d0e7d4a76..ba92e7645 100644
--- a/packages/openapi-ts/src/initConfigs.ts
+++ b/packages/openapi-ts/src/initConfigs.ts
@@ -267,6 +267,7 @@ export const initConfigs = async (
       exportCore = true,
       name,
       request,
+      templatesPath,
       useOptions = true,
     } = userConfig;
 
@@ -311,6 +312,7 @@ export const initConfigs = async (
       name,
       output,
       request,
+      templatesPath,
       useOptions,
       watch: getWatch({ ...userConfig, input }),
     });
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/client.js b/packages/openapi-ts/src/legacy/handlebars/compiled/client.js
deleted file mode 100644
index 66155fce4..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/client.js
+++ /dev/null
@@ -1,457 +0,0 @@
-export default {
-  1: function (container, depth0, helpers, partials, data) {
-    return "import { NgModule} from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\n\nimport { AngularHttpRequest } from './core/AngularHttpRequest';\nimport { BaseHttpRequest } from './core/BaseHttpRequest';\nimport type { OpenAPIConfig } from './core/OpenAPI';\nimport { OpenAPI } from './core/OpenAPI';\nimport { Interceptors } from './core/OpenAPI';\n";
-  },
-  3: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      alias1 = container.strict,
-      alias2 = container.lambda;
-
-    return (
-      "import type { BaseHttpRequest } from './core/BaseHttpRequest';\nimport type { OpenAPIConfig } from './core/OpenAPI';\nimport { Interceptors } from './core/OpenAPI';\nimport { " +
-      ((stack1 = alias2(
-        alias1(depth0, 'httpRequest', {
-          start: { line: 14, column: 12 },
-          end: { line: 14, column: 23 },
-        }),
-        depth0,
-      )) != null
-        ? stack1
-        : '') +
-      " } from './core/" +
-      ((stack1 = alias2(
-        alias1(depth0, 'httpRequest', {
-          start: { line: 14, column: 45 },
-          end: { line: 14, column: 56 },
-        }),
-        depth0,
-      )) != null
-        ? stack1
-        : '') +
-      "';\n"
-    );
-  },
-  5: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (stack1 = lookupProperty(helpers, 'each').call(
-      depth0 != null ? depth0 : container.nullContext || {},
-      lookupProperty(depth0, 'services'),
-      {
-        name: 'each',
-        hash: {},
-        fn: container.program(6, data, 0),
-        inverse: container.noop,
-        data: data,
-        loc: { start: { line: 18, column: 0 }, end: { line: 20, column: 9 } },
-      },
-    )) != null
-      ? stack1
-      : '';
-  },
-  6: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (
-      'import { ' +
-      ((stack1 = lookupProperty(helpers, 'transformServiceName').call(
-        depth0 != null ? depth0 : container.nullContext || {},
-        lookupProperty(depth0, 'name'),
-        {
-          name: 'transformServiceName',
-          hash: {},
-          data: data,
-          loc: {
-            start: { line: 19, column: 9 },
-            end: { line: 19, column: 40 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      " } from './sdk.gen';\n"
-    );
-  },
-  8: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      alias1 = container.strict,
-      alias2 = container.lambda,
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (
-      "@NgModule({\n	imports: [HttpClientModule],\n	providers: [\n		{\n			provide: OpenAPI,\n			useValue: {\n				BASE: OpenAPI?.BASE ?? '" +
-      ((stack1 = alias2(
-        alias1(depth0, 'server', {
-          start: { line: 30, column: 31 },
-          end: { line: 30, column: 37 },
-        }),
-        depth0,
-      )) != null
-        ? stack1
-        : '') +
-      "',\n				VERSION: OpenAPI?.VERSION ?? '" +
-      ((stack1 = alias2(
-        alias1(depth0, 'version', {
-          start: { line: 31, column: 37 },
-          end: { line: 31, column: 44 },
-        }),
-        depth0,
-      )) != null
-        ? stack1
-        : '') +
-      "',\n				WITH_CREDENTIALS: OpenAPI?.WITH_CREDENTIALS ?? false,\n				CREDENTIALS: OpenAPI?.CREDENTIALS ?? 'include',\n				TOKEN: OpenAPI?.TOKEN,\n				USERNAME: OpenAPI?.USERNAME,\n				PASSWORD: OpenAPI?.PASSWORD,\n				HEADERS: OpenAPI?.HEADERS,\n				ENCODE_PATH: OpenAPI?.ENCODE_PATH,\n				interceptors: {\n					response: OpenAPI?.interceptors?.response ?? new Interceptors(),\n				},\n			} as OpenAPIConfig,\n		},\n		{\n			provide: BaseHttpRequest,\n			useClass: AngularHttpRequest,\n		},\n" +
-      ((stack1 = lookupProperty(helpers, 'each').call(
-        depth0 != null ? depth0 : container.nullContext || {},
-        lookupProperty(depth0, 'services'),
-        {
-          name: 'each',
-          hash: {},
-          fn: container.program(9, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: {
-            start: { line: 48, column: 2 },
-            end: { line: 50, column: 11 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '	]\n})\nexport class ' +
-      ((stack1 = alias2(
-        alias1(
-          lookupProperty(lookupProperty(data, 'root'), '$config'),
-          'name',
-          { start: { line: 53, column: 16 }, end: { line: 53, column: 34 } },
-        ),
-        depth0,
-      )) != null
-        ? stack1
-        : '') +
-      ' {}\n'
-    );
-  },
-  9: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (
-      '		' +
-      ((stack1 = lookupProperty(helpers, 'transformServiceName').call(
-        depth0 != null ? depth0 : container.nullContext || {},
-        lookupProperty(depth0, 'name'),
-        {
-          name: 'transformServiceName',
-          hash: {},
-          data: data,
-          loc: {
-            start: { line: 49, column: 2 },
-            end: { line: 49, column: 33 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ',\n'
-    );
-  },
-  11: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      alias1 = container.strict,
-      alias2 = container.lambda,
-      alias3 = depth0 != null ? depth0 : container.nullContext || {},
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (
-      'type HttpRequestConstructor = new (config: OpenAPIConfig) => BaseHttpRequest;\n\nexport class ' +
-      ((stack1 = alias2(
-        alias1(
-          lookupProperty(lookupProperty(data, 'root'), '$config'),
-          'name',
-          { start: { line: 57, column: 16 }, end: { line: 57, column: 34 } },
-        ),
-        depth0,
-      )) != null
-        ? stack1
-        : '') +
-      ' {\n\n' +
-      ((stack1 = lookupProperty(helpers, 'each').call(
-        alias3,
-        lookupProperty(depth0, 'services'),
-        {
-          name: 'each',
-          hash: {},
-          fn: container.program(12, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: {
-            start: { line: 59, column: 1 },
-            end: { line: 61, column: 10 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n	public readonly request: BaseHttpRequest;\n\n	constructor(config?: Partial<OpenAPIConfig>, HttpRequest: HttpRequestConstructor = ' +
-      ((stack1 = alias2(
-        alias1(depth0, 'httpRequest', {
-          start: { line: 65, column: 87 },
-          end: { line: 65, column: 98 },
-        }),
-        depth0,
-      )) != null
-        ? stack1
-        : '') +
-      ") {\n		this.request = new HttpRequest({\n			BASE: config?.BASE ?? '" +
-      ((stack1 = alias2(
-        alias1(depth0, 'server', {
-          start: { line: 67, column: 29 },
-          end: { line: 67, column: 35 },
-        }),
-        depth0,
-      )) != null
-        ? stack1
-        : '') +
-      "',\n			VERSION: config?.VERSION ?? '" +
-      ((stack1 = alias2(
-        alias1(depth0, 'version', {
-          start: { line: 68, column: 35 },
-          end: { line: 68, column: 42 },
-        }),
-        depth0,
-      )) != null
-        ? stack1
-        : '') +
-      "',\n			WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false,\n			CREDENTIALS: config?.CREDENTIALS ?? 'include',\n			TOKEN: config?.TOKEN,\n			USERNAME: config?.USERNAME,\n			PASSWORD: config?.PASSWORD,\n			HEADERS: config?.HEADERS,\n			ENCODE_PATH: config?.ENCODE_PATH,\n			interceptors: {\n				request: config?.interceptors?.request ?? new Interceptors(),\n				response: config?.interceptors?.response ?? new Interceptors(),\n      },\n		});\n\n" +
-      ((stack1 = lookupProperty(helpers, 'each').call(
-        alias3,
-        lookupProperty(depth0, 'services'),
-        {
-          name: 'each',
-          hash: {},
-          fn: container.program(14, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: {
-            start: { line: 82, column: 2 },
-            end: { line: 84, column: 11 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '	}\n}\n'
-    );
-  },
-  12: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      alias1 = depth0 != null ? depth0 : container.nullContext || {},
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (
-      '	public readonly ' +
-      ((stack1 = lookupProperty(helpers, 'camelCase').call(
-        alias1,
-        lookupProperty(depth0, 'name'),
-        {
-          name: 'camelCase',
-          hash: {},
-          data: data,
-          loc: {
-            start: { line: 60, column: 17 },
-            end: { line: 60, column: 37 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ': ' +
-      ((stack1 = lookupProperty(helpers, 'transformServiceName').call(
-        alias1,
-        lookupProperty(depth0, 'name'),
-        {
-          name: 'transformServiceName',
-          hash: {},
-          data: data,
-          loc: {
-            start: { line: 60, column: 39 },
-            end: { line: 60, column: 70 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ';\n'
-    );
-  },
-  14: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      alias1 = depth0 != null ? depth0 : container.nullContext || {},
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (
-      '		this.' +
-      ((stack1 = lookupProperty(helpers, 'camelCase').call(
-        alias1,
-        lookupProperty(depth0, 'name'),
-        {
-          name: 'camelCase',
-          hash: {},
-          data: data,
-          loc: {
-            start: { line: 83, column: 7 },
-            end: { line: 83, column: 27 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ' = new ' +
-      ((stack1 = lookupProperty(helpers, 'transformServiceName').call(
-        alias1,
-        lookupProperty(depth0, 'name'),
-        {
-          name: 'transformServiceName',
-          hash: {},
-          data: data,
-          loc: {
-            start: { line: 83, column: 34 },
-            end: { line: 83, column: 65 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '(this.request);\n'
-    );
-  },
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      alias1 = depth0 != null ? depth0 : container.nullContext || {},
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/angular',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(1, data, 0),
-          inverse: container.program(3, data, 0),
-          data: data,
-          loc: { start: { line: 1, column: 0 }, end: { line: 15, column: 11 } },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n' +
-      ((stack1 = lookupProperty(helpers, 'if').call(
-        alias1,
-        lookupProperty(depth0, 'services'),
-        {
-          name: 'if',
-          hash: {},
-          fn: container.program(5, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: { start: { line: 17, column: 0 }, end: { line: 21, column: 7 } },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n' +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/angular',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(8, data, 0),
-          inverse: container.program(11, data, 0),
-          data: data,
-          loc: {
-            start: { line: 23, column: 0 },
-            end: { line: 87, column: 11 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '')
-    );
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/ApiError.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/ApiError.js
deleted file mode 100644
index 4cb06ccc6..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/ApiError.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "import type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { ApiResult } from './ApiResult';\n\nexport class ApiError extends Error {\n	public readonly url: string;\n	public readonly status: number;\n	public readonly statusText: string;\n	public readonly body: unknown;\n	public readonly request: ApiRequestOptions;\n\n	constructor(request: ApiRequestOptions, response: ApiResult, message: string) {\n		super(message);\n\n		this.name = 'ApiError';\n		this.url = response.url;\n		this.status = response.status;\n		this.statusText = response.statusText;\n		this.body = response.body;\n		this.request = request;\n	}\n}";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/ApiRequestOptions.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/ApiRequestOptions.js
deleted file mode 100644
index b63eb8a02..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/ApiRequestOptions.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export type ApiRequestOptions<T = unknown> = {\n	readonly body?: any;\n	readonly cookies?: Record<string, unknown>;\n	readonly errors?: Record<number | string, string>;\n	readonly formData?: Record<string, unknown> | any[] | Blob | File;\n	readonly headers?: Record<string, unknown>;\n	readonly mediaType?: string;\n	readonly method:\n		| 'DELETE'\n		| 'GET'\n		| 'HEAD'\n		| 'OPTIONS'\n		| 'PATCH'\n		| 'POST'\n		| 'PUT';\n	readonly path?: Record<string, unknown>;\n	readonly query?: Record<string, unknown>;\n	readonly responseHeader?: string;\n	readonly responseTransformer?: (data: unknown) => Promise<T>;\n	readonly url: string;\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/ApiResult.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/ApiResult.js
deleted file mode 100644
index 6d87d8336..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/ApiResult.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return 'export type ApiResult<TData = any> = {\n	readonly body: TData;\n	readonly ok: boolean;\n	readonly status: number;\n	readonly statusText: string;\n	readonly url: string;\n};';
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/BaseHttpRequest.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/BaseHttpRequest.js
deleted file mode 100644
index 2d4bf78e2..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/BaseHttpRequest.js
+++ /dev/null
@@ -1,109 +0,0 @@
-export default {
-  1: function (container, depth0, helpers, partials, data) {
-    return "import type { HttpClient } from '@angular/common/http';\nimport type { Observable } from 'rxjs';\n\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { OpenAPIConfig } from './OpenAPI';\n";
-  },
-  3: function (container, depth0, helpers, partials, data) {
-    return "import type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { CancelablePromise } from './CancelablePromise';\nimport type { OpenAPIConfig } from './OpenAPI';\n";
-  },
-  5: function (container, depth0, helpers, partials, data) {
-    return '	constructor(\n		public readonly config: OpenAPIConfig,\n		public readonly http: HttpClient,\n	) {}\n';
-  },
-  7: function (container, depth0, helpers, partials, data) {
-    return '	constructor(public readonly config: OpenAPIConfig) {}\n';
-  },
-  9: function (container, depth0, helpers, partials, data) {
-    return '	public abstract request<T>(options: ApiRequestOptions<T>): Observable<T>;\n';
-  },
-  11: function (container, depth0, helpers, partials, data) {
-    return '	public abstract request<T>(options: ApiRequestOptions<T>): CancelablePromise<T>;\n';
-  },
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      alias1 = depth0 != null ? depth0 : container.nullContext || {},
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/angular',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(1, data, 0),
-          inverse: container.program(3, data, 0),
-          data: data,
-          loc: { start: { line: 1, column: 0 }, end: { line: 11, column: 11 } },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\nexport abstract class BaseHttpRequest {\n\n' +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/angular',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(5, data, 0),
-          inverse: container.program(7, data, 0),
-          data: data,
-          loc: {
-            start: { line: 15, column: 1 },
-            end: { line: 22, column: 12 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n' +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/angular',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(9, data, 0),
-          inverse: container.program(11, data, 0),
-          data: data,
-          loc: {
-            start: { line: 24, column: 1 },
-            end: { line: 28, column: 12 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '}'
-    );
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/CancelablePromise.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/CancelablePromise.js
deleted file mode 100644
index b2154cde4..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/CancelablePromise.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export class CancelError extends Error {\n	constructor(message: string) {\n		super(message);\n		this.name = 'CancelError';\n	}\n\n	public get isCancelled(): boolean {\n		return true;\n	}\n}\n\nexport interface OnCancel {\n	readonly isResolved: boolean;\n	readonly isRejected: boolean;\n	readonly isCancelled: boolean;\n\n	(cancelHandler: () => void): void;\n}\n\nexport class CancelablePromise<T> implements Promise<T> {\n	private _isResolved: boolean;\n	private _isRejected: boolean;\n	private _isCancelled: boolean;\n	readonly cancelHandlers: (() => void)[];\n	readonly promise: Promise<T>;\n	private _resolve?: (value: T | PromiseLike<T>) => void;\n	private _reject?: (reason?: unknown) => void;\n\n	constructor(\n		executor: (\n			resolve: (value: T | PromiseLike<T>) => void,\n			reject: (reason?: unknown) => void,\n			onCancel: OnCancel\n		) => void\n	) {\n		this._isResolved = false;\n		this._isRejected = false;\n		this._isCancelled = false;\n		this.cancelHandlers = [];\n		this.promise = new Promise<T>((resolve, reject) => {\n			this._resolve = resolve;\n			this._reject = reject;\n\n			const onResolve = (value: T | PromiseLike<T>): void => {\n				if (this._isResolved || this._isRejected || this._isCancelled) {\n					return;\n				}\n				this._isResolved = true;\n				if (this._resolve) this._resolve(value);\n			};\n\n			const onReject = (reason?: unknown): void => {\n				if (this._isResolved || this._isRejected || this._isCancelled) {\n					return;\n				}\n				this._isRejected = true;\n				if (this._reject) this._reject(reason);\n			};\n\n			const onCancel = (cancelHandler: () => void): void => {\n				if (this._isResolved || this._isRejected || this._isCancelled) {\n					return;\n				}\n				this.cancelHandlers.push(cancelHandler);\n			};\n\n			Object.defineProperty(onCancel, 'isResolved', {\n				get: (): boolean => this._isResolved,\n			});\n\n			Object.defineProperty(onCancel, 'isRejected', {\n				get: (): boolean => this._isRejected,\n			});\n\n			Object.defineProperty(onCancel, 'isCancelled', {\n				get: (): boolean => this._isCancelled,\n			});\n\n			return executor(onResolve, onReject, onCancel as OnCancel);\n		});\n	}\n\n	get [Symbol.toStringTag]() {\n		return \"Cancellable Promise\";\n	}\n\n	public then<TResult1 = T, TResult2 = never>(\n		onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n		onRejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n	): Promise<TResult1 | TResult2> {\n		return this.promise.then(onFulfilled, onRejected);\n	}\n\n	public catch<TResult = never>(\n		onRejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | null\n	): Promise<T | TResult> {\n		return this.promise.catch(onRejected);\n	}\n\n	public finally(onFinally?: (() => void) | null): Promise<T> {\n		return this.promise.finally(onFinally);\n	}\n\n	public cancel(): void {\n		if (this._isResolved || this._isRejected || this._isCancelled) {\n			return;\n		}\n		this._isCancelled = true;\n		if (this.cancelHandlers.length) {\n			try {\n				for (const cancelHandler of this.cancelHandlers) {\n					cancelHandler();\n				}\n			} catch (error) {\n				console.warn('Cancellation threw an error', error);\n				return;\n			}\n		}\n		this.cancelHandlers.length = 0;\n		if (this._reject) this._reject(new CancelError('Request aborted'));\n	}\n\n	public get isCancelled(): boolean {\n		return this._isCancelled;\n	}\n}";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/HttpRequest.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/HttpRequest.js
deleted file mode 100644
index de89e82e7..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/HttpRequest.js
+++ /dev/null
@@ -1,147 +0,0 @@
-export default {
-  1: function (container, depth0, helpers, partials, data) {
-    return "import { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport type { Observable } from 'rxjs';\n\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport { BaseHttpRequest } from './BaseHttpRequest';\nimport type { OpenAPIConfig } from './OpenAPI';\nimport { OpenAPI } from './OpenAPI';\nimport { request as __request } from './request';\n";
-  },
-  3: function (container, depth0, helpers, partials, data) {
-    return "import type { ApiRequestOptions } from './ApiRequestOptions';\nimport { BaseHttpRequest } from './BaseHttpRequest';\nimport type { CancelablePromise } from './CancelablePromise';\nimport type { OpenAPIConfig } from './OpenAPI';\nimport { request as __request } from './request';\n";
-  },
-  5: function (container, depth0, helpers, partials, data) {
-    return '@Injectable()\n';
-  },
-  7: function (container, depth0, helpers, partials, data) {
-    return '	constructor(\n		@Inject(OpenAPI)\n		config: OpenAPIConfig,\n		http: HttpClient,\n	) {\n		super(config, http);\n	}\n';
-  },
-  9: function (container, depth0, helpers, partials, data) {
-    return '	constructor(config: OpenAPIConfig) {\n		super(config);\n	}\n';
-  },
-  11: function (container, depth0, helpers, partials, data) {
-    return '	/**\n	 * Request method\n	 * @param options The request options from the service\n	 * @returns Observable<T>\n	 * @throws ApiError\n	 */\n	public override request<T>(options: ApiRequestOptions<T>): Observable<T> {\n		return __request(this.config, this.http, options);\n	}\n';
-  },
-  13: function (container, depth0, helpers, partials, data) {
-    return '	/**\n	 * Request method\n	 * @param options The request options from the service\n	 * @returns CancelablePromise<T>\n	 * @throws ApiError\n	 */\n	public override request<T>(options: ApiRequestOptions<T>): CancelablePromise<T> {\n		return __request(this.config, options);\n	}\n';
-  },
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      alias1 = depth0 != null ? depth0 : container.nullContext || {},
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/angular',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(1, data, 0),
-          inverse: container.program(3, data, 0),
-          data: data,
-          loc: { start: { line: 1, column: 0 }, end: { line: 17, column: 11 } },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n' +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/angular',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(5, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: {
-            start: { line: 19, column: 0 },
-            end: { line: 21, column: 11 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      'export class ' +
-      ((stack1 = container.lambda(
-        container.strict(depth0, 'httpRequest', {
-          start: { line: 22, column: 15 },
-          end: { line: 22, column: 26 },
-        }),
-        depth0,
-      )) != null
-        ? stack1
-        : '') +
-      ' extends BaseHttpRequest {\n\n' +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/angular',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(7, data, 0),
-          inverse: container.program(9, data, 0),
-          data: data,
-          loc: {
-            start: { line: 24, column: 1 },
-            end: { line: 36, column: 12 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n' +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/angular',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(11, data, 0),
-          inverse: container.program(13, data, 0),
-          data: data,
-          loc: {
-            start: { line: 38, column: 1 },
-            end: { line: 58, column: 12 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '}'
-    );
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/OpenAPI.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/OpenAPI.js
deleted file mode 100644
index 6fef4a7c3..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/OpenAPI.js
+++ /dev/null
@@ -1,275 +0,0 @@
-export default {
-  1: function (container, depth0, helpers, partials, data) {
-    return "import type { HttpResponse } from '@angular/common/http';\n";
-  },
-  3: function (container, depth0, helpers, partials, data) {
-    return "import type { AxiosRequestConfig, AxiosResponse } from 'axios';\n";
-  },
-  5: function (container, depth0, helpers, partials, data) {
-    return "import type { RequestInit, Response } from 'node-fetch';\n";
-  },
-  7: function (container, depth0, helpers, partials, data) {
-    return '		response: Interceptors<HttpResponse<any>>;\n';
-  },
-  9: function (container, depth0, helpers, partials, data) {
-    return '		request: Interceptors<AxiosRequestConfig>;\n		response: Interceptors<AxiosResponse>;\n';
-  },
-  11: function (container, depth0, helpers, partials, data) {
-    return '		request: Interceptors<RequestInit>;\n		response: Interceptors<Response>;\n';
-  },
-  13: function (container, depth0, helpers, partials, data) {
-    return '		request: Interceptors<XMLHttpRequest>;\n		response: Interceptors<XMLHttpRequest>;\n';
-  },
-  15: function (container, depth0, helpers, partials, data) {
-    return '		request: new Interceptors(),\n';
-  },
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      alias1 = depth0 != null ? depth0 : container.nullContext || {},
-      alias2 = container.strict,
-      alias3 = container.lambda,
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/angular',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(1, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: { start: { line: 1, column: 0 }, end: { line: 3, column: 11 } },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/axios',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(3, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: { start: { line: 4, column: 0 }, end: { line: 6, column: 11 } },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/node',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(5, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: { start: { line: 7, column: 0 }, end: { line: 9, column: 11 } },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      "import type { ApiRequestOptions } from './ApiRequestOptions';\n\ntype Headers = Record<string, string>;\ntype Middleware<T> = (value: T) => T | Promise<T>;\ntype Resolver<T> = (options: ApiRequestOptions<T>) => Promise<T>;\n\nexport class Interceptors<T> {\n  _fns: Middleware<T>[];\n\n  constructor() {\n    this._fns = [];\n  }\n\n  eject(fn: Middleware<T>): void {\n    const index = this._fns.indexOf(fn);\n    if (index !== -1) {\n      this._fns = [...this._fns.slice(0, index), ...this._fns.slice(index + 1)];\n    }\n  }\n\n  use(fn: Middleware<T>): void {\n    this._fns = [...this._fns, fn];\n  }\n}\n\nexport type OpenAPIConfig = {\n	BASE: string;\n	CREDENTIALS: 'include' | 'omit' | 'same-origin';\n	ENCODE_PATH?: ((path: string) => string) | undefined;\n	HEADERS?: Headers | Resolver<Headers> | undefined;\n	PASSWORD?: string | Resolver<string> | undefined;\n	TOKEN?: string | Resolver<string> | undefined;\n	USERNAME?: string | Resolver<string> | undefined;\n	VERSION: string;\n	WITH_CREDENTIALS: boolean;\n	interceptors: {\n" +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/angular',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(7, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: {
-            start: { line: 46, column: 2 },
-            end: { line: 48, column: 13 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/axios',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(9, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: {
-            start: { line: 49, column: 2 },
-            end: { line: 52, column: 13 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/fetch',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(11, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: {
-            start: { line: 53, column: 2 },
-            end: { line: 56, column: 13 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/node',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(11, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: {
-            start: { line: 57, column: 2 },
-            end: { line: 60, column: 13 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/xhr',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(13, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: {
-            start: { line: 61, column: 2 },
-            end: { line: 64, column: 13 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      "	};\n};\n\nexport const OpenAPI: OpenAPIConfig = {\n	BASE: '" +
-      ((stack1 = alias3(
-        alias2(depth0, 'server', {
-          start: { line: 69, column: 11 },
-          end: { line: 69, column: 17 },
-        }),
-        depth0,
-      )) != null
-        ? stack1
-        : '') +
-      "',\n	CREDENTIALS: 'include',\n	ENCODE_PATH: undefined,\n	HEADERS: undefined,\n	PASSWORD: undefined,\n	TOKEN: undefined,\n	USERNAME: undefined,\n	VERSION: '" +
-      ((stack1 = alias3(
-        alias2(depth0, 'version', {
-          start: { line: 76, column: 14 },
-          end: { line: 76, column: 21 },
-        }),
-        depth0,
-      )) != null
-        ? stack1
-        : '') +
-      "',\n	WITH_CREDENTIALS: false,\n	interceptors: {\n" +
-      ((stack1 = lookupProperty(helpers, 'notEquals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/angular',
-        {
-          name: 'notEquals',
-          hash: {},
-          fn: container.program(15, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: {
-            start: { line: 79, column: 2 },
-            end: { line: 81, column: 16 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '		response: new Interceptors(),\n	},\n};'
-    );
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/getHeaders.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/getHeaders.js
deleted file mode 100644
index 107171f6b..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/getHeaders.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export const getHeaders = <T>(config: OpenAPIConfig, options: ApiRequestOptions<T>): Observable<HttpHeaders> => {\n	return forkJoin({\n		// @ts-ignore\n		token: resolve(options, config.TOKEN),\n		// @ts-ignore\n		username: resolve(options, config.USERNAME),\n		// @ts-ignore\n		password: resolve(options, config.PASSWORD),\n		// @ts-ignore\n		additionalHeaders: resolve(options, config.HEADERS),\n	}).pipe(\n		map(({ token, username, password, additionalHeaders }) => {\n			const headers = Object.entries({\n				Accept: 'application/json',\n				...additionalHeaders,\n				...options.headers,\n			})\n				.filter(([, value]) => value !== undefined && value !== null)\n				.reduce((headers, [key, value]) => ({\n					...headers,\n					[key]: String(value),\n				}), {} as Record<string, string>);\n\n			if (isStringWithValue(token)) {\n				headers['Authorization'] = `Bearer ${token}`;\n			}\n\n			if (isStringWithValue(username) && isStringWithValue(password)) {\n				const credentials = base64(`${username}:${password}`);\n				headers['Authorization'] = `Basic ${credentials}`;\n			}\n\n			if (options.body !== undefined) {\n				if (options.mediaType) {\n					headers['Content-Type'] = options.mediaType;\n				} else if (isBlob(options.body)) {\n					headers['Content-Type'] = options.body.type || 'application/octet-stream';\n				} else if (isString(options.body)) {\n					headers['Content-Type'] = 'text/plain';\n				} else if (!isFormData(options.body)) {\n					headers['Content-Type'] = 'application/json';\n				}\n			}\n\n			return new HttpHeaders(headers);\n		}),\n	);\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/getRequestBody.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/getRequestBody.js
deleted file mode 100644
index 180b22abe..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/getRequestBody.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export const getRequestBody = (options: ApiRequestOptions): unknown => {\n	if (options.body) {\n		if (options.mediaType?.includes('application/json') || options.mediaType?.includes('+json')) {\n			return JSON.stringify(options.body);\n		} else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) {\n			return options.body;\n		} else {\n			return JSON.stringify(options.body);\n		}\n	}\n	return undefined;\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/getResponseBody.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/getResponseBody.js
deleted file mode 100644
index 42fe81e07..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/getResponseBody.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return 'export const getResponseBody = <T>(response: HttpResponse<T>): T | undefined => {\n	if (response.status !== 204 && response.body !== null) {\n		return response.body;\n	}\n	return undefined;\n};';
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/getResponseHeader.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/getResponseHeader.js
deleted file mode 100644
index 6fdbaff37..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/getResponseHeader.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return 'export const getResponseHeader = <T>(response: HttpResponse<T>, responseHeader?: string): string | undefined => {\n	if (responseHeader) {\n		const value = response.headers.get(responseHeader);\n		if (isString(value)) {\n			return value;\n		}\n	}\n	return undefined;\n};';
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/request.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/request.js
deleted file mode 100644
index f9fe239aa..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/request.js
+++ /dev/null
@@ -1,230 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (
-      "import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport type { HttpResponse, HttpErrorResponse } from '@angular/common/http';\nimport { forkJoin, of, throwError } from 'rxjs';\nimport { catchError, map, switchMap } from 'rxjs/operators';\nimport type { Observable } from 'rxjs';\n\nimport { ApiError } from './ApiError';\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { ApiResult } from './ApiResult';\nimport type { OpenAPIConfig } from './OpenAPI';\n\n" +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isString'),
-        depth0,
-        {
-          name: 'functions/isString',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isStringWithValue'),
-        depth0,
-        {
-          name: 'functions/isStringWithValue',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isBlob'),
-        depth0,
-        {
-          name: 'functions/isBlob',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isFormData'),
-        depth0,
-        {
-          name: 'functions/isFormData',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/base64'),
-        depth0,
-        {
-          name: 'functions/base64',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/getQueryString'),
-        depth0,
-        {
-          name: 'functions/getQueryString',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/getUrl'),
-        depth0,
-        {
-          name: 'functions/getUrl',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/getFormData'),
-        depth0,
-        {
-          name: 'functions/getFormData',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/resolve'),
-        depth0,
-        {
-          name: 'functions/resolve',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'angular/getHeaders'),
-        depth0,
-        {
-          name: 'angular/getHeaders',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'angular/getRequestBody'),
-        depth0,
-        {
-          name: 'angular/getRequestBody',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'angular/sendRequest'),
-        depth0,
-        {
-          name: 'angular/sendRequest',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'angular/getResponseHeader'),
-        depth0,
-        {
-          name: 'angular/getResponseHeader',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'angular/getResponseBody'),
-        depth0,
-        {
-          name: 'angular/getResponseBody',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/catchErrorCodes'),
-        depth0,
-        {
-          name: 'functions/catchErrorCodes',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param http The Angular HTTP client\n * @param options The request options from the service\n * @returns Observable<T>\n * @throws ApiError\n */\nexport const request = <T>(config: OpenAPIConfig, http: HttpClient, options: ApiRequestOptions<T>): Observable<T> => {\n	const url = getUrl(config, options);\n	const formData = getFormData(options);\n	const body = getRequestBody(options);\n\n	return getHeaders(config, options).pipe(\n		switchMap(headers => {\n			return sendRequest<T>(config, options, http, url, body, formData, headers);\n		}),\n		switchMap(async response => {\n			for (const fn of config.interceptors.response._fns) {\n				response = await fn(response);\n			}\n			const responseBody = getResponseBody(response);\n			const responseHeader = getResponseHeader(response, options.responseHeader);\n\n			let transformedBody = responseBody;\n			if (options.responseTransformer && response.ok) {\n				transformedBody = await options.responseTransformer(responseBody)\n			}\n\n			return {\n				url,\n				ok: response.ok,\n				status: response.status,\n				statusText: response.statusText,\n				body: responseHeader ?? transformedBody,\n			} as ApiResult;\n		}),\n		catchError((error: HttpErrorResponse) => {\n			if (!error.status) {\n				return throwError(() => error);\n			}\n			return of({\n				url,\n				ok: error.ok,\n				status: error.status,\n				statusText: error.statusText,\n				body: error.error ?? error.statusText,\n			} as ApiResult);\n		}),\n		map(result => {\n			catchErrorCodes(options, result);\n			return result.body as T;\n		}),\n		catchError((error: ApiError) => {\n			return throwError(() => error);\n		}),\n	);\n};'
-    );
-  },
-  usePartial: true,
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/sendRequest.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/sendRequest.js
deleted file mode 100644
index 509435921..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/angular/sendRequest.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export const sendRequest = <T>(\n	config: OpenAPIConfig,\n	options: ApiRequestOptions<T>,\n	http: HttpClient,\n	url: string,\n	body: unknown,\n	formData: FormData | undefined,\n	headers: HttpHeaders\n): Observable<HttpResponse<T>> => {\n	return http.request<T>(options.method, url, {\n		headers,\n		body: body ?? formData,\n		withCredentials: config.WITH_CREDENTIALS,\n		observe: 'response',\n	});\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/getHeaders.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/getHeaders.js
deleted file mode 100644
index b6bbde16d..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/getHeaders.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export const getHeaders = async <T>(config: OpenAPIConfig, options: ApiRequestOptions<T>): Promise<Record<string, string>> => {\n	const [token, username, password, additionalHeaders] = await Promise.all([\n		// @ts-ignore\n		resolve(options, config.TOKEN),\n		// @ts-ignore\n		resolve(options, config.USERNAME),\n		// @ts-ignore\n		resolve(options, config.PASSWORD),\n		// @ts-ignore\n		resolve(options, config.HEADERS),\n	]);\n\n	const headers = Object.entries({\n		Accept: 'application/json',\n		...additionalHeaders,\n		...options.headers,\n	})\n	.filter(([, value]) => value !== undefined && value !== null)\n	.reduce((headers, [key, value]) => ({\n		...headers,\n		[key]: String(value),\n	}), {} as Record<string, string>);\n\n	if (isStringWithValue(token)) {\n		headers['Authorization'] = `Bearer ${token}`;\n	}\n\n	if (isStringWithValue(username) && isStringWithValue(password)) {\n		const credentials = base64(`${username}:${password}`);\n		headers['Authorization'] = `Basic ${credentials}`;\n	}\n\n	if (options.body !== undefined) {\n		if (options.mediaType) {\n			headers['Content-Type'] = options.mediaType;\n		} else if (isBlob(options.body)) {\n			headers['Content-Type'] = options.body.type || 'application/octet-stream';\n		} else if (isString(options.body)) {\n			headers['Content-Type'] = 'text/plain';\n		} else if (!isFormData(options.body)) {\n			headers['Content-Type'] = 'application/json';\n		}\n	} else if (options.formData !== undefined) {\n		if (options.mediaType) {\n			headers['Content-Type'] = options.mediaType;\n		}\n	}\n\n	return headers;\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/getRequestBody.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/getRequestBody.js
deleted file mode 100644
index 063582829..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/getRequestBody.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return 'export const getRequestBody = (options: ApiRequestOptions): unknown => {\n	if (options.body) {\n		return options.body;\n	}\n	return undefined;\n};';
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/getResponseBody.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/getResponseBody.js
deleted file mode 100644
index 800f8ddbe..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/getResponseBody.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return 'export const getResponseBody = (response: AxiosResponse<unknown>): unknown => {\n	if (response.status !== 204) {\n		return response.data;\n	}\n	return undefined;\n};';
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/getResponseHeader.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/getResponseHeader.js
deleted file mode 100644
index 3d79fee5e..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/getResponseHeader.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return 'export const getResponseHeader = (response: AxiosResponse<unknown>, responseHeader?: string): string | undefined => {\n	if (responseHeader) {\n		const content = response.headers[responseHeader];\n		if (isString(content)) {\n			return content;\n		}\n	}\n	return undefined;\n};';
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/request.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/request.js
deleted file mode 100644
index 0993bd66e..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/request.js
+++ /dev/null
@@ -1,311 +0,0 @@
-export default {
-  1: function (container, depth0, helpers, partials, data) {
-    return 'ApiResult<T>';
-  },
-  3: function (container, depth0, helpers, partials, data) {
-    return 'T';
-  },
-  5: function (container, depth0, helpers, partials, data) {
-    return 'result.body';
-  },
-  7: function (container, depth0, helpers, partials, data) {
-    return 'result';
-  },
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      alias1 = depth0 != null ? depth0 : container.nullContext || {},
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (
-      "import axios from 'axios';\nimport type { AxiosError, AxiosRequestConfig, AxiosResponse, AxiosInstance } from 'axios';\n\nimport { ApiError } from './ApiError';\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { ApiResult } from './ApiResult';\nimport { CancelablePromise } from './CancelablePromise';\nimport type { OnCancel } from './CancelablePromise';\nimport type { OpenAPIConfig } from './OpenAPI';\n\n" +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isString'),
-        depth0,
-        {
-          name: 'functions/isString',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isStringWithValue'),
-        depth0,
-        {
-          name: 'functions/isStringWithValue',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isBlob'),
-        depth0,
-        {
-          name: 'functions/isBlob',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isFormData'),
-        depth0,
-        {
-          name: 'functions/isFormData',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isSuccess'),
-        depth0,
-        {
-          name: 'functions/isSuccess',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/base64'),
-        depth0,
-        {
-          name: 'functions/base64',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/getQueryString'),
-        depth0,
-        {
-          name: 'functions/getQueryString',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/getUrl'),
-        depth0,
-        {
-          name: 'functions/getUrl',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/getFormData'),
-        depth0,
-        {
-          name: 'functions/getFormData',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/resolve'),
-        depth0,
-        {
-          name: 'functions/resolve',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'axios/getHeaders'),
-        depth0,
-        {
-          name: 'axios/getHeaders',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'axios/getRequestBody'),
-        depth0,
-        {
-          name: 'axios/getRequestBody',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'axios/sendRequest'),
-        depth0,
-        {
-          name: 'axios/sendRequest',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'axios/getResponseHeader'),
-        depth0,
-        {
-          name: 'axios/getResponseHeader',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'axios/getResponseBody'),
-        depth0,
-        {
-          name: 'axios/getResponseBody',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/catchErrorCodes'),
-        depth0,
-        {
-          name: 'functions/catchErrorCodes',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @param axiosClient The axios client instance to use\n * @returns CancelablePromise<' +
-      ((stack1 = lookupProperty(helpers, 'ifServicesResponse').call(
-        alias1,
-        'response',
-        {
-          name: 'ifServicesResponse',
-          hash: {},
-          fn: container.program(1, data, 0),
-          inverse: container.program(3, data, 0),
-          data: data,
-          loc: {
-            start: { line: 64, column: 30 },
-            end: { line: 64, column: 108 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '>\n * @throws ApiError\n */\nexport const request = <T>(config: OpenAPIConfig, options: ApiRequestOptions<T>, axiosClient: AxiosInstance = axios): CancelablePromise<' +
-      ((stack1 = lookupProperty(helpers, 'ifServicesResponse').call(
-        alias1,
-        'response',
-        {
-          name: 'ifServicesResponse',
-          hash: {},
-          fn: container.program(1, data, 0),
-          inverse: container.program(3, data, 0),
-          data: data,
-          loc: {
-            start: { line: 67, column: 136 },
-            end: { line: 67, column: 214 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '> => {\n	return new CancelablePromise(async (resolve, reject, onCancel) => {\n		try {\n			const url = getUrl(config, options);\n			const formData = getFormData(options);\n			const body = getRequestBody(options);\n			const headers = await getHeaders(config, options);\n\n			if (!onCancel.isCancelled) {\n				let response = await sendRequest<T>(config, options, url, body, formData, headers, onCancel, axiosClient);\n\n				for (const fn of config.interceptors.response._fns) {\n					response = await fn(response);\n				}\n\n				const responseBody = getResponseBody(response);\n				const responseHeader = getResponseHeader(response, options.responseHeader);\n\n				let transformedBody = responseBody;\n				if (options.responseTransformer && isSuccess(response.status)) {\n					transformedBody = await options.responseTransformer(responseBody)\n				}\n\n				const result: ApiResult = {\n					url,\n					ok: isSuccess(response.status),\n					status: response.status,\n					statusText: response.statusText,\n					body: responseHeader ?? transformedBody,\n				};\n\n				catchErrorCodes(options, result);\n\n				resolve(' +
-      ((stack1 = lookupProperty(helpers, 'ifServicesResponse').call(
-        alias1,
-        'body',
-        {
-          name: 'ifServicesResponse',
-          hash: {},
-          fn: container.program(5, data, 0),
-          inverse: container.program(7, data, 0),
-          data: data,
-          loc: {
-            start: { line: 100, column: 12 },
-            end: { line: 100, column: 90 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ');\n			}\n		} catch (error) {\n			reject(error);\n		}\n	});\n};'
-    );
-  },
-  usePartial: true,
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/sendRequest.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/sendRequest.js
deleted file mode 100644
index 448fd04f1..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/axios/sendRequest.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return 'export const sendRequest = async <T>(\n	config: OpenAPIConfig,\n	options: ApiRequestOptions<T>,\n	url: string,\n	body: unknown,\n	formData: FormData | undefined,\n	headers: Record<string, string>,\n	onCancel: OnCancel,\n	axiosClient: AxiosInstance\n): Promise<AxiosResponse<T>> => {\n	const controller = new AbortController();\n\n	let requestConfig: AxiosRequestConfig = {\n		data: body ?? formData,\n		headers,\n		method: options.method,\n		signal: controller.signal,\n		url,\n		withCredentials: config.WITH_CREDENTIALS,\n	};\n\n	onCancel(() => controller.abort());\n\n	for (const fn of config.interceptors.request._fns) {\n		requestConfig = await fn(requestConfig);\n	}\n\n	try {\n		return await axiosClient.request(requestConfig);\n	} catch (error) {\n		const axiosError = error as AxiosError<T>;\n		if (axiosError.response) {\n			return axiosError.response;\n		}\n		throw error;\n	}\n};';
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/getHeaders.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/getHeaders.js
deleted file mode 100644
index ba30baa44..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/getHeaders.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export const getHeaders = async <T>(config: OpenAPIConfig, options: ApiRequestOptions<T>): Promise<Headers> => {\n	const [token, username, password, additionalHeaders] = await Promise.all([\n		// @ts-ignore\n		resolve(options, config.TOKEN),\n		// @ts-ignore\n		resolve(options, config.USERNAME),\n		// @ts-ignore\n		resolve(options, config.PASSWORD),\n		// @ts-ignore\n		resolve(options, config.HEADERS),\n	]);\n\n	const headers = Object.entries({\n		Accept: 'application/json',\n		...additionalHeaders,\n		...options.headers,\n	})\n		.filter(([, value]) => value !== undefined && value !== null)\n		.reduce((headers, [key, value]) => ({\n			...headers,\n			[key]: String(value),\n		}), {} as Record<string, string>);\n\n	if (isStringWithValue(token)) {\n		headers['Authorization'] = `Bearer ${token}`;\n	}\n\n	if (isStringWithValue(username) && isStringWithValue(password)) {\n		const credentials = base64(`${username}:${password}`);\n		headers['Authorization'] = `Basic ${credentials}`;\n	}\n\n	if (options.body !== undefined) {\n		if (options.mediaType) {\n			headers['Content-Type'] = options.mediaType;\n		} else if (isBlob(options.body)) {\n			headers['Content-Type'] = options.body.type || 'application/octet-stream';\n		} else if (isString(options.body)) {\n			headers['Content-Type'] = 'text/plain';\n		} else if (!isFormData(options.body)) {\n			headers['Content-Type'] = 'application/json';\n		}\n	}\n\n	return new Headers(headers);\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/getRequestBody.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/getRequestBody.js
deleted file mode 100644
index 1378625cb..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/getRequestBody.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export const getRequestBody = (options: ApiRequestOptions): unknown => {\n	if (options.body !== undefined) {\n		if (options.mediaType?.includes('application/json') || options.mediaType?.includes('+json')) {\n			return JSON.stringify(options.body);\n		} else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) {\n			return options.body;\n		} else {\n			return JSON.stringify(options.body);\n		}\n	}\n	return undefined;\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/getResponseBody.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/getResponseBody.js
deleted file mode 100644
index 7b90b1b61..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/getResponseBody.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export const getResponseBody = async (response: Response): Promise<unknown> => {\n	if (response.status !== 204) {\n		try {\n			const contentType = response.headers.get('Content-Type');\n			if (contentType) {\n				const binaryTypes = ['application/octet-stream', 'application/pdf', 'application/zip', 'audio/', 'image/', 'video/'];\n				if (contentType.includes('application/json') || contentType.includes('+json')) {\n					return await response.json();\n				} else if (binaryTypes.some(type => contentType.includes(type))) {\n					return await response.blob();\n				} else if (contentType.includes('multipart/form-data')) {\n					return await response.formData();\n				} else if (contentType.includes('text/')) {\n					return await response.text();\n				}\n			}\n		} catch (error) {\n			console.error(error);\n		}\n	}\n	return undefined;\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/getResponseHeader.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/getResponseHeader.js
deleted file mode 100644
index 46f79e225..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/getResponseHeader.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return 'export const getResponseHeader = (response: Response, responseHeader?: string): string | undefined => {\n	if (responseHeader) {\n		const content = response.headers.get(responseHeader);\n		if (isString(content)) {\n			return content;\n		}\n	}\n	return undefined;\n};';
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/request.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/request.js
deleted file mode 100644
index 1957da010..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/request.js
+++ /dev/null
@@ -1,321 +0,0 @@
-export default {
-  1: function (container, depth0, helpers, partials, data) {
-    return "import fetch, { FormData, Headers } from 'node-fetch';\nimport type { RequestInit, Response } from 'node-fetch';\n\n";
-  },
-  3: function (container, depth0, helpers, partials, data) {
-    return 'ApiResult<T>';
-  },
-  5: function (container, depth0, helpers, partials, data) {
-    return 'T';
-  },
-  7: function (container, depth0, helpers, partials, data) {
-    return 'result.body';
-  },
-  9: function (container, depth0, helpers, partials, data) {
-    return 'result';
-  },
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      alias1 = depth0 != null ? depth0 : container.nullContext || {},
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/node',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(1, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: { start: { line: 1, column: 0 }, end: { line: 5, column: 11 } },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      "import { ApiError } from './ApiError';\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { ApiResult } from './ApiResult';\nimport { CancelablePromise } from './CancelablePromise';\nimport type { OnCancel } from './CancelablePromise';\nimport type { OpenAPIConfig } from './OpenAPI';\n\n" +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isString'),
-        depth0,
-        {
-          name: 'functions/isString',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isStringWithValue'),
-        depth0,
-        {
-          name: 'functions/isStringWithValue',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isBlob'),
-        depth0,
-        {
-          name: 'functions/isBlob',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isFormData'),
-        depth0,
-        {
-          name: 'functions/isFormData',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/base64'),
-        depth0,
-        {
-          name: 'functions/base64',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/getQueryString'),
-        depth0,
-        {
-          name: 'functions/getQueryString',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/getUrl'),
-        depth0,
-        {
-          name: 'functions/getUrl',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/getFormData'),
-        depth0,
-        {
-          name: 'functions/getFormData',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/resolve'),
-        depth0,
-        {
-          name: 'functions/resolve',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'fetch/getHeaders'),
-        depth0,
-        {
-          name: 'fetch/getHeaders',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'fetch/getRequestBody'),
-        depth0,
-        {
-          name: 'fetch/getRequestBody',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'fetch/sendRequest'),
-        depth0,
-        {
-          name: 'fetch/sendRequest',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'fetch/getResponseHeader'),
-        depth0,
-        {
-          name: 'fetch/getResponseHeader',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'fetch/getResponseBody'),
-        depth0,
-        {
-          name: 'fetch/getResponseBody',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/catchErrorCodes'),
-        depth0,
-        {
-          name: 'functions/catchErrorCodes',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @returns CancelablePromise<' +
-      ((stack1 = lookupProperty(helpers, 'ifServicesResponse').call(
-        alias1,
-        'response',
-        {
-          name: 'ifServicesResponse',
-          hash: {},
-          fn: container.program(3, data, 0),
-          inverse: container.program(5, data, 0),
-          data: data,
-          loc: {
-            start: { line: 62, column: 30 },
-            end: { line: 62, column: 108 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '>\n * @throws ApiError\n */\nexport const request = <T>(config: OpenAPIConfig, options: ApiRequestOptions<T>): CancelablePromise<' +
-      ((stack1 = lookupProperty(helpers, 'ifServicesResponse').call(
-        alias1,
-        'response',
-        {
-          name: 'ifServicesResponse',
-          hash: {},
-          fn: container.program(3, data, 0),
-          inverse: container.program(5, data, 0),
-          data: data,
-          loc: {
-            start: { line: 65, column: 100 },
-            end: { line: 65, column: 178 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '> => {\n	return new CancelablePromise(async (resolve, reject, onCancel) => {\n		try {\n			const url = getUrl(config, options);\n			const formData = getFormData(options);\n			const body = getRequestBody(options);\n			const headers = await getHeaders(config, options);\n\n			if (!onCancel.isCancelled) {\n				let response = await sendRequest(config, options, url, body, formData, headers, onCancel);\n\n				for (const fn of config.interceptors.response._fns) {\n					response = await fn(response);\n				}\n\n				const responseBody = await getResponseBody(response);\n				const responseHeader = getResponseHeader(response, options.responseHeader);\n\n				let transformedBody = responseBody;\n				if (options.responseTransformer && response.ok) {\n					transformedBody = await options.responseTransformer(responseBody)\n				}\n\n				const result: ApiResult = {\n					url,\n					ok: response.ok,\n					status: response.status,\n					statusText: response.statusText,\n					body: responseHeader ?? transformedBody,\n				};\n\n				catchErrorCodes(options, result);\n\n				resolve(' +
-      ((stack1 = lookupProperty(helpers, 'ifServicesResponse').call(
-        alias1,
-        'body',
-        {
-          name: 'ifServicesResponse',
-          hash: {},
-          fn: container.program(7, data, 0),
-          inverse: container.program(9, data, 0),
-          data: data,
-          loc: {
-            start: { line: 98, column: 12 },
-            end: { line: 98, column: 90 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ');\n			}\n		} catch (error) {\n			reject(error);\n		}\n	});\n};'
-    );
-  },
-  usePartial: true,
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/sendRequest.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/sendRequest.js
deleted file mode 100644
index 0b0087c7b..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/fetch/sendRequest.js
+++ /dev/null
@@ -1,47 +0,0 @@
-export default {
-  1: function (container, depth0, helpers, partials, data) {
-    return '	if (config.WITH_CREDENTIALS) {\n		request.credentials = config.CREDENTIALS;\n	}\n';
-  },
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (
-      'export const sendRequest = async (\n	config: OpenAPIConfig,\n	options: ApiRequestOptions,\n	url: string,\n	body: any,\n	formData: FormData | undefined,\n	headers: Headers,\n	onCancel: OnCancel\n): Promise<Response> => {\n	const controller = new AbortController();\n\n	let request: RequestInit = {\n		headers,\n		body: body ?? formData,\n		method: options.method,\n		signal: controller.signal,\n	};\n\n' +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        depth0 != null ? depth0 : container.nullContext || {},
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/fetch',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(1, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: {
-            start: { line: 19, column: 1 },
-            end: { line: 23, column: 12 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n	for (const fn of config.interceptors.request._fns) {\n		request = await fn(request);\n	}\n\n	onCancel(() => controller.abort());\n\n	return await fetch(url, request);\n};'
-    );
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/base64.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/base64.js
deleted file mode 100644
index b8fa64c80..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/base64.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export const base64 = (str: string): string => {\n	try {\n		return btoa(str);\n	} catch (err) {\n		// @ts-ignore\n		return Buffer.from(str).toString('base64');\n	}\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/catchErrorCodes.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/catchErrorCodes.js
deleted file mode 100644
index 91272e89e..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/catchErrorCodes.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export const catchErrorCodes = (options: ApiRequestOptions, result: ApiResult): void => {\n	const errors: Record<number, string> = {\n		400: 'Bad Request',\n		401: 'Unauthorized',\n		402: 'Payment Required',\n		403: 'Forbidden',\n		404: 'Not Found',\n		405: 'Method Not Allowed',\n		406: 'Not Acceptable',\n		407: 'Proxy Authentication Required',\n		408: 'Request Timeout',\n		409: 'Conflict',\n		410: 'Gone',\n		411: 'Length Required',\n		412: 'Precondition Failed',\n		413: 'Payload Too Large',\n		414: 'URI Too Long',\n		415: 'Unsupported Media Type',\n		416: 'Range Not Satisfiable',\n		417: 'Expectation Failed',\n		418: 'Im a teapot',\n		421: 'Misdirected Request',\n		422: 'Unprocessable Content',\n		423: 'Locked',\n		424: 'Failed Dependency',\n		425: 'Too Early',\n		426: 'Upgrade Required',\n		428: 'Precondition Required',\n		429: 'Too Many Requests',\n		431: 'Request Header Fields Too Large',\n		451: 'Unavailable For Legal Reasons',\n		500: 'Internal Server Error',\n		501: 'Not Implemented',\n		502: 'Bad Gateway',\n		503: 'Service Unavailable',\n		504: 'Gateway Timeout',\n		505: 'HTTP Version Not Supported',\n		506: 'Variant Also Negotiates',\n		507: 'Insufficient Storage',\n		508: 'Loop Detected',\n		510: 'Not Extended',\n		511: 'Network Authentication Required',\n		...options.errors,\n	}\n\n	const error = errors[result.status];\n	if (error) {\n		throw new ApiError(options, result, error);\n	}\n\n	if (!result.ok) {\n		const errorStatus = result.status ?? 'unknown';\n		const errorStatusText = result.statusText ?? 'unknown';\n		const errorBody = (() => {\n			try {\n				return JSON.stringify(result.body, null, 2);\n			} catch (e) {\n				return undefined;\n			}\n		})();\n\n		throw new ApiError(options, result,\n			`Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}`\n		);\n	}\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/getFormData.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/getFormData.js
deleted file mode 100644
index aadad3cc5..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/getFormData.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return 'export const getFormData = (options: ApiRequestOptions): FormData | undefined => {\n	if (options.formData) {\n		const formData = new FormData();\n\n		const process = (key: string, value: unknown) => {\n			if (isString(value) || isBlob(value)) {\n				formData.append(key, value);\n			} else {\n				formData.append(key, JSON.stringify(value));\n			}\n		};\n\n		Object.entries(options.formData)\n			.filter(([, value]) => value !== undefined && value !== null)\n			.forEach(([key, value]) => {\n				if (Array.isArray(value)) {\n					value.forEach(v => process(key, v));\n				} else {\n					process(key, value);\n				}\n			});\n\n		return formData;\n	}\n	return undefined;\n};';
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/getQueryString.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/getQueryString.js
deleted file mode 100644
index f9c6ca47b..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/getQueryString.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export const getQueryString = (params: Record<string, unknown>): string => {\n	const qs: string[] = [];\n\n	const append = (key: string, value: unknown) => {\n		qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n	};\n\n	const encodePair = (key: string, value: unknown) => {\n		if (value === undefined || value === null) {\n			return;\n		}\n\n		if (value instanceof Date) {\n			append(key, value.toISOString());\n		} else if (Array.isArray(value)) {\n			value.forEach(v => encodePair(key, v));\n		} else if (typeof value === 'object') {\n			Object.entries(value).forEach(([k, v]) => encodePair(`${key}[${k}]`, v));\n		} else {\n			append(key, value);\n		}\n	};\n\n	Object.entries(params).forEach(([key, value]) => encodePair(key, value));\n\n	return qs.length ? `?${qs.join('&')}` : '';\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/getUrl.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/getUrl.js
deleted file mode 100644
index 6229a3a36..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/getUrl.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "const getUrl = (config: OpenAPIConfig, options: ApiRequestOptions): string => {\n	const encoder = config.ENCODE_PATH || encodeURI;\n\n	const path = options.url\n		.replace('{api-version}', config.VERSION)\n		.replace(/{(.*?)}/g, (substring: string, group: string) => {\n			if (options.path?.hasOwnProperty(group)) {\n				return encoder(String(options.path[group]));\n			}\n			return substring;\n		});\n\n	const url = config.BASE + path;\n	return options.query ? url + getQueryString(options.query) : url;\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isBlob.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isBlob.js
deleted file mode 100644
index a2e49389a..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isBlob.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return 'export const isBlob = (value: any): value is Blob => {\n	return value instanceof Blob;\n};';
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isFormData.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isFormData.js
deleted file mode 100644
index 9d0880a49..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isFormData.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return 'export const isFormData = (value: unknown): value is FormData => {\n	return value instanceof FormData;\n};';
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isString.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isString.js
deleted file mode 100644
index 54f1fd264..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isString.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export const isString = (value: unknown): value is string => {\n	return typeof value === 'string';\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isStringWithValue.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isStringWithValue.js
deleted file mode 100644
index 693b6f883..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isStringWithValue.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export const isStringWithValue = (value: unknown): value is string => {\n	return isString(value) && value !== '';\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isSuccess.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isSuccess.js
deleted file mode 100644
index b51b66827..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/isSuccess.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return 'export const isSuccess = (status: number): boolean => {\n	return status >= 200 && status < 300;\n};';
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/resolve.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/resolve.js
deleted file mode 100644
index 79457a4a7..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/functions/resolve.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "type Resolver<T> = (options: ApiRequestOptions<T>) => Promise<T>;\n\nexport const resolve = async <T>(options: ApiRequestOptions<T>, resolver?: T | Resolver<T>): Promise<T | undefined> => {\n	if (typeof resolver === 'function') {\n		return (resolver as Resolver<T>)(options);\n	}\n	return resolver;\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/request.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/request.js
deleted file mode 100644
index f536aca4a..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/request.js
+++ /dev/null
@@ -1,225 +0,0 @@
-export default {
-  1: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (stack1 = container.invokePartial(
-      lookupProperty(partials, 'angular/request'),
-      depth0,
-      {
-        name: 'angular/request',
-        data: data,
-        helpers: helpers,
-        partials: partials,
-        decorators: container.decorators,
-      },
-    )) != null
-      ? stack1
-      : '';
-  },
-  3: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (stack1 = container.invokePartial(
-      lookupProperty(partials, 'axios/request'),
-      depth0,
-      {
-        name: 'axios/request',
-        data: data,
-        helpers: helpers,
-        partials: partials,
-        decorators: container.decorators,
-      },
-    )) != null
-      ? stack1
-      : '';
-  },
-  5: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (stack1 = container.invokePartial(
-      lookupProperty(partials, 'fetch/request'),
-      depth0,
-      {
-        name: 'fetch/request',
-        data: data,
-        helpers: helpers,
-        partials: partials,
-        decorators: container.decorators,
-      },
-    )) != null
-      ? stack1
-      : '';
-  },
-  7: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (stack1 = container.invokePartial(
-      lookupProperty(partials, 'xhr/request'),
-      depth0,
-      {
-        name: 'xhr/request',
-        data: data,
-        helpers: helpers,
-        partials: partials,
-        decorators: container.decorators,
-      },
-    )) != null
-      ? stack1
-      : '';
-  },
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      alias1 = depth0 != null ? depth0 : container.nullContext || {},
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/angular',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(1, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 87 } },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/axios',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(3, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: { start: { line: 2, column: 0 }, end: { line: 2, column: 83 } },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/fetch',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(5, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: { start: { line: 3, column: 0 }, end: { line: 3, column: 83 } },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/node',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(5, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: { start: { line: 4, column: 0 }, end: { line: 4, column: 82 } },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ((stack1 = lookupProperty(helpers, 'equals').call(
-        alias1,
-        lookupProperty(
-          lookupProperty(
-            lookupProperty(lookupProperty(data, 'root'), '$config'),
-            'client',
-          ),
-          'name',
-        ),
-        'legacy/xhr',
-        {
-          name: 'equals',
-          hash: {},
-          fn: container.program(7, data, 0),
-          inverse: container.noop,
-          data: data,
-          loc: { start: { line: 5, column: 0 }, end: { line: 5, column: 79 } },
-        },
-      )) != null
-        ? stack1
-        : '')
-    );
-  },
-  usePartial: true,
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/getHeaders.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/getHeaders.js
deleted file mode 100644
index ba30baa44..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/getHeaders.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export const getHeaders = async <T>(config: OpenAPIConfig, options: ApiRequestOptions<T>): Promise<Headers> => {\n	const [token, username, password, additionalHeaders] = await Promise.all([\n		// @ts-ignore\n		resolve(options, config.TOKEN),\n		// @ts-ignore\n		resolve(options, config.USERNAME),\n		// @ts-ignore\n		resolve(options, config.PASSWORD),\n		// @ts-ignore\n		resolve(options, config.HEADERS),\n	]);\n\n	const headers = Object.entries({\n		Accept: 'application/json',\n		...additionalHeaders,\n		...options.headers,\n	})\n		.filter(([, value]) => value !== undefined && value !== null)\n		.reduce((headers, [key, value]) => ({\n			...headers,\n			[key]: String(value),\n		}), {} as Record<string, string>);\n\n	if (isStringWithValue(token)) {\n		headers['Authorization'] = `Bearer ${token}`;\n	}\n\n	if (isStringWithValue(username) && isStringWithValue(password)) {\n		const credentials = base64(`${username}:${password}`);\n		headers['Authorization'] = `Basic ${credentials}`;\n	}\n\n	if (options.body !== undefined) {\n		if (options.mediaType) {\n			headers['Content-Type'] = options.mediaType;\n		} else if (isBlob(options.body)) {\n			headers['Content-Type'] = options.body.type || 'application/octet-stream';\n		} else if (isString(options.body)) {\n			headers['Content-Type'] = 'text/plain';\n		} else if (!isFormData(options.body)) {\n			headers['Content-Type'] = 'application/json';\n		}\n	}\n\n	return new Headers(headers);\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/getRequestBody.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/getRequestBody.js
deleted file mode 100644
index 1378625cb..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/getRequestBody.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export const getRequestBody = (options: ApiRequestOptions): unknown => {\n	if (options.body !== undefined) {\n		if (options.mediaType?.includes('application/json') || options.mediaType?.includes('+json')) {\n			return JSON.stringify(options.body);\n		} else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) {\n			return options.body;\n		} else {\n			return JSON.stringify(options.body);\n		}\n	}\n	return undefined;\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/getResponseBody.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/getResponseBody.js
deleted file mode 100644
index 8229393a7..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/getResponseBody.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export const getResponseBody = (xhr: XMLHttpRequest): unknown => {\n	if (xhr.status !== 204) {\n		try {\n			const contentType = xhr.getResponseHeader('Content-Type');\n			if (contentType) {\n				if (contentType.includes('application/json') || contentType.includes('+json')) {\n					return JSON.parse(xhr.responseText);\n				} else {\n					return xhr.responseText;\n				}\n			}\n		} catch (error) {\n			console.error(error);\n		}\n	}\n	return undefined;\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/getResponseHeader.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/getResponseHeader.js
deleted file mode 100644
index 560ee1ef8..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/getResponseHeader.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return 'export const getResponseHeader = (xhr: XMLHttpRequest, responseHeader?: string): string | undefined => {\n	if (responseHeader) {\n		const content = xhr.getResponseHeader(responseHeader);\n		if (isString(content)) {\n			return content;\n		}\n	}\n	return undefined;\n};';
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/request.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/request.js
deleted file mode 100644
index 857471311..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/request.js
+++ /dev/null
@@ -1,311 +0,0 @@
-export default {
-  1: function (container, depth0, helpers, partials, data) {
-    return 'ApiResult<T>';
-  },
-  3: function (container, depth0, helpers, partials, data) {
-    return 'T';
-  },
-  5: function (container, depth0, helpers, partials, data) {
-    return 'result.body';
-  },
-  7: function (container, depth0, helpers, partials, data) {
-    return 'result';
-  },
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    var stack1,
-      alias1 = depth0 != null ? depth0 : container.nullContext || {},
-      lookupProperty =
-        container.lookupProperty ||
-        function (parent, propertyName) {
-          if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
-            return parent[propertyName];
-          }
-          return undefined;
-        };
-
-    return (
-      "import { ApiError } from './ApiError';\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { ApiResult } from './ApiResult';\nimport { CancelablePromise } from './CancelablePromise';\nimport type { OnCancel } from './CancelablePromise';\nimport type { OpenAPIConfig } from './OpenAPI';\n\n" +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isString'),
-        depth0,
-        {
-          name: 'functions/isString',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isStringWithValue'),
-        depth0,
-        {
-          name: 'functions/isStringWithValue',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isBlob'),
-        depth0,
-        {
-          name: 'functions/isBlob',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isFormData'),
-        depth0,
-        {
-          name: 'functions/isFormData',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/isSuccess'),
-        depth0,
-        {
-          name: 'functions/isSuccess',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/base64'),
-        depth0,
-        {
-          name: 'functions/base64',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/getQueryString'),
-        depth0,
-        {
-          name: 'functions/getQueryString',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/getUrl'),
-        depth0,
-        {
-          name: 'functions/getUrl',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/getFormData'),
-        depth0,
-        {
-          name: 'functions/getFormData',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/resolve'),
-        depth0,
-        {
-          name: 'functions/resolve',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'fetch/getHeaders'),
-        depth0,
-        {
-          name: 'fetch/getHeaders',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'xhr/getRequestBody'),
-        depth0,
-        {
-          name: 'xhr/getRequestBody',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'xhr/sendRequest'),
-        depth0,
-        {
-          name: 'xhr/sendRequest',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'xhr/getResponseHeader'),
-        depth0,
-        {
-          name: 'xhr/getResponseHeader',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'xhr/getResponseBody'),
-        depth0,
-        {
-          name: 'xhr/getResponseBody',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n' +
-      ((stack1 = container.invokePartial(
-        lookupProperty(partials, 'functions/catchErrorCodes'),
-        depth0,
-        {
-          name: 'functions/catchErrorCodes',
-          data: data,
-          helpers: helpers,
-          partials: partials,
-          decorators: container.decorators,
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '\n\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @returns CancelablePromise<' +
-      ((stack1 = lookupProperty(helpers, 'ifServicesResponse').call(
-        alias1,
-        'response',
-        {
-          name: 'ifServicesResponse',
-          hash: {},
-          fn: container.program(1, data, 0),
-          inverse: container.program(3, data, 0),
-          data: data,
-          loc: {
-            start: { line: 60, column: 30 },
-            end: { line: 60, column: 108 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '>\n * @throws ApiError\n */\nexport const request = <T>(config: OpenAPIConfig, options: ApiRequestOptions<T>): CancelablePromise<' +
-      ((stack1 = lookupProperty(helpers, 'ifServicesResponse').call(
-        alias1,
-        'response',
-        {
-          name: 'ifServicesResponse',
-          hash: {},
-          fn: container.program(1, data, 0),
-          inverse: container.program(3, data, 0),
-          data: data,
-          loc: {
-            start: { line: 63, column: 100 },
-            end: { line: 63, column: 178 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      '> => {\n	return new CancelablePromise(async (resolve, reject, onCancel) => {\n		try {\n			const url = getUrl(config, options);\n			const formData = getFormData(options);\n			const body = getRequestBody(options);\n			const headers = await getHeaders(config, options);\n\n			if (!onCancel.isCancelled) {\n				let response = await sendRequest(config, options, url, body, formData, headers, onCancel);\n\n				for (const fn of config.interceptors.response._fns) {\n					response = await fn(response);\n				}\n\n				const responseBody = getResponseBody(response);\n				const responseHeader = getResponseHeader(response, options.responseHeader);\n\n				let transformedBody = responseBody;\n				if (options.responseTransformer && isSuccess(response.status)) {\n					transformedBody = await options.responseTransformer(responseBody)\n				}\n\n				const result: ApiResult = {\n					url,\n					ok: isSuccess(response.status),\n					status: response.status,\n					statusText: response.statusText,\n					body: responseHeader ?? transformedBody,\n				};\n\n				catchErrorCodes(options, result);\n\n				resolve(' +
-      ((stack1 = lookupProperty(helpers, 'ifServicesResponse').call(
-        alias1,
-        'body',
-        {
-          name: 'ifServicesResponse',
-          hash: {},
-          fn: container.program(5, data, 0),
-          inverse: container.program(7, data, 0),
-          data: data,
-          loc: {
-            start: { line: 96, column: 12 },
-            end: { line: 96, column: 90 },
-          },
-        },
-      )) != null
-        ? stack1
-        : '') +
-      ');\n			}\n		} catch (error) {\n			reject(error);\n		}\n	});\n};'
-    );
-  },
-  usePartial: true,
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/sendRequest.js b/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/sendRequest.js
deleted file mode 100644
index 41c79a585..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/compiled/core/xhr/sendRequest.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  compiler: [8, '>= 4.3.0'],
-  main: function (container, depth0, helpers, partials, data) {
-    return "export const sendRequest = async (\n	config: OpenAPIConfig,\n	options: ApiRequestOptions,\n	url: string,\n	body: any,\n	formData: FormData | undefined,\n	headers: Headers,\n	onCancel: OnCancel\n): Promise<XMLHttpRequest> => {\n	let xhr = new XMLHttpRequest();\n	xhr.open(options.method, url, true);\n	xhr.withCredentials = config.WITH_CREDENTIALS;\n\n	headers.forEach((value, key) => {\n		xhr.setRequestHeader(key, value);\n	});\n\n	return new Promise<XMLHttpRequest>(async (resolve, reject) => {\n		xhr.onload = () => resolve(xhr);\n		xhr.onabort = () => reject(new Error('Request aborted'));\n		xhr.onerror = () => reject(new Error('Network error'));\n\n		for (const fn of config.interceptors.request._fns) {\n			xhr = await fn(xhr);\n		}\n\n		xhr.send(body ?? formData);\n\n		onCancel(() => xhr.abort());\n	});\n};";
-  },
-  useData: true,
-};
diff --git a/packages/openapi-ts/src/legacy/handlebars/handlebars.cjs b/packages/openapi-ts/src/legacy/handlebars/handlebars.cjs
deleted file mode 100644
index d5501d54d..000000000
--- a/packages/openapi-ts/src/legacy/handlebars/handlebars.cjs
+++ /dev/null
@@ -1,72 +0,0 @@
-const Handlebars = require('handlebars');
-const fs = require('node:fs');
-const path = require('node:path');
-
-const getFilesRecursively = (folderPath) => {
-  let fileList = [];
-
-  const files = fs.readdirSync(folderPath);
-
-  files.forEach((file) => {
-    const fullPath = path.join(folderPath, file);
-
-    if (fs.statSync(fullPath).isDirectory()) {
-      fileList = fileList.concat(getFilesRecursively(fullPath));
-    } else {
-      fileList.push(fullPath);
-    }
-  });
-
-  return fileList;
-};
-
-const templatePaths = getFilesRecursively(
-  path.resolve('src', 'legacy', 'handlebars', 'templates'),
-);
-
-const compiledDirPath = path.resolve('src', 'legacy', 'handlebars', 'compiled');
-
-if (fs.existsSync(compiledDirPath)) {
-  fs.rmdirSync(compiledDirPath, {
-    recursive: true,
-  });
-}
-
-templatePaths.forEach((templatePath) => {
-  const template = fs.readFileSync(templatePath, 'utf8').toString().trim();
-
-  const compiled = Handlebars.precompile(template, {
-    knownHelpers: {
-      camelCase: true,
-      equals: true,
-      ifServicesResponse: true,
-      ifdef: true,
-      notEquals: true,
-      transformServiceName: true,
-    },
-    knownHelpersOnly: true,
-    noEscape: true,
-    preventIndent: true,
-    strict: true,
-  });
-
-  const parts = templatePath.split(path.sep);
-  const fileName = parts[parts.length - 1];
-  const fileNameParts = fileName.split('.');
-  const fileNameBase = fileNameParts
-    .slice(0, fileNameParts.length - 1)
-    .join('.');
-  const compiledPath = path.resolve(
-    compiledDirPath,
-    ...parts.slice(parts.lastIndexOf('templates') + 1, parts.length - 1),
-    `${fileNameBase}.js`,
-  );
-
-  const compiledDir = path.dirname(compiledPath);
-
-  if (!fs.existsSync(compiledDir)) {
-    fs.mkdirSync(compiledDir, { recursive: true });
-  }
-
-  fs.writeFileSync(compiledPath, `export default ${compiled};`);
-});
diff --git a/packages/openapi-ts/src/types/config.d.ts b/packages/openapi-ts/src/types/config.d.ts
index 7ae80edea..a4e37a317 100644
--- a/packages/openapi-ts/src/types/config.d.ts
+++ b/packages/openapi-ts/src/types/config.d.ts
@@ -67,6 +67,30 @@ export interface UserConfig {
          */
         path: string | Record<string, unknown>;
       };
+  /**
+   * @deprecated
+   *
+   * Opt in to the experimental parser?
+   *
+   * @default true
+   */
+  experimentalParser?: boolean;
+  /**
+   * @deprecated
+   *
+   * Generate core client classes?
+   *
+   * @default true
+   */
+  exportCore?: boolean;
+  /**
+   * Plugins generate artifacts from `input`. By default, we generate SDK
+   * functions and TypeScript interfaces. If you manually define `plugins`,
+   * you need to include the default plugins if you wish to use them.
+   *
+   * @default ['@hey-api/typescript', '@hey-api/sdk']
+   */
+  plugins?: ReadonlyArray<UserPlugins['name'] | UserPlugins>;
   /**
    * The relative location of the logs folder
    *
@@ -107,6 +131,15 @@ export interface UserConfig {
          */
         path?: string;
       };
+  /**
+   * @deprecated
+   *
+   * Custom client class name. Please note this option is deprecated and
+   * will be removed in favor of clients.
+   *
+   * @link https://heyapi.dev/openapi-ts/migrating.html#deprecated-name
+   */
+  name?: string;
   /**
    * The relative location of the output folder
    */
@@ -154,14 +187,6 @@ export interface UserConfig {
          */
         path: string;
       };
-  /**
-   * Plugins generate artifacts from `input`. By default, we generate SDK
-   * functions and TypeScript interfaces. If you manually define `plugins`,
-   * you need to include the default plugins if you wish to use them.
-   *
-   * @default ['@hey-api/typescript', '@hey-api/sdk']
-   */
-  plugins?: ReadonlyArray<UserPlugins['name'] | UserPlugins>;
   /**
    * Regenerate the client when the input file changes? You can alternatively
    * pass a numeric value for the interval in ms.
@@ -191,38 +216,6 @@ export interface UserConfig {
          */
         timeout?: number;
       };
-  /**
-   * @deprecated
-   *
-   * Manually set base in OpenAPI config instead of inferring from server value
-   */
-  // eslint-disable-next-line typescript-sort-keys/interface
-  base?: string;
-  /**
-   * @deprecated
-   *
-   * Opt in to the experimental parser?
-   *
-   * @default true
-   */
-  experimentalParser?: boolean;
-  /**
-   * @deprecated
-   *
-   * Generate core client classes?
-   *
-   * @default true
-   */
-  exportCore?: boolean;
-  /**
-   * @deprecated
-   *
-   * Custom client class name. Please note this option is deprecated and
-   * will be removed in favor of clients.
-   *
-   * @link https://heyapi.dev/openapi-ts/migrating.html#deprecated-name
-   */
-  name?: string;
   /**
    * @deprecated
    *
@@ -232,6 +225,11 @@ export interface UserConfig {
    * @link https://heyapi.dev/openapi-ts/migrating.html#deprecated-request
    */
   request?: string;
+  /**
+   * Path to the template files.
+   * @default 'node_modules/@hey-api/openapi-ts/templates'
+   */
+  templatesPath?: string;
   /**
    * @deprecated
    *
@@ -243,6 +241,13 @@ export interface UserConfig {
    * @default true
    */
   useOptions?: boolean;
+  /**
+   * @deprecated
+   *
+   * Manually set base in OpenAPI config instead of inferring from server value
+   */
+  // eslint-disable-next-line typescript-sort-keys/interface
+  base?: string;
 }
 
 export type Config = Omit<
@@ -255,8 +260,9 @@ export type Config = Omit<
   | 'plugins'
   | 'request'
   | 'watch'
+  | 'templatesPath'
 > &
-  Pick<UserConfig, 'base' | 'name' | 'request'> & {
+  Pick<UserConfig, 'base' | 'name' | 'request' | 'templatesPath'> & {
     input: ExtractWithDiscriminator<UserConfig['input'], { path: unknown }>;
     logs: Extract<Required<UserConfig['logs']>, object>;
     output: Extract<UserConfig['output'], object>;
diff --git a/packages/openapi-ts/src/types/env.d.ts b/packages/openapi-ts/src/types/env.d.ts
new file mode 100644
index 000000000..43ef6be61
--- /dev/null
+++ b/packages/openapi-ts/src/types/env.d.ts
@@ -0,0 +1,4 @@
+declare module '*.hbs' {
+  const template: string;
+  export default template;
+}
diff --git a/packages/openapi-ts/src/utils/__tests__/handlebars.test.ts b/packages/openapi-ts/src/utils/__tests__/handlebars.test.ts
index 30194aeda..350036ec4 100644
--- a/packages/openapi-ts/src/utils/__tests__/handlebars.test.ts
+++ b/packages/openapi-ts/src/utils/__tests__/handlebars.test.ts
@@ -74,7 +74,7 @@ describe('registerHandlebarHelpers', () => {
 });
 
 describe('registerHandlebarTemplates', () => {
-  it('should return correct templates', () => {
+  it('should return correct templates', async () => {
     setConfig({
       configFile: '',
       dryRun: false,
@@ -128,7 +128,7 @@ describe('registerHandlebarTemplates', () => {
         timeout: 60_000,
       },
     });
-    const templates = registerHandlebarTemplates();
+    const templates = await registerHandlebarTemplates('../../../templates');
     expect(templates.core.settings).toBeDefined();
     expect(templates.core.apiError).toBeDefined();
     expect(templates.core.apiRequestOptions).toBeDefined();
diff --git a/packages/openapi-ts/src/utils/handlebars.ts b/packages/openapi-ts/src/utils/handlebars.ts
index 53fdd1de6..890f6209c 100644
--- a/packages/openapi-ts/src/utils/handlebars.ts
+++ b/packages/openapi-ts/src/utils/handlebars.ts
@@ -1,93 +1,6 @@
+import { promises as fs } from 'fs';
 import Handlebars from 'handlebars';
 
-// @ts-expect-error
-import templateClient from '../legacy/handlebars/compiled/client.js';
-// @ts-expect-error
-import angularGetHeaders from '../legacy/handlebars/compiled/core/angular/getHeaders.js';
-// @ts-expect-error
-import angularGetRequestBody from '../legacy/handlebars/compiled/core/angular/getRequestBody.js';
-// @ts-expect-error
-import angularGetResponseBody from '../legacy/handlebars/compiled/core/angular/getResponseBody.js';
-// @ts-expect-error
-import angularGetResponseHeader from '../legacy/handlebars/compiled/core/angular/getResponseHeader.js';
-// @ts-expect-error
-import angularRequest from '../legacy/handlebars/compiled/core/angular/request.js';
-// @ts-expect-error
-import angularSendRequest from '../legacy/handlebars/compiled/core/angular/sendRequest.js';
-// @ts-expect-error
-import templateCoreApiError from '../legacy/handlebars/compiled/core/ApiError.js';
-// @ts-expect-error
-import templateCoreApiRequestOptions from '../legacy/handlebars/compiled/core/ApiRequestOptions.js';
-// @ts-expect-error
-import templateCoreApiResult from '../legacy/handlebars/compiled/core/ApiResult.js';
-// @ts-expect-error
-import axiosGetHeaders from '../legacy/handlebars/compiled/core/axios/getHeaders.js';
-// @ts-expect-error
-import axiosGetRequestBody from '../legacy/handlebars/compiled/core/axios/getRequestBody.js';
-// @ts-expect-error
-import axiosGetResponseBody from '../legacy/handlebars/compiled/core/axios/getResponseBody.js';
-// @ts-expect-error
-import axiosGetResponseHeader from '../legacy/handlebars/compiled/core/axios/getResponseHeader.js';
-// @ts-expect-error
-import axiosRequest from '../legacy/handlebars/compiled/core/axios/request.js';
-// @ts-expect-error
-import axiosSendRequest from '../legacy/handlebars/compiled/core/axios/sendRequest.js';
-// @ts-expect-error
-import templateCoreBaseHttpRequest from '../legacy/handlebars/compiled/core/BaseHttpRequest.js';
-// @ts-expect-error
-import templateCancelablePromise from '../legacy/handlebars/compiled/core/CancelablePromise.js';
-// @ts-expect-error
-import fetchGetHeaders from '../legacy/handlebars/compiled/core/fetch/getHeaders.js';
-// @ts-expect-error
-import fetchGetRequestBody from '../legacy/handlebars/compiled/core/fetch/getRequestBody.js';
-// @ts-expect-error
-import fetchGetResponseBody from '../legacy/handlebars/compiled/core/fetch/getResponseBody.js';
-// @ts-expect-error
-import fetchGetResponseHeader from '../legacy/handlebars/compiled/core/fetch/getResponseHeader.js';
-// @ts-expect-error
-import fetchRequest from '../legacy/handlebars/compiled/core/fetch/request.js';
-// @ts-expect-error
-import fetchSendRequest from '../legacy/handlebars/compiled/core/fetch/sendRequest.js';
-// @ts-expect-error
-import functionBase64 from '../legacy/handlebars/compiled/core/functions/base64.js';
-// @ts-expect-error
-import functionCatchErrorCodes from '../legacy/handlebars/compiled/core/functions/catchErrorCodes.js';
-// @ts-expect-error
-import functionGetFormData from '../legacy/handlebars/compiled/core/functions/getFormData.js';
-// @ts-expect-error
-import functionGetQueryString from '../legacy/handlebars/compiled/core/functions/getQueryString.js';
-// @ts-expect-error
-import functionGetUrl from '../legacy/handlebars/compiled/core/functions/getUrl.js';
-// @ts-expect-error
-import functionIsBlob from '../legacy/handlebars/compiled/core/functions/isBlob.js';
-// @ts-expect-error
-import functionIsFormData from '../legacy/handlebars/compiled/core/functions/isFormData.js';
-// @ts-expect-error
-import functionIsString from '../legacy/handlebars/compiled/core/functions/isString.js';
-// @ts-expect-error
-import functionIsStringWithValue from '../legacy/handlebars/compiled/core/functions/isStringWithValue.js';
-// @ts-expect-error
-import functionIsSuccess from '../legacy/handlebars/compiled/core/functions/isSuccess.js';
-// @ts-expect-error
-import functionResolve from '../legacy/handlebars/compiled/core/functions/resolve.js';
-// @ts-expect-error
-import templateCoreHttpRequest from '../legacy/handlebars/compiled/core/HttpRequest.js';
-// @ts-expect-error
-import templateCoreSettings from '../legacy/handlebars/compiled/core/OpenAPI.js';
-// @ts-expect-error
-import templateCoreRequest from '../legacy/handlebars/compiled/core/request.js';
-// @ts-expect-error
-import xhrGetHeaders from '../legacy/handlebars/compiled/core/xhr/getHeaders.js';
-// @ts-expect-error
-import xhrGetRequestBody from '../legacy/handlebars/compiled/core/xhr/getRequestBody.js';
-// @ts-expect-error
-import xhrGetResponseBody from '../legacy/handlebars/compiled/core/xhr/getResponseBody.js';
-// @ts-expect-error
-import xhrGetResponseHeader from '../legacy/handlebars/compiled/core/xhr/getResponseHeader.js';
-// @ts-expect-error
-import xhrRequest from '../legacy/handlebars/compiled/core/xhr/request.js';
-// @ts-expect-error
-import xhrSendRequest from '../legacy/handlebars/compiled/core/xhr/sendRequest.js';
 import { getConfig } from './config';
 import { stringCase } from './stringCase';
 import { transformServiceName } from './transform';
@@ -169,174 +82,235 @@ export interface Templates {
   };
 }
 
+async function compileHbs(fileName: string) {
+  const template = await fs.readFile(fileName, 'utf8').toString().trim();
+
+  const compiled = Handlebars.compile(template, {
+    knownHelpers: {
+      camelCase: true,
+      equals: true,
+      ifServicesResponse: true,
+      ifdef: true,
+      notEquals: true,
+      transformServiceName: true,
+    },
+    knownHelpersOnly: true,
+    noEscape: true,
+    preventIndent: true,
+    strict: true,
+  });
+
+  return compiled;
+}
+
 /**
  * Read all the Handlebar templates that we need and return a wrapper object
  * so we can easily access the templates in our generator/write functions.
  */
-export const registerHandlebarTemplates = (): Templates => {
+export const registerHandlebarTemplates = async (
+  templatesPath = 'node_modules/@hey-api/openapi-ts/templates',
+): Promise<Templates> => {
   registerHandlebarHelpers();
 
+  const templateClient = await compileHbs(templatesPath + '/client.hbs');
+  const templateCoreApiError = await compileHbs(
+    templatesPath + '/core/ApiError.hbs',
+  );
+  const templateCoreApiRequestOptions = await compileHbs(
+    templatesPath + '/core/ApiRequestOptions.hbs',
+  );
+  const templateCoreApiResult = await compileHbs(
+    templatesPath + '/core/ApiResult.hbs',
+  );
+  const templateCoreBaseHttpRequest = await compileHbs(
+    templatesPath + '/core/BaseHttpRequest.hbs',
+  );
+  const templateCancelablePromise = await compileHbs(
+    templatesPath + '/core/CancelablePromise.hbs',
+  );
+  const templateCoreHttpRequest = await compileHbs(
+    templatesPath + '/core/HttpRequest.hbs',
+  );
+  const templateCoreRequest = await compileHbs(
+    templatesPath + '/core/request.hbs',
+  );
+  const templateCoreSettings = await compileHbs(
+    templatesPath + '/core/OpenAPI.hbs',
+  );
   // Main templates (entry points for the files we write to disk)
   const templates: Templates = {
-    client: Handlebars.template(templateClient),
+    client: templateClient,
     core: {
-      apiError: Handlebars.template(templateCoreApiError),
-      apiRequestOptions: Handlebars.template(templateCoreApiRequestOptions),
-      apiResult: Handlebars.template(templateCoreApiResult),
-      baseHttpRequest: Handlebars.template(templateCoreBaseHttpRequest),
-      cancelablePromise: Handlebars.template(templateCancelablePromise),
-      httpRequest: Handlebars.template(templateCoreHttpRequest),
-      request: Handlebars.template(templateCoreRequest),
-      settings: Handlebars.template(templateCoreSettings),
+      apiError: templateCoreApiError,
+      apiRequestOptions: templateCoreApiRequestOptions,
+      apiResult: templateCoreApiResult,
+      baseHttpRequest: templateCoreBaseHttpRequest,
+      cancelablePromise: templateCancelablePromise,
+      httpRequest: templateCoreHttpRequest,
+      request: templateCoreRequest,
+      settings: templateCoreSettings,
     },
   };
 
-  // Generic functions used in 'request' file @see src/legacy/handlebars/templates/core/request.hbs for more info
-  Handlebars.registerPartial(
-    'functions/base64',
-    Handlebars.template(functionBase64),
+  const functionBase64 = await compileHbs(
+    templatesPath + '/core/functions/base64.hbs',
   );
-  Handlebars.registerPartial(
-    'functions/catchErrorCodes',
-    Handlebars.template(functionCatchErrorCodes),
+  const functionCatchErrorCodes = await compileHbs(
+    templatesPath + '/core/functions/catchErrorCodes.hbs',
   );
-  Handlebars.registerPartial(
-    'functions/getFormData',
-    Handlebars.template(functionGetFormData),
+  const functionGetFormData = await compileHbs(
+    templatesPath + '/core/functions/getFormData.hbs',
   );
-  Handlebars.registerPartial(
-    'functions/getQueryString',
-    Handlebars.template(functionGetQueryString),
+  const functionGetQueryString = await compileHbs(
+    templatesPath + '/core/functions/getQueryString.hbs',
   );
-  Handlebars.registerPartial(
-    'functions/getUrl',
-    Handlebars.template(functionGetUrl),
+  const functionGetUrl = await compileHbs(
+    templatesPath + '/core/functions/getUrl.hbs',
   );
-  Handlebars.registerPartial(
-    'functions/isBlob',
-    Handlebars.template(functionIsBlob),
+  const functionIsBlob = await compileHbs(
+    templatesPath + '/core/functions/isBlob.hbs',
   );
-  Handlebars.registerPartial(
-    'functions/isFormData',
-    Handlebars.template(functionIsFormData),
+  const functionIsFormData = await compileHbs(
+    templatesPath + '/core/functions/isFormData.hbs',
   );
-  Handlebars.registerPartial(
-    'functions/isString',
-    Handlebars.template(functionIsString),
+  const functionIsString = await compileHbs(
+    templatesPath + '/core/functions/isString.hbs',
   );
+  const functionIsStringWithValue = await compileHbs(
+    templatesPath + '/core/functions/isStringWithValue.hbs',
+  );
+  const functionIsSuccess = await compileHbs(
+    templatesPath + '/core/functions/isSuccess.hbs',
+  );
+  const functionResolve = await compileHbs(
+    templatesPath + '/core/functions/resolve.hbs',
+  );
+  // Generic functions used in 'request' file @see src/legacy/handlebars/templates/core/request.hbs for more info
+  Handlebars.registerPartial('functions/base64', functionBase64);
   Handlebars.registerPartial(
-    'functions/isStringWithValue',
-    Handlebars.template(functionIsStringWithValue),
+    'functions/catchErrorCodes',
+    functionCatchErrorCodes,
   );
+  Handlebars.registerPartial('functions/getFormData', functionGetFormData);
   Handlebars.registerPartial(
-    'functions/isSuccess',
-    Handlebars.template(functionIsSuccess),
+    'functions/getQueryString',
+    functionGetQueryString,
   );
+  Handlebars.registerPartial('functions/getUrl', functionGetUrl);
+  Handlebars.registerPartial('functions/isBlob', functionIsBlob);
+  Handlebars.registerPartial('functions/isFormData', functionIsFormData);
+  Handlebars.registerPartial('functions/isString', functionIsString);
   Handlebars.registerPartial(
-    'functions/resolve',
-    Handlebars.template(functionResolve),
+    'functions/isStringWithValue',
+    functionIsStringWithValue,
   );
+  Handlebars.registerPartial('functions/isSuccess', functionIsSuccess);
+  Handlebars.registerPartial('functions/resolve', functionResolve);
 
-  // Specific files for the fetch client implementation
-  Handlebars.registerPartial(
-    'fetch/getHeaders',
-    Handlebars.template(fetchGetHeaders),
+  const fetchGetHeaders = await compileHbs(
+    templatesPath + '/core/fetch/getHeaders.hbs',
   );
-  Handlebars.registerPartial(
-    'fetch/getRequestBody',
-    Handlebars.template(fetchGetRequestBody),
+  const fetchGetRequestBody = await compileHbs(
+    templatesPath + '/core/fetch/getRequestBody.hbs',
   );
-  Handlebars.registerPartial(
-    'fetch/getResponseBody',
-    Handlebars.template(fetchGetResponseBody),
+  const fetchGetResponseBody = await compileHbs(
+    templatesPath + '/core/fetch/getResponseBody.hbs',
   );
-  Handlebars.registerPartial(
-    'fetch/getResponseHeader',
-    Handlebars.template(fetchGetResponseHeader),
+  const fetchGetResponseHeader = await compileHbs(
+    templatesPath + '/core/fetch/getResponseHeader.hbs',
   );
-  Handlebars.registerPartial(
-    'fetch/request',
-    Handlebars.template(fetchRequest),
+  const fetchRequest = await compileHbs(
+    templatesPath + '/core/fetch/request.hbs',
   );
-  Handlebars.registerPartial(
-    'fetch/sendRequest',
-    Handlebars.template(fetchSendRequest),
+  const fetchSendRequest = await compileHbs(
+    templatesPath + '/core/fetch/sendRequest.hbs',
   );
+  // Specific files for the fetch client implementation
+  Handlebars.registerPartial('fetch/getHeaders', fetchGetHeaders);
+  Handlebars.registerPartial('fetch/getRequestBody', fetchGetRequestBody);
+  Handlebars.registerPartial('fetch/getResponseBody', fetchGetResponseBody);
+  Handlebars.registerPartial('fetch/getResponseHeader', fetchGetResponseHeader);
+  Handlebars.registerPartial('fetch/request', fetchRequest);
+  Handlebars.registerPartial('fetch/sendRequest', fetchSendRequest);
 
-  // Specific files for the xhr client implementation
-  Handlebars.registerPartial(
-    'xhr/getHeaders',
-    Handlebars.template(xhrGetHeaders),
+  const xhrGetHeaders = await compileHbs(
+    templatesPath + '/core/xhr/getHeaders.hbs',
   );
-  Handlebars.registerPartial(
-    'xhr/getRequestBody',
-    Handlebars.template(xhrGetRequestBody),
+  const xhrGetRequestBody = await compileHbs(
+    templatesPath + '/core/xhr/getRequestBody.hbs',
   );
-  Handlebars.registerPartial(
-    'xhr/getResponseBody',
-    Handlebars.template(xhrGetResponseBody),
+  const xhrGetResponseBody = await compileHbs(
+    templatesPath + '/core/xhr/getResponseBody.hbs',
   );
-  Handlebars.registerPartial(
-    'xhr/getResponseHeader',
-    Handlebars.template(xhrGetResponseHeader),
+  const xhrGetResponseHeader = await compileHbs(
+    templatesPath + '/core/xhr/getResponseHeader.hbs',
   );
-  Handlebars.registerPartial('xhr/request', Handlebars.template(xhrRequest));
-  Handlebars.registerPartial(
-    'xhr/sendRequest',
-    Handlebars.template(xhrSendRequest),
+  const xhrRequest = await compileHbs(templatesPath + '/core/xhr/request.hbs');
+  const xhrSendRequest = await compileHbs(
+    templatesPath + '/core/xhr/sendRequest.hbs',
   );
+  // Specific files for the xhr client implementation
+  Handlebars.registerPartial('xhr/getHeaders', xhrGetHeaders);
+  Handlebars.registerPartial('xhr/getRequestBody', xhrGetRequestBody);
+  Handlebars.registerPartial('xhr/getResponseBody', xhrGetResponseBody);
+  Handlebars.registerPartial('xhr/getResponseHeader', xhrGetResponseHeader);
+  Handlebars.registerPartial('xhr/request', xhrRequest);
+  Handlebars.registerPartial('xhr/sendRequest', xhrSendRequest);
 
-  // Specific files for the axios client implementation
-  Handlebars.registerPartial(
-    'axios/getHeaders',
-    Handlebars.template(axiosGetHeaders),
+  const axiosGetHeaders = await compileHbs(
+    templatesPath + '/core/axios/getHeaders.hbs',
   );
-  Handlebars.registerPartial(
-    'axios/getRequestBody',
-    Handlebars.template(axiosGetRequestBody),
+  const axiosGetRequestBody = await compileHbs(
+    templatesPath + '/core/axios/getRequestBody.hbs',
   );
-  Handlebars.registerPartial(
-    'axios/getResponseBody',
-    Handlebars.template(axiosGetResponseBody),
+  const axiosGetResponseBody = await compileHbs(
+    templatesPath + '/core/axios/getResponseBody.hbs',
   );
-  Handlebars.registerPartial(
-    'axios/getResponseHeader',
-    Handlebars.template(axiosGetResponseHeader),
+  const axiosGetResponseHeader = await compileHbs(
+    templatesPath + '/core/axios/getResponseHeader.hbs',
   );
-  Handlebars.registerPartial(
-    'axios/request',
-    Handlebars.template(axiosRequest),
+  const axiosRequest = await compileHbs(
+    templatesPath + '/core/axios/request.hbs',
   );
-  Handlebars.registerPartial(
-    'axios/sendRequest',
-    Handlebars.template(axiosSendRequest),
+  const axiosSendRequest = await compileHbs(
+    templatesPath + '/core/axios/sendRequest.hbs',
   );
+  // Specific files for the axios client implementation
+  Handlebars.registerPartial('axios/getHeaders', axiosGetHeaders);
+  Handlebars.registerPartial('axios/getRequestBody', axiosGetRequestBody);
+  Handlebars.registerPartial('axios/getResponseBody', axiosGetResponseBody);
+  Handlebars.registerPartial('axios/getResponseHeader', axiosGetResponseHeader);
+  Handlebars.registerPartial('axios/request', axiosRequest);
+  Handlebars.registerPartial('axios/sendRequest', axiosSendRequest);
 
-  // Specific files for the angular client implementation
-  Handlebars.registerPartial(
-    'angular/getHeaders',
-    Handlebars.template(angularGetHeaders),
+  const angularGetHeaders = await compileHbs(
+    templatesPath + '/core/angular/getHeaders.hbs',
   );
-  Handlebars.registerPartial(
-    'angular/getRequestBody',
-    Handlebars.template(angularGetRequestBody),
+  const angularGetRequestBody = await compileHbs(
+    templatesPath + '/core/angular/getRequestBody.hbs',
   );
-  Handlebars.registerPartial(
-    'angular/getResponseBody',
-    Handlebars.template(angularGetResponseBody),
+  const angularGetResponseBody = await compileHbs(
+    templatesPath + '/core/angular/getResponseBody.hbs',
   );
-  Handlebars.registerPartial(
-    'angular/getResponseHeader',
-    Handlebars.template(angularGetResponseHeader),
+  const angularGetResponseHeader = await compileHbs(
+    templatesPath + '/core/angular/getResponseHeader.hbs',
   );
-  Handlebars.registerPartial(
-    'angular/request',
-    Handlebars.template(angularRequest),
+  const angularRequest = await compileHbs(
+    templatesPath + '/core/angular/request.hbs',
+  );
+  const angularSendRequest = await compileHbs(
+    templatesPath + '/core/angular/sendRequest.hbs',
   );
+  // Specific files for the angular client implementation
+  Handlebars.registerPartial('angular/getHeaders', angularGetHeaders);
+  Handlebars.registerPartial('angular/getRequestBody', angularGetRequestBody);
+  Handlebars.registerPartial('angular/getResponseBody', angularGetResponseBody);
   Handlebars.registerPartial(
-    'angular/sendRequest',
-    Handlebars.template(angularSendRequest),
+    'angular/getResponseHeader',
+    angularGetResponseHeader,
   );
+  Handlebars.registerPartial('angular/request', angularRequest);
+  Handlebars.registerPartial('angular/sendRequest', angularSendRequest);
 
   return templates;
 };
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/client.hbs b/packages/openapi-ts/templates/client.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/client.hbs
rename to packages/openapi-ts/templates/client.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/ApiError.hbs b/packages/openapi-ts/templates/core/ApiError.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/ApiError.hbs
rename to packages/openapi-ts/templates/core/ApiError.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/ApiRequestOptions.hbs b/packages/openapi-ts/templates/core/ApiRequestOptions.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/ApiRequestOptions.hbs
rename to packages/openapi-ts/templates/core/ApiRequestOptions.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/ApiResult.hbs b/packages/openapi-ts/templates/core/ApiResult.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/ApiResult.hbs
rename to packages/openapi-ts/templates/core/ApiResult.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/BaseHttpRequest.hbs b/packages/openapi-ts/templates/core/BaseHttpRequest.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/BaseHttpRequest.hbs
rename to packages/openapi-ts/templates/core/BaseHttpRequest.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/CancelablePromise.hbs b/packages/openapi-ts/templates/core/CancelablePromise.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/CancelablePromise.hbs
rename to packages/openapi-ts/templates/core/CancelablePromise.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/HttpRequest.hbs b/packages/openapi-ts/templates/core/HttpRequest.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/HttpRequest.hbs
rename to packages/openapi-ts/templates/core/HttpRequest.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/OpenAPI.hbs b/packages/openapi-ts/templates/core/OpenAPI.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/OpenAPI.hbs
rename to packages/openapi-ts/templates/core/OpenAPI.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/angular/getHeaders.hbs b/packages/openapi-ts/templates/core/angular/getHeaders.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/angular/getHeaders.hbs
rename to packages/openapi-ts/templates/core/angular/getHeaders.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/angular/getRequestBody.hbs b/packages/openapi-ts/templates/core/angular/getRequestBody.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/angular/getRequestBody.hbs
rename to packages/openapi-ts/templates/core/angular/getRequestBody.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/angular/getResponseBody.hbs b/packages/openapi-ts/templates/core/angular/getResponseBody.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/angular/getResponseBody.hbs
rename to packages/openapi-ts/templates/core/angular/getResponseBody.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/angular/getResponseHeader.hbs b/packages/openapi-ts/templates/core/angular/getResponseHeader.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/angular/getResponseHeader.hbs
rename to packages/openapi-ts/templates/core/angular/getResponseHeader.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/angular/request.hbs b/packages/openapi-ts/templates/core/angular/request.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/angular/request.hbs
rename to packages/openapi-ts/templates/core/angular/request.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/angular/sendRequest.hbs b/packages/openapi-ts/templates/core/angular/sendRequest.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/angular/sendRequest.hbs
rename to packages/openapi-ts/templates/core/angular/sendRequest.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/axios/getHeaders.hbs b/packages/openapi-ts/templates/core/axios/getHeaders.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/axios/getHeaders.hbs
rename to packages/openapi-ts/templates/core/axios/getHeaders.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/axios/getRequestBody.hbs b/packages/openapi-ts/templates/core/axios/getRequestBody.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/axios/getRequestBody.hbs
rename to packages/openapi-ts/templates/core/axios/getRequestBody.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/axios/getResponseBody.hbs b/packages/openapi-ts/templates/core/axios/getResponseBody.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/axios/getResponseBody.hbs
rename to packages/openapi-ts/templates/core/axios/getResponseBody.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/axios/getResponseHeader.hbs b/packages/openapi-ts/templates/core/axios/getResponseHeader.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/axios/getResponseHeader.hbs
rename to packages/openapi-ts/templates/core/axios/getResponseHeader.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/axios/request.hbs b/packages/openapi-ts/templates/core/axios/request.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/axios/request.hbs
rename to packages/openapi-ts/templates/core/axios/request.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/axios/sendRequest.hbs b/packages/openapi-ts/templates/core/axios/sendRequest.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/axios/sendRequest.hbs
rename to packages/openapi-ts/templates/core/axios/sendRequest.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/fetch/getHeaders.hbs b/packages/openapi-ts/templates/core/fetch/getHeaders.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/fetch/getHeaders.hbs
rename to packages/openapi-ts/templates/core/fetch/getHeaders.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/fetch/getRequestBody.hbs b/packages/openapi-ts/templates/core/fetch/getRequestBody.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/fetch/getRequestBody.hbs
rename to packages/openapi-ts/templates/core/fetch/getRequestBody.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/fetch/getResponseBody.hbs b/packages/openapi-ts/templates/core/fetch/getResponseBody.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/fetch/getResponseBody.hbs
rename to packages/openapi-ts/templates/core/fetch/getResponseBody.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/fetch/getResponseHeader.hbs b/packages/openapi-ts/templates/core/fetch/getResponseHeader.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/fetch/getResponseHeader.hbs
rename to packages/openapi-ts/templates/core/fetch/getResponseHeader.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/fetch/request.hbs b/packages/openapi-ts/templates/core/fetch/request.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/fetch/request.hbs
rename to packages/openapi-ts/templates/core/fetch/request.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/fetch/sendRequest.hbs b/packages/openapi-ts/templates/core/fetch/sendRequest.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/fetch/sendRequest.hbs
rename to packages/openapi-ts/templates/core/fetch/sendRequest.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/functions/base64.hbs b/packages/openapi-ts/templates/core/functions/base64.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/functions/base64.hbs
rename to packages/openapi-ts/templates/core/functions/base64.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/functions/catchErrorCodes.hbs b/packages/openapi-ts/templates/core/functions/catchErrorCodes.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/functions/catchErrorCodes.hbs
rename to packages/openapi-ts/templates/core/functions/catchErrorCodes.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/functions/getFormData.hbs b/packages/openapi-ts/templates/core/functions/getFormData.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/functions/getFormData.hbs
rename to packages/openapi-ts/templates/core/functions/getFormData.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/functions/getQueryString.hbs b/packages/openapi-ts/templates/core/functions/getQueryString.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/functions/getQueryString.hbs
rename to packages/openapi-ts/templates/core/functions/getQueryString.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/functions/getUrl.hbs b/packages/openapi-ts/templates/core/functions/getUrl.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/functions/getUrl.hbs
rename to packages/openapi-ts/templates/core/functions/getUrl.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/functions/isBlob.hbs b/packages/openapi-ts/templates/core/functions/isBlob.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/functions/isBlob.hbs
rename to packages/openapi-ts/templates/core/functions/isBlob.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/functions/isFormData.hbs b/packages/openapi-ts/templates/core/functions/isFormData.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/functions/isFormData.hbs
rename to packages/openapi-ts/templates/core/functions/isFormData.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/functions/isString.hbs b/packages/openapi-ts/templates/core/functions/isString.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/functions/isString.hbs
rename to packages/openapi-ts/templates/core/functions/isString.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/functions/isStringWithValue.hbs b/packages/openapi-ts/templates/core/functions/isStringWithValue.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/functions/isStringWithValue.hbs
rename to packages/openapi-ts/templates/core/functions/isStringWithValue.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/functions/isSuccess.hbs b/packages/openapi-ts/templates/core/functions/isSuccess.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/functions/isSuccess.hbs
rename to packages/openapi-ts/templates/core/functions/isSuccess.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/functions/resolve.hbs b/packages/openapi-ts/templates/core/functions/resolve.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/functions/resolve.hbs
rename to packages/openapi-ts/templates/core/functions/resolve.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/request.hbs b/packages/openapi-ts/templates/core/request.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/request.hbs
rename to packages/openapi-ts/templates/core/request.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/xhr/getHeaders.hbs b/packages/openapi-ts/templates/core/xhr/getHeaders.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/xhr/getHeaders.hbs
rename to packages/openapi-ts/templates/core/xhr/getHeaders.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/xhr/getRequestBody.hbs b/packages/openapi-ts/templates/core/xhr/getRequestBody.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/xhr/getRequestBody.hbs
rename to packages/openapi-ts/templates/core/xhr/getRequestBody.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/xhr/getResponseBody.hbs b/packages/openapi-ts/templates/core/xhr/getResponseBody.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/xhr/getResponseBody.hbs
rename to packages/openapi-ts/templates/core/xhr/getResponseBody.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/xhr/getResponseHeader.hbs b/packages/openapi-ts/templates/core/xhr/getResponseHeader.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/xhr/getResponseHeader.hbs
rename to packages/openapi-ts/templates/core/xhr/getResponseHeader.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/xhr/request.hbs b/packages/openapi-ts/templates/core/xhr/request.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/xhr/request.hbs
rename to packages/openapi-ts/templates/core/xhr/request.hbs
diff --git a/packages/openapi-ts/src/legacy/handlebars/templates/core/xhr/sendRequest.hbs b/packages/openapi-ts/templates/core/xhr/sendRequest.hbs
similarity index 100%
rename from packages/openapi-ts/src/legacy/handlebars/templates/core/xhr/sendRequest.hbs
rename to packages/openapi-ts/templates/core/xhr/sendRequest.hbs