@rest-vir/define-service 1.3.1 → 1.3.2

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,5 +1,5 @@
1
1
  import { check } from '@augment-vir/assert';
2
- import { addPrefix, filterMap, getObjectTypedEntries, HttpMethod, } from '@augment-vir/common';
2
+ import { addPrefix, filterMap, getObjectTypedEntries, HttpMethod, mapObject, } from '@augment-vir/common';
3
3
  import { assertValidShape } from 'object-shape-tester';
4
4
  import { buildUrl } from 'url-vir';
5
5
  import { parseJsonWithUndefined } from '../augments/json.js';
@@ -94,13 +94,17 @@ export async function fetchEndpoint(endpoint, ...params) {
94
94
  * @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
95
95
  */
96
96
  export function buildEndpointRequestInit(endpoint, ...[{ method, options = {}, pathParams, requestData, searchParams, wildcard } = {},]) {
97
- const headers = options.headers instanceof Headers
97
+ const headers = mapObject(options.headers instanceof Headers
98
98
  ? Object.fromEntries(options.headers.entries())
99
99
  : check.isArray(options.headers)
100
100
  ? Object.fromEntries(options.headers)
101
- : options.headers || {};
102
- const hasContentTypeHeader = Object.keys(headers).some((headerKey) => headerKey.toLowerCase() === 'content-type');
103
- if (!hasContentTypeHeader) {
101
+ : options.headers || {}, (key, value) => {
102
+ return {
103
+ key: key.toLowerCase(),
104
+ value,
105
+ };
106
+ });
107
+ if (!headers['content-type']) {
104
108
  if (requestData instanceof FormData) {
105
109
  /**
106
110
  * Do not set `content-type` manually when submitting form data because the browser will
@@ -112,6 +116,7 @@ export function buildEndpointRequestInit(endpoint, ...[{ method, options = {}, p
112
116
  headers['content-type'] = 'application/json';
113
117
  }
114
118
  }
119
+ const shouldStringify = !!headers['content-type']?.match(/\bjson\b/i);
115
120
  const url = buildEndpointUrl(endpoint, {
116
121
  pathParams,
117
122
  searchParams,
@@ -121,15 +126,15 @@ export function buildEndpointRequestInit(endpoint, ...[{ method, options = {}, p
121
126
  ...options,
122
127
  headers,
123
128
  method: filterToValidMethod(endpoint, method),
124
- ...(requestData instanceof FormData
125
- ? {
126
- body: requestData,
127
- }
128
- : requestData
129
+ ...(requestData
130
+ ? shouldStringify
129
131
  ? {
130
132
  body: JSON.stringify(requestData),
131
133
  }
132
- : {}),
134
+ : {
135
+ body: requestData,
136
+ }
137
+ : {}),
133
138
  };
134
139
  return {
135
140
  url,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rest-vir/define-service",
3
- "version": "1.3.1",
3
+ "version": "1.3.2",
4
4
  "description": "Define an connect to a declarative and type safe REST and WebSocket service.",
5
5
  "keywords": [
6
6
  "rest",