@rexeus/typeweaver-clients 0.3.2 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,58 +1,24 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ 'use strict';
29
2
 
30
- // src/index.ts
31
- var index_exports = {};
32
- __export(index_exports, {
33
- default: () => ClientsPlugin
34
- });
35
- module.exports = __toCommonJS(index_exports);
3
+ var path = require('node:path');
4
+ var node_url = require('node:url');
5
+ var typeweaverGen = require('@rexeus/typeweaver-gen');
6
+ var typeweaverZodToTs = require('@rexeus/typeweaver-zod-to-ts');
7
+ var Case = require('case');
36
8
 
37
- // ../../node_modules/.pnpm/tsup@8.5.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js
38
- var getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.tagName.toUpperCase() === "SCRIPT" ? document.currentScript.src : new URL("main.js", document.baseURI).href;
39
- var importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
40
10
 
41
- // src/index.ts
42
- var import_node_path2 = __toESM(require("node:path"), 1);
43
- var import_node_url2 = require("node:url");
44
- var import_typeweaver_gen = require("@rexeus/typeweaver-gen");
11
+ var path__default = /*#__PURE__*/_interopDefault(path);
12
+ var Case__default = /*#__PURE__*/_interopDefault(Case);
45
13
 
46
- // src/ClientGenerator.ts
47
- var import_node_path = __toESM(require("node:path"), 1);
48
- var import_node_url = require("node:url");
49
- var import_typeweaver_zod_to_ts = require("@rexeus/typeweaver-zod-to-ts");
50
- var import_case = __toESM(require("case"), 1);
51
- var moduleDir = import_node_path.default.dirname((0, import_node_url.fileURLToPath)(importMetaUrl));
14
+ // ../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js
15
+ var getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.tagName.toUpperCase() === "SCRIPT" ? document.currentScript.src : new URL("main.js", document.baseURI).href;
16
+ var importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
17
+ var moduleDir = path__default.default.dirname(node_url.fileURLToPath(importMetaUrl));
52
18
  var ClientGenerator = class {
53
19
  static generate(context) {
54
- const clientTemplatePath = import_node_path.default.join(moduleDir, "templates", "Client.ejs");
55
- const commandTemplatePath = import_node_path.default.join(
20
+ const clientTemplatePath = path__default.default.join(moduleDir, "templates", "Client.ejs");
21
+ const commandTemplatePath = path__default.default.join(
56
22
  moduleDir,
57
23
  "templates",
58
24
  "RequestCommand.ejs"
@@ -70,7 +36,7 @@ var ClientGenerator = class {
70
36
  }
71
37
  static writeClient(templateFilePath, operationResources, context) {
72
38
  const entityName = operationResources[0].entityName;
73
- const pascalCaseEntityName = import_case.default.pascal(entityName);
39
+ const pascalCaseEntityName = Case__default.default.pascal(entityName);
74
40
  const outputDir = operationResources[0].outputDir;
75
41
  const operations = [];
76
42
  for (const operationResource of operationResources) {
@@ -81,10 +47,10 @@ var ClientGenerator = class {
81
47
  outputRequestFileName
82
48
  } = operationResource;
83
49
  const { operationId } = definition;
84
- const pascalCaseOperationId = import_case.default.pascal(operationId);
85
- const requestFile = `./${import_node_path.default.basename(outputRequestFileName, ".ts")}`;
86
- const responseValidatorFile = `./${import_node_path.default.basename(outputResponseValidationFileName, ".ts")}`;
87
- const responseFile = `./${import_node_path.default.basename(outputResponseFileName, ".ts")}`;
50
+ const pascalCaseOperationId = Case__default.default.pascal(operationId);
51
+ const requestFile = `./${path__default.default.basename(outputRequestFileName, ".ts")}`;
52
+ const responseValidatorFile = `./${path__default.default.basename(outputResponseValidationFileName, ".ts")}`;
53
+ const responseFile = `./${path__default.default.basename(outputResponseFileName, ".ts")}`;
88
54
  operations.push({
89
55
  operationId,
90
56
  pascalCaseOperationId,
@@ -98,11 +64,11 @@ var ClientGenerator = class {
98
64
  pascalCaseEntityName,
99
65
  operations
100
66
  });
101
- const outputClientFile = import_node_path.default.join(
67
+ const outputClientFile = path__default.default.join(
102
68
  outputDir,
103
69
  `${pascalCaseEntityName}Client.ts`
104
70
  );
105
- const relativePath = import_node_path.default.relative(context.outputDir, outputClientFile);
71
+ const relativePath = path__default.default.relative(context.outputDir, outputClientFile);
106
72
  context.writeFile(relativePath, content);
107
73
  }
108
74
  static writeRequestCommands(templateFilePath, operationResources, context) {
@@ -121,7 +87,7 @@ var ClientGenerator = class {
121
87
  outputRequestFileName
122
88
  } = operationResource;
123
89
  const { operationId, method, request, responses } = definition;
124
- const pascalCaseOperationId = import_case.default.pascal(operationId);
90
+ const pascalCaseOperationId = Case__default.default.pascal(operationId);
125
91
  const allResponses = responses;
126
92
  const ownSuccessResponses = allResponses.filter(
127
93
  (r) => r.statusCode >= 200 && r.statusCode < 300 && !r.isReference
@@ -135,24 +101,24 @@ var ClientGenerator = class {
135
101
  const sharedErrorResponses = allResponses.filter(
136
102
  (r) => (r.statusCode < 200 || r.statusCode >= 300) && r.isReference
137
103
  );
138
- const headerTsType = request.header ? import_typeweaver_zod_to_ts.TsTypePrinter.print(import_typeweaver_zod_to_ts.TsTypeNode.fromZod(request.header)) : void 0;
139
- const paramTsType = request.param ? import_typeweaver_zod_to_ts.TsTypePrinter.print(import_typeweaver_zod_to_ts.TsTypeNode.fromZod(request.param)) : void 0;
140
- const queryTsType = request.query ? import_typeweaver_zod_to_ts.TsTypePrinter.print(import_typeweaver_zod_to_ts.TsTypeNode.fromZod(request.query)) : void 0;
141
- const bodyTsType = request.body ? import_typeweaver_zod_to_ts.TsTypePrinter.print(import_typeweaver_zod_to_ts.TsTypeNode.fromZod(request.body)) : void 0;
104
+ const headerTsType = request.header ? typeweaverZodToTs.TsTypePrinter.print(typeweaverZodToTs.TsTypeNode.fromZod(request.header)) : void 0;
105
+ const paramTsType = request.param ? typeweaverZodToTs.TsTypePrinter.print(typeweaverZodToTs.TsTypeNode.fromZod(request.param)) : void 0;
106
+ const queryTsType = request.query ? typeweaverZodToTs.TsTypePrinter.print(typeweaverZodToTs.TsTypeNode.fromZod(request.query)) : void 0;
107
+ const bodyTsType = request.body ? typeweaverZodToTs.TsTypePrinter.print(typeweaverZodToTs.TsTypeNode.fromZod(request.body)) : void 0;
142
108
  const successResponseImportPath = (response) => {
143
109
  if (response.isReference && response.path) {
144
110
  return response.path;
145
111
  }
146
- return `./${import_node_path.default.basename(outputResponseFileName, ".ts")}`;
112
+ return `./${path__default.default.basename(outputResponseFileName, ".ts")}`;
147
113
  };
148
- const requestFile = `./${import_node_path.default.basename(outputRequestFileName, ".ts")}`;
149
- const responseValidatorFile = `./${import_node_path.default.basename(outputResponseValidationFileName, ".ts")}`;
150
- const relativeSourceFile = import_node_path.default.relative(sourceDir, sourceFile);
151
- const sourcePath = import_node_path.default.join(
114
+ const requestFile = `./${path__default.default.basename(outputRequestFileName, ".ts")}`;
115
+ const responseValidatorFile = `./${path__default.default.basename(outputResponseValidationFileName, ".ts")}`;
116
+ const relativeSourceFile = path__default.default.relative(sourceDir, sourceFile);
117
+ const sourcePath = path__default.default.join(
152
118
  sourceDir,
153
119
  relativeSourceFile.replace(/\.ts$/, "")
154
120
  );
155
- const relativeSourcePath = import_node_path.default.relative(outputDir, sourcePath);
121
+ const relativeSourcePath = path__default.default.relative(outputDir, sourcePath);
156
122
  const content = context.renderTemplate(templateFilePath, {
157
123
  sourcePath: relativeSourcePath,
158
124
  operationId,
@@ -170,22 +136,24 @@ var ClientGenerator = class {
170
136
  responseValidatorFile,
171
137
  successResponseImportPath
172
138
  });
173
- const outputCommandFile = import_node_path.default.join(
139
+ const outputCommandFile = path__default.default.join(
174
140
  outputDir,
175
141
  `${pascalCaseOperationId}RequestCommand.ts`
176
142
  );
177
- const relativePath = import_node_path.default.relative(context.outputDir, outputCommandFile);
143
+ const relativePath = path__default.default.relative(context.outputDir, outputCommandFile);
178
144
  context.writeFile(relativePath, content);
179
145
  }
180
146
  };
181
147
 
182
148
  // src/index.ts
183
- var moduleDir2 = import_node_path2.default.dirname((0, import_node_url2.fileURLToPath)(importMetaUrl));
184
- var ClientsPlugin = class extends import_typeweaver_gen.BasePlugin {
149
+ var moduleDir2 = path__default.default.dirname(node_url.fileURLToPath(importMetaUrl));
150
+ var ClientsPlugin = class extends typeweaverGen.BasePlugin {
185
151
  name = "clients";
186
152
  generate(context) {
187
- const libDir = import_node_path2.default.join(moduleDir2, "lib");
153
+ const libDir = path__default.default.join(moduleDir2, "lib");
188
154
  this.copyLibFiles(context, libDir, "clients");
189
155
  ClientGenerator.generate(context);
190
156
  }
191
157
  };
158
+
159
+ module.exports = ClientsPlugin;
package/dist/index.js CHANGED
@@ -1,13 +1,10 @@
1
- // src/index.ts
2
- import path2 from "node:path";
3
- import { fileURLToPath as fileURLToPath2 } from "node:url";
4
- import { BasePlugin } from "@rexeus/typeweaver-gen";
1
+ import path from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { BasePlugin } from '@rexeus/typeweaver-gen';
4
+ import { TsTypePrinter, TsTypeNode } from '@rexeus/typeweaver-zod-to-ts';
5
+ import Case from 'case';
5
6
 
6
- // src/ClientGenerator.ts
7
- import path from "node:path";
8
- import { fileURLToPath } from "node:url";
9
- import { TsTypeNode, TsTypePrinter } from "@rexeus/typeweaver-zod-to-ts";
10
- import Case from "case";
7
+ // src/index.ts
11
8
  var moduleDir = path.dirname(fileURLToPath(import.meta.url));
12
9
  var ClientGenerator = class {
13
10
  static generate(context) {
@@ -140,15 +137,14 @@ var ClientGenerator = class {
140
137
  };
141
138
 
142
139
  // src/index.ts
143
- var moduleDir2 = path2.dirname(fileURLToPath2(import.meta.url));
140
+ var moduleDir2 = path.dirname(fileURLToPath(import.meta.url));
144
141
  var ClientsPlugin = class extends BasePlugin {
145
142
  name = "clients";
146
143
  generate(context) {
147
- const libDir = path2.join(moduleDir2, "lib");
144
+ const libDir = path.join(moduleDir2, "lib");
148
145
  this.copyLibFiles(context, libDir, "clients");
149
146
  ClientGenerator.generate(context);
150
147
  }
151
148
  };
152
- export {
153
- ClientsPlugin as default
154
- };
149
+
150
+ export { ClientsPlugin as default };
@@ -70,6 +70,7 @@ export abstract class ApiClient {
70
70
  "Base URL must be provided either in axios instance or in constructor"
71
71
  );
72
72
  }
73
+ this.axiosInstance.defaults.baseURL = undefined;
73
74
 
74
75
  this.unknownResponseHandling = props.unknownResponseHandling ?? "throw";
75
76
  this.isSuccessStatusCode =
@@ -169,7 +170,7 @@ export abstract class ApiClient {
169
170
  }
170
171
 
171
172
  return Object.entries(param).reduce((acc, [key, value]) => {
172
- const result = acc.replace(`:${key}`, value);
173
+ const result = acc.replace(`:${key}`, encodeURIComponent(value));
173
174
 
174
175
  if (result === acc) {
175
176
  throw new Error(
@@ -181,31 +182,36 @@ export abstract class ApiClient {
181
182
  }, path);
182
183
  }
183
184
 
184
- private addQuery(url: URL, query?: IHttpQuery): void {
185
+ private createUrl(path: string, query?: IHttpQuery): string {
186
+ const base = this.baseUrl.replace(/\/+$/, "");
187
+ const normalizedPath = path.startsWith("/") ? path : `/${path}`;
188
+ const queryString = this.buildQueryString(query);
189
+ return queryString
190
+ ? `${base}${normalizedPath}?${queryString}`
191
+ : `${base}${normalizedPath}`;
192
+ }
193
+
194
+ private buildQueryString(query?: IHttpQuery): string {
185
195
  if (!query) {
186
- return;
196
+ return "";
187
197
  }
188
198
 
189
- const searchParams = url.searchParams;
199
+ const params = new URLSearchParams();
190
200
  for (const [key, value] of Object.entries(query)) {
191
201
  if (value === undefined) {
192
202
  continue;
193
203
  }
194
204
  if (!Array.isArray(value)) {
195
- searchParams.append(key, value);
205
+ params.append(key, value);
196
206
  continue;
197
207
  }
198
-
199
208
  for (const item of value) {
200
- searchParams.append(key, item);
209
+ if (item !== undefined) {
210
+ params.append(key, item);
211
+ }
201
212
  }
202
213
  }
203
- }
204
-
205
- private createUrl(path: string, query?: IHttpQuery): string {
206
- const url = new URL(path, this.baseUrl);
207
- this.addQuery(url, query);
208
- return url.toString();
214
+ return params.toString();
209
215
  }
210
216
 
211
217
  private createHeader(header: any): any {
@@ -0,0 +1 @@
1
+ {"inputs":{"../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js":{"bytes":569,"imports":[],"format":"esm"},"src/ClientGenerator.ts":{"bytes":5968,"imports":[{"path":"node:path","kind":"import-statement","external":true},{"path":"node:url","kind":"import-statement","external":true},{"path":"@rexeus/typeweaver-zod-to-ts","kind":"import-statement","external":true},{"path":"case","kind":"import-statement","external":true},{"path":"/home/runner/work/typeweaver/typeweaver/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":669,"imports":[{"path":"node:path","kind":"import-statement","external":true},{"path":"node:url","kind":"import-statement","external":true},{"path":"@rexeus/typeweaver-gen","kind":"import-statement","external":true},{"path":"src/ClientGenerator.ts","kind":"import-statement","original":"./ClientGenerator"},{"path":"/home/runner/work/typeweaver/typeweaver/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/index.cjs":{"imports":[{"path":"node:path","kind":"import-statement","external":true},{"path":"node:url","kind":"import-statement","external":true},{"path":"@rexeus/typeweaver-gen","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"node:url","kind":"import-statement","external":true},{"path":"@rexeus/typeweaver-zod-to-ts","kind":"import-statement","external":true},{"path":"case","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/index.ts","inputs":{"../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js":{"bytesInOutput":314},"src/index.ts":{"bytesInOutput":443},"src/ClientGenerator.ts":{"bytesInOutput":5138}},"bytes":6125}}}
@@ -0,0 +1 @@
1
+ {"inputs":{"../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3/node_modules/tsup/assets/esm_shims.js":{"bytes":322,"imports":[{"path":"node:path","kind":"import-statement","external":true},{"path":"node:url","kind":"import-statement","external":true}],"format":"esm"},"src/ClientGenerator.ts":{"bytes":5968,"imports":[{"path":"node:path","kind":"import-statement","external":true},{"path":"node:url","kind":"import-statement","external":true},{"path":"@rexeus/typeweaver-zod-to-ts","kind":"import-statement","external":true},{"path":"case","kind":"import-statement","external":true},{"path":"/home/runner/work/typeweaver/typeweaver/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3/node_modules/tsup/assets/esm_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":669,"imports":[{"path":"node:path","kind":"import-statement","external":true},{"path":"node:url","kind":"import-statement","external":true},{"path":"@rexeus/typeweaver-gen","kind":"import-statement","external":true},{"path":"src/ClientGenerator.ts","kind":"import-statement","original":"./ClientGenerator"},{"path":"/home/runner/work/typeweaver/typeweaver/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3/node_modules/tsup/assets/esm_shims.js","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/index.js":{"imports":[{"path":"node:path","kind":"import-statement","external":true},{"path":"node:url","kind":"import-statement","external":true},{"path":"@rexeus/typeweaver-gen","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"node:url","kind":"import-statement","external":true},{"path":"@rexeus/typeweaver-zod-to-ts","kind":"import-statement","external":true},{"path":"case","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":445},"src/ClientGenerator.ts":{"bytesInOutput":5140}},"bytes":5684}}}
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@rexeus/typeweaver-clients",
3
- "version": "0.3.2",
3
+ "version": "0.4.1",
4
4
  "description": "Generates HTTP clients directly from your API definitions. Powered by Typeweaver 🧵✨",
5
5
  "type": "module",
6
+ "sideEffects": false,
6
7
  "main": "dist/index.cjs",
7
8
  "module": "dist/index.js",
8
9
  "types": "dist/index.d.ts",
@@ -46,20 +47,22 @@
46
47
  },
47
48
  "homepage": "https://github.com/rexeus/typeweaver#readme",
48
49
  "peerDependencies": {
49
- "axios": "^1.13.2",
50
- "@rexeus/typeweaver-core": "^0.3.2",
51
- "@rexeus/typeweaver-gen": "^0.3.2"
50
+ "axios": "^1.13.0",
51
+ "zod": "^4.3.0",
52
+ "@rexeus/typeweaver-core": "^0.4.1",
53
+ "@rexeus/typeweaver-gen": "^0.4.1"
52
54
  },
53
55
  "devDependencies": {
54
56
  "@hono/node-server": "^1.19.7",
55
57
  "axios": "^1.13.2",
56
58
  "test-utils": "file:../test-utils",
57
- "@rexeus/typeweaver-gen": "^0.3.2",
58
- "@rexeus/typeweaver-core": "^0.3.2"
59
+ "zod": "^4.3.6",
60
+ "@rexeus/typeweaver-core": "^0.4.1",
61
+ "@rexeus/typeweaver-gen": "^0.4.1"
59
62
  },
60
63
  "dependencies": {
61
64
  "case": "^1.6.3",
62
- "@rexeus/typeweaver-zod-to-ts": "^0.3.2"
65
+ "@rexeus/typeweaver-zod-to-ts": "^0.4.1"
63
66
  },
64
67
  "scripts": {
65
68
  "typecheck": "tsc --noEmit",