@algolia/requester-browser-xhr 5.3.1 → 5.4.0

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.
@@ -2,6 +2,4 @@ import { Requester } from '@algolia/client-common';
2
2
 
3
3
  declare function createXhrRequester(): Requester;
4
4
 
5
- declare function echoRequester(status?: number): Requester;
6
-
7
- export { createXhrRequester, echoRequester };
5
+ export { createXhrRequester };
@@ -1,2 +1,2 @@
1
- function c(){function r(t){return new Promise(s=>{let e=new XMLHttpRequest;e.open(t.method,t.url,!0),Object.keys(t.headers).forEach(n=>e.setRequestHeader(n,t.headers[n]));let i=(n,m)=>setTimeout(()=>{e.abort(),s({status:0,content:m,isTimedOut:!0})},n),u=i(t.connectTimeout,"Connection timeout"),o;e.onreadystatechange=()=>{e.readyState>e.OPENED&&o===void 0&&(clearTimeout(u),o=i(t.responseTimeout,"Socket timeout"))},e.onerror=()=>{e.status===0&&(clearTimeout(u),clearTimeout(o),s({content:e.responseText||"Network request failed",status:e.status,isTimedOut:!1}))},e.onload=()=>{clearTimeout(u),clearTimeout(o),s({content:e.responseText,status:e.status,isTimedOut:!1})},e.send(t.data)})}return{send:r}}import{createEchoRequester as a}from"@algolia/client-common";function p(r=200){return a({getURL:t=>new URL(t),status:r})}export{c as createXhrRequester,p as echoRequester};
1
+ function m(){function r(t){return new Promise(s=>{let e=new XMLHttpRequest;e.open(t.method,t.url,!0),Object.keys(t.headers).forEach(n=>e.setRequestHeader(n,t.headers[n]));let i=(n,a)=>setTimeout(()=>{e.abort(),s({status:0,content:a,isTimedOut:!0})},n),u=i(t.connectTimeout,"Connection timeout"),o;e.onreadystatechange=()=>{e.readyState>e.OPENED&&o===void 0&&(clearTimeout(u),o=i(t.responseTimeout,"Socket timeout"))},e.onerror=()=>{e.status===0&&(clearTimeout(u),clearTimeout(o),s({content:e.responseText||"Network request failed",status:e.status,isTimedOut:!1}))},e.onload=()=>{clearTimeout(u),clearTimeout(o),s({content:e.responseText,status:e.status,isTimedOut:!1})},e.send(t.data)})}return{send:r}}export{m as createXhrRequester};
2
2
  //# sourceMappingURL=requester.xhr.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/createXhrRequester.ts","../src/echoRequester.ts"],"sourcesContent":["import type { EndRequest, Requester, Response } from '@algolia/client-common';\n\ntype Timeout = ReturnType<typeof setTimeout>;\n\nexport function createXhrRequester(): Requester {\n function send(request: EndRequest): Promise<Response> {\n return new Promise((resolve) => {\n const baseRequester = new XMLHttpRequest();\n baseRequester.open(request.method, request.url, true);\n\n Object.keys(request.headers).forEach((key) => baseRequester.setRequestHeader(key, request.headers[key]));\n\n const createTimeout = (timeout: number, content: string): Timeout => {\n return setTimeout(() => {\n baseRequester.abort();\n\n resolve({\n status: 0,\n content,\n isTimedOut: true,\n });\n }, timeout);\n };\n\n const connectTimeout = createTimeout(request.connectTimeout, 'Connection timeout');\n\n let responseTimeout: Timeout | undefined;\n\n baseRequester.onreadystatechange = (): void => {\n if (baseRequester.readyState > baseRequester.OPENED && responseTimeout === undefined) {\n clearTimeout(connectTimeout);\n\n responseTimeout = createTimeout(request.responseTimeout, 'Socket timeout');\n }\n };\n\n baseRequester.onerror = (): void => {\n // istanbul ignore next\n if (baseRequester.status === 0) {\n clearTimeout(connectTimeout);\n clearTimeout(responseTimeout!);\n\n resolve({\n content: baseRequester.responseText || 'Network request failed',\n status: baseRequester.status,\n isTimedOut: false,\n });\n }\n };\n\n baseRequester.onload = (): void => {\n clearTimeout(connectTimeout);\n clearTimeout(responseTimeout!);\n\n resolve({\n content: baseRequester.responseText,\n status: baseRequester.status,\n isTimedOut: false,\n });\n };\n\n baseRequester.send(request.data);\n });\n }\n\n return { send };\n}\n","import { createEchoRequester } from '@algolia/client-common';\nimport type { Requester } from '@algolia/client-common';\n\nexport function echoRequester(status: number = 200): Requester {\n return createEchoRequester({ getURL: (url: string) => new URL(url), status });\n}\n"],"mappings":"AAIO,SAASA,GAAgC,CAC9C,SAASC,EAAKC,EAAwC,CACpD,OAAO,IAAI,QAASC,GAAY,CAC9B,IAAMC,EAAgB,IAAI,eAC1BA,EAAc,KAAKF,EAAQ,OAAQA,EAAQ,IAAK,EAAI,EAEpD,OAAO,KAAKA,EAAQ,OAAO,EAAE,QAASG,GAAQD,EAAc,iBAAiBC,EAAKH,EAAQ,QAAQG,CAAG,CAAC,CAAC,EAEvG,IAAMC,EAAgB,CAACC,EAAiBC,IAC/B,WAAW,IAAM,CACtBJ,EAAc,MAAM,EAEpBD,EAAQ,CACN,OAAQ,EACR,QAAAK,EACA,WAAY,EACd,CAAC,CACH,EAAGD,CAAO,EAGNE,EAAiBH,EAAcJ,EAAQ,eAAgB,oBAAoB,EAE7EQ,EAEJN,EAAc,mBAAqB,IAAY,CACzCA,EAAc,WAAaA,EAAc,QAAUM,IAAoB,SACzE,aAAaD,CAAc,EAE3BC,EAAkBJ,EAAcJ,EAAQ,gBAAiB,gBAAgB,EAE7E,EAEAE,EAAc,QAAU,IAAY,CAE9BA,EAAc,SAAW,IAC3B,aAAaK,CAAc,EAC3B,aAAaC,CAAgB,EAE7BP,EAAQ,CACN,QAASC,EAAc,cAAgB,yBACvC,OAAQA,EAAc,OACtB,WAAY,EACd,CAAC,EAEL,EAEAA,EAAc,OAAS,IAAY,CACjC,aAAaK,CAAc,EAC3B,aAAaC,CAAgB,EAE7BP,EAAQ,CACN,QAASC,EAAc,aACvB,OAAQA,EAAc,OACtB,WAAY,EACd,CAAC,CACH,EAEAA,EAAc,KAAKF,EAAQ,IAAI,CACjC,CAAC,CACH,CAEA,MAAO,CAAE,KAAAD,CAAK,CAChB,CClEA,OAAS,uBAAAU,MAA2B,yBAG7B,SAASC,EAAcC,EAAiB,IAAgB,CAC7D,OAAOF,EAAoB,CAAE,OAASG,GAAgB,IAAI,IAAIA,CAAG,EAAG,OAAAD,CAAO,CAAC,CAC9E","names":["createXhrRequester","send","request","resolve","baseRequester","key","createTimeout","timeout","content","connectTimeout","responseTimeout","createEchoRequester","echoRequester","status","url"]}
