@fern-api/fdr-sdk 0.138.1-9a1be9c78 → 0.138.1-a4aa0aad1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"curl.d.ts","sourceRoot":"","sources":["../../../src/api-definition/snippets/curl.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,kBAAkB,EAInB,MAAM,sBAAsB,CAAC;AAM9B,UAAU,KAAK;IACb,kCAAkC,EAAE,OAAO,CAAC;CAC7C;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,kBAAkB,EAC3B,IAAI,EAAE,KAAK,GACV,MAAM,CAQR;AA0CD,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,MAAM,EAAE,CAKV"}
1
+ {"version":3,"file":"curl.d.ts","sourceRoot":"","sources":["../../../src/api-definition/snippets/curl.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,kBAAkB,EAInB,MAAM,sBAAsB,CAAC;AAM9B,UAAU,KAAK;IACb,kCAAkC,EAAE,OAAO,CAAC;CAC7C;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,kBAAkB,EAC3B,IAAI,EAAE,KAAK,GACV,MAAM,CAQR;AA0CD,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,MAAM,EAAE,CAQV"}
@@ -1,7 +1,8 @@
1
1
  import { compact } from "es-toolkit/array";
2
+ import qs from "qs";
2
3
  import { UnreachableCaseError } from "ts-essentials";
3
4
  import { obfuscateSecret } from "@fern-api/fdr-sdk";
4
- import { isNonNullish, isPlainObject, unknownToString, } from "@fern-api/ui-core-utils";
5
+ import { isPlainObject, unknownToString, } from "@fern-api/ui-core-utils";
5
6
  import { wrapOpenRPCRequest } from "../wrapOpenRPCRequest";
6
7
  function requiresUrlEncode(str) {
7
8
  return encodeURIComponent(str) !== str;
@@ -39,7 +40,13 @@ function getBasicAuthString(basicAuth, redacted) {
39
40
  return [`-u "${basicAuth.username}:${basicAuth.password}"`];
40
41
  }
41
42
  export function getUrlQueriesGetString(searchParams) {
42
- return toUrlEncoded(searchParams).map(([key, value]) => `${requiresUrlEncode(value) ? "--data-urlencode" : "-d"} ${key.includes("[") ? `"${key}"` : key}=${value.includes(" ") ? `"${value}"` : value}`);
43
+ return toUrlEncoded(searchParams).map(([key, value]) => {
44
+ const flag = requiresUrlEncode(value) ? "--data-urlencode" : "-d";
45
+ if (key.includes(" ") || value.includes(" ") || key.includes("[")) {
46
+ return `${flag} "${key}=${value}"`;
47
+ }
48
+ return `${flag} ${key}=${value}`;
49
+ });
43
50
  }
44
51
  function getBodyJsonString(value, protocol) {
45
52
  if (protocol?.type === "openrpc") {
@@ -162,13 +169,22 @@ function unsafeStringifyHttpRequestExampleToCurl({ method, url, searchParams, he
162
169
  return `curl ${httpRequest}${allStrings.map(withNewLine).join("")}`;
163
170
  }
164
171
  function toUrlEncoded(urlQueries) {
165
- return Object.entries(urlQueries).flatMap(([key, value]) => {
166
- if (Array.isArray(value)) {
167
- return value.filter(isNonNullish).map((v) => [key, unknownToString(v)]);
168
- }
169
- if (value == null) {
170
- return [];
171
- }
172
- return [[key, unknownToString(value)]];
172
+ const queryString = qs.stringify(urlQueries, {
173
+ encode: false,
174
+ arrayFormat: "repeat",
175
+ skipNulls: true,
176
+ filter: (prefix, value) => {
177
+ if (value !== null && typeof value !== "object") {
178
+ return String(value);
179
+ }
180
+ return value;
181
+ },
182
+ });
183
+ if (!queryString) {
184
+ return [];
185
+ }
186
+ return queryString.split("&").map((pair) => {
187
+ const [key, value] = pair.split("=");
188
+ return [key, value || ""];
173
189
  });
174
190
  }
@@ -183,7 +183,7 @@ describe("curl", () => {
183
183
  }, { usesApplicationJsonInFormDataValue: false })).toMatchInlineSnapshot(`
184
184
  "curl -X POST https://api.example.com/form \\
185
185
  -H "Content-Type: application/x-www-form-urlencoded" \\
186
- --data-urlencode name="John Doe" \\
186
+ --data-urlencode "name=John Doe" \\
187
187
  --data-urlencode email=john@example.com \\
188
188
  -d items=item1 \\
189
189
  -d items=item2"
@@ -202,18 +202,18 @@ describe("curl", () => {
202
202
  body: undefined,
203
203
  }, { usesApplicationJsonInFormDataValue: false })).toMatchInlineSnapshot(`
204
204
  "curl -G https://api.example.com/search \\
205
- --data-urlencode q="search term with spaces" \\
205
+ --data-urlencode "q=search term with spaces" \\
206
206
  -d filter=category1 \\
207
207
  -d filter=category2 \\
208
- --data-urlencode sort="date desc""
208
+ --data-urlencode "sort=date desc""
209
209
  `);
210
210
  });
211
211
  it("does not include nulls in urlencoded parameters", () => {
212
212
  expect(getUrlQueriesGetString({ a: null, b: "b" })).toMatchInlineSnapshot(`
213
- [
214
- "-d b=b",
215
- ]
216
- `);
213
+ [
214
+ "-d b=b",
215
+ ]
216
+ `);
217
217
  expect(getUrlQueriesGetString({ a: ["b1", null, "b2"] }))
218
218
  .toMatchInlineSnapshot(`
219
219
  [
@@ -281,4 +281,22 @@ describe("curl", () => {
281
281
  -F tags="tag3""
282
282
  `);
283
283
  });
284
+ it("generates GET request with object query params", () => {
285
+ expect(convertToCurl({
286
+ method: "GET",
287
+ url: "https://api.example.com/obj-query-params",
288
+ headers: {},
289
+ searchParams: {
290
+ include: "verifications",
291
+ fields: {
292
+ "verification/driver-license": "status,created-at",
293
+ },
294
+ },
295
+ body: undefined,
296
+ }, { usesApplicationJsonInFormDataValue: false })).toMatchInlineSnapshot(`
297
+ "curl -G https://api.example.com/obj-query-params \\
298
+ -d include=verifications \\
299
+ --data-urlencode "fields[verification/driver-license]=status,created-at""
300
+ `);
301
+ });
284
302
  });
@@ -1 +1 @@
1
- {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/api-definition/url.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAmC7D,UAAU,sBAAsB;IAC9B,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,wBAAgB,eAAe,CAAC,EAC9B,OAAY,EACZ,IAAI,EACJ,cAAc,EACd,eAAe,GAChB,EAAE,sBAAsB,GAAG,MAAM,CAMjC;AAED,UAAU,uBAAuB;IAC/B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,cAAc,EACd,eAAe,EACf,OAAO,GACR,EAAE,uBAAuB,GAAG,MAAM,CAalC"}
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/api-definition/url.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAmD7D,UAAU,sBAAsB;IAC9B,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,wBAAgB,eAAe,CAAC,EAC9B,OAAY,EACZ,IAAI,EACJ,cAAc,EACd,eAAe,GAChB,EAAE,sBAAsB,GAAG,MAAM,CAMjC;AAED,UAAU,uBAAuB;IAC/B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,cAAc,EACd,eAAe,EACf,OAAO,GACR,EAAE,uBAAuB,GAAG,MAAM,CAalC"}
@@ -1,15 +1,25 @@
1
+ import qs from "qs";
1
2
  import { unknownToString } from "@fern-api/ui-core-utils";
2
3
  function buildQueryParams(queryParameters) {
3
4
  if (queryParameters == null) {
4
5
  return "";
5
6
  }
6
- const queryParams = new URLSearchParams();
7
- Object.entries(queryParameters).forEach(([key, value]) => {
7
+ const filteredParams = Object.entries(queryParameters).reduce((acc, [key, value]) => {
8
8
  if (value != null) {
9
- queryParams.set(key, unknownToString(value));
9
+ acc[key] = value;
10
10
  }
11
+ return acc;
12
+ }, {});
13
+ if (Object.keys(filteredParams).length === 0) {
14
+ return "";
15
+ }
16
+ const queryString = qs.stringify(filteredParams, {
17
+ encode: false,
18
+ arrayFormat: "repeat",
19
+ skipNulls: true,
20
+ serializeDate: (date) => date.toISOString(),
11
21
  });
12
- return queryParams.size > 0 ? "?" + queryParams.toString() : "";
22
+ return queryString ? "?" + queryString : "";
13
23
  }
14
24
  function buildPath(path = [], pathParameters) {
15
25
  return path
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fern-api/fdr-sdk",
3
- "version": "0.138.1-9a1be9c78",
3
+ "version": "0.138.1-a4aa0aad1",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "exports": {
@@ -49,7 +49,7 @@
49
49
  "test:update": "vitest --run --passWithNoTests --globals -u"
50
50
  },
51
51
  "dependencies": {
52
- "@fern-api/ui-core-utils": "0.138.1-9a1be9c78*",
52
+ "@fern-api/ui-core-utils": "0.138.1-a4aa0aad1*",
53
53
  "@ungap/structured-clone": "^1.2.0",
54
54
  "dayjs": "^1.11.11",
55
55
  "es-toolkit": "^1.32.0",
@@ -68,7 +68,7 @@
68
68
  "@babel/core": "^7.26.9",
69
69
  "@babel/preset-env": "^7.26.0",
70
70
  "@babel/preset-typescript": "^7.26.0",
71
- "@fern-platform/configs": "0.138.1-9a1be9c78*",
71
+ "@fern-platform/configs": "0.138.1-a4aa0aad1*",
72
72
  "@types/node-fetch": "2.6.9",
73
73
  "@types/qs": "6.9.14",
74
74
  "@types/tinycolor2": "^1.4.6",