1
+ {"version":3,"sources":["../src/createXhrRequester.ts"],"sourcesContent":["import type { EndRequest, Requester, Response } from '@algolia/client-common';\n\ntype Timeout = ReturnType<typeof setTimeout>;\n\nexport function createXhrRequester(): Requester {\n function send(request: EndRequest): Promise<Response> {\n return new Promise((resolve) => {\n const baseRequester = new XMLHttpRequest();\n baseRequester.open(request.method, request.url, true);\n\n Object.keys(request.headers).forEach((key) => baseRequester.setRequestHeader(key, request.headers[key]));\n\n const createTimeout = (timeout: number, content: string): Timeout => {\n return setTimeout(() => {\n baseRequester.abort();\n\n resolve({\n status: 0,\n content,\n isTimedOut: true,\n });\n }, timeout);\n };\n\n const connectTimeout = createTimeout(request.connectTimeout, 'Connection timeout');\n\n let responseTimeout: Timeout | undefined;\n\n baseRequester.onreadystatechange = (): void => {\n if (baseRequester.readyState > baseRequester.OPENED && responseTimeout === undefined) {\n clearTimeout(connectTimeout);\n\n responseTimeout = createTimeout(request.responseTimeout, 'Socket timeout');\n }\n };\n\n baseRequester.onerror = (): void => {\n // istanbul ignore next\n if (baseRequester.status === 0) {\n clearTimeout(connectTimeout);\n clearTimeout(responseTimeout!);\n\n resolve({\n content: baseRequester.responseText || 'Network request failed',\n status: baseRequester.status,\n isTimedOut: false,\n });\n }\n };\n\n baseRequester.onload = (): void => {\n clearTimeout(connectTimeout);\n clearTimeout(responseTimeout!);\n\n resolve({\n content: baseRequester.responseText,\n status: baseRequester.status,\n isTimedOut: false,\n });\n };\n\n baseRequester.send(request.data);\n });\n }\n\n return { send };\n}\n"],"mappings":"AAIO,SAASA,GAAgC,CAC9C,SAASC,EAAKC,EAAwC,CACpD,OAAO,IAAI,QAASC,GAAY,CAC9B,IAAMC,EAAgB,IAAI,eAC1BA,EAAc,KAAKF,EAAQ,OAAQA,EAAQ,IAAK,EAAI,EAEpD,OAAO,KAAKA,EAAQ,OAAO,EAAE,QAASG,GAAQD,EAAc,iBAAiBC,EAAKH,EAAQ,QAAQG,CAAG,CAAC,CAAC,EAEvG,IAAMC,EAAgB,CAACC,EAAiBC,IAC/B,WAAW,IAAM,CACtBJ,EAAc,MAAM,EAEpBD,EAAQ,CACN,OAAQ,EACR,QAAAK,EACA,WAAY,EACd,CAAC,CACH,EAAGD,CAAO,EAGNE,EAAiBH,EAAcJ,EAAQ,eAAgB,oBAAoB,EAE7EQ,EAEJN,EAAc,mBAAqB,IAAY,CACzCA,EAAc,WAAaA,EAAc,QAAUM,IAAoB,SACzE,aAAaD,CAAc,EAE3BC,EAAkBJ,EAAcJ,EAAQ,gBAAiB,gBAAgB,EAE7E,EAEAE,EAAc,QAAU,IAAY,CAE9BA,EAAc,SAAW,IAC3B,aAAaK,CAAc,EAC3B,aAAaC,CAAgB,EAE7BP,EAAQ,CACN,QAASC,EAAc,cAAgB,yBACvC,OAAQA,EAAc,OACtB,WAAY,EACd,CAAC,EAEL,EAEAA,EAAc,OAAS,IAAY,CACjC,aAAaK,CAAc,EAC3B,aAAaC,CAAgB,EAE7BP,EAAQ,CACN,QAASC,EAAc,aACvB,OAAQA,EAAc,OACtB,WAAY,EACd,CAAC,CACH,EAEAA,EAAc,KAAKF,EAAQ,IAAI,CACjC,CAAC,CACH,CAEA,MAAO,CAAE,KAAAD,CAAK,CAChB","names":["createXhrRequester","send","request","resolve","baseRequester","key","createTimeout","timeout","content","connectTimeout","responseTimeout"]}
package/index.ts CHANGED
@@ -1,2 +1 @@
1
1
  export * from './src/createXhrRequester';
2
- export * from './src/echoRequester';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@algolia/requester-browser-xhr",
3
- "version": "5.3.1",
3
+ "version": "5.4.0",
4
4
  "description": "Promise-based request library for browser using xhr.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -26,24 +26,20 @@
26
26
  "scripts": {
27
27
  "build": "yarn clean && yarn tsup",
28
28
  "clean": "rm -rf ./dist || true",
29
- "test": "jest",
29
+ "test": "vitest --run",
30
30
  "test:bundle": "publint . && attw --pack . --ignore-rules cjs-resolves-to-esm"
31
31
  },
32
32
  "dependencies": {
33
- "@algolia/client-common": "5.3.1"
33
+ "@algolia/client-common": "5.4.0"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@arethetypeswrong/cli": "0.16.1",
37
- "@babel/preset-env": "7.25.4",
38
- "@babel/preset-typescript": "7.24.7",
39
- "@types/jest": "29.5.12",
40
37
  "@types/node": "22.5.1",
41
- "jest": "29.7.0",
42
- "jest-environment-jsdom": "29.7.0",
38
+ "jsdom": "25.0.0",
43
39
  "publint": "0.2.10",
44
- "ts-jest": "29.2.5",
45
40
  "tsup": "8.2.4",
46
41
  "typescript": "5.5.4",
42
+ "vitest": "2.0.5",
47
43
  "xhr-mock": "2.5.1"
48
44
  },
49
45
  "engines": {
@@ -1,6 +1,7 @@
1
1
  import type http from 'http';
2
2
 
3
3
  import type { EndRequest } from '@algolia/client-common';
4
+ import { describe, test, beforeAll, afterAll, beforeEach, afterEach, expect } from 'vitest';
4
5
  import type { MockRequest, MockResponse } from 'xhr-mock';
5
6
  import mock from 'xhr-mock';
6
7
 
@@ -17,10 +18,14 @@ import {
17
18
  const requester = createXhrRequester();
18
19
 
19
20
  describe('status code handling', () => {
20
- beforeEach(() => mock.setup());
21
- afterEach(() => mock.teardown());
21
+ beforeEach(() => {
22
+ mock.setup();
23
+ });
24
+ afterEach(() => {
25
+ mock.teardown();
26
+ });
22
27
 
23
- it('sends requests', async () => {
28
+ test('sends requests', async () => {
24
29
  mock.post(BASE_URL, (req: MockRequest, res: MockResponse): MockResponse => {
25
30
  expect(req.method()).toEqual('POST');
26
31
  expect(req.header('content-type')).toEqual('text/plain');
@@ -32,7 +37,7 @@ describe('status code handling', () => {
32
37
  await requester.send(requestStub);
33
38
  });
34
39
 
35
- it('resolves status 200', async () => {
40
+ test('resolves status 200', async () => {
36
41
  const body = getStringifiedBody();
37
42
 
38
43
  mock.post(BASE_URL, {
@@ -47,7 +52,7 @@ describe('status code handling', () => {
47
52
  expect(response.isTimedOut).toBe(false);
48
53
  });
49
54
 
50
- it('resolves status 300', async () => {
55
+ test('resolves status 300', async () => {
51
56
  const reason = 'Multiple Choices';
52
57
 
53
58
  mock.post(BASE_URL, {
@@ -62,7 +67,7 @@ describe('status code handling', () => {
62
67
  expect(response.isTimedOut).toBe(false);
63
68
  });
64
69
 
65
- it('resolves status 400', async () => {
70
+ test('resolves status 400', async () => {
66
71
  const body = getStringifiedBody({
67
72
  message: 'Invalid Application-Id or API-Key',
68
73
  });
@@ -79,7 +84,7 @@ describe('status code handling', () => {
79
84
  expect(response.isTimedOut).toBe(false);
80
85
  });
81
86
 
82
- it('handles the protocol', async () => {
87
+ test('handles the protocol', async () => {
83
88
  const body = getStringifiedBody();
84
89
 
85
90
  mock.post('http://localhost/', {
@@ -107,11 +112,14 @@ describe('timeout handling', () => {
107
112
  server.listen('1111');
108
113
  });
109
114
 
110
- afterAll((done) => {
111
- server.close(() => done());
112
- });
115
+ afterAll(
116
+ () =>
117
+ new Promise((done) => {
118
+ done();
119
+ }),
120
+ );
113
121
 
114
- it('connection timeouts with the given 1 seconds connection timeout', async () => {
122
+ test('connection timeouts with the given 1 seconds connection timeout', async () => {
115
123
  const before = Date.now();
116
124
  const response = await requester.send({
117
125
  ...timeoutRequest,
@@ -126,7 +134,7 @@ describe('timeout handling', () => {
126
134
  expect(now - before).toBeLessThanOrEqual(1200);
127
135
  });
128
136
 
129
- it('connection timeouts with the given 2 seconds connection timeout', async () => {
137
+ test('connection timeouts with the given 2 seconds connection timeout', async () => {
130
138
  const before = Date.now();
131
139
  const response = await requester.send({
132
140
  ...timeoutRequest,
@@ -141,7 +149,7 @@ describe('timeout handling', () => {
141
149
  expect(now - before).toBeLessThanOrEqual(2200);
142
150
  });
143
151
 
144
- it("socket timeouts if response don't appears before the timeout with 2 seconds timeout", async () => {
152
+ test("socket timeouts if response don't appears before the timeout with 2 seconds timeout", async () => {
145
153
  const before = Date.now();
146
154
 
147
155
  const response = await requester.send({
@@ -157,7 +165,7 @@ describe('timeout handling', () => {
157
165
  expect(now - before).toBeLessThanOrEqual(2200);
158
166
  });
159
167
 
160
- it("socket timeouts if response don't appears before the timeout with 3 seconds timeout", async () => {
168
+ test("socket timeouts if response don't appears before the timeout with 3 seconds timeout", async () => {
161
169
  const before = Date.now();
162
170
 
163
171
  const response = await requester.send({
@@ -173,7 +181,7 @@ describe('timeout handling', () => {
173
181
  expect(now - before).toBeLessThanOrEqual(3200);
174
182
  });
175
183
 
176
- it('do not timeouts if response appears before the timeout', async () => {
184
+ test('do not timeouts if response appears before the timeout', async () => {
177
185
  const before = Date.now();
178
186
  const response = await requester.send({
179
187
  ...requestStub,
@@ -192,7 +200,7 @@ describe('timeout handling', () => {
192
200
  });
193
201
 
194
202
  describe('error handling', () => {
195
- it('resolves dns not found', async () => {
203
+ test('resolves dns not found', async () => {
196
204
  const request: EndRequest = {
197
205
  url: 'https://this-dont-exist.algolia.com',
198
206
  method: 'POST',
@@ -209,7 +217,7 @@ describe('error handling', () => {
209
217
  expect(response.isTimedOut).toBe(false);
210
218
  });
211
219
 
212
- it('resolves general network errors', async () => {
220
+ test('resolves general network errors', async () => {
213
221
  mock.post(BASE_URL, () => Promise.reject(new Error('This is a general error')));
214
222
 
215
223
  const response = await requester.send(requestStub);
@@ -1,6 +0,0 @@
1
- import { createEchoRequester } from '@algolia/client-common';
2
- import type { Requester } from '@algolia/client-common';
3
-
4
- export function echoRequester(status: number = 200): Requester {
5
- return createEchoRequester({ getURL: (url: string) => new URL(url), status });
6
- }