@algolia/client-common 5.0.0-alpha.101 → 5.0.0-alpha.102

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.
@@ -17,16 +17,30 @@ function createAuth(appId, apiKey, authMode = 'WithinHeaders') {
17
17
 
18
18
  function getUrlParams({
19
19
  host,
20
- searchParams: urlSearchParams,
20
+ search,
21
21
  pathname
22
22
  }) {
23
- const algoliaAgent = urlSearchParams.get('x-algolia-agent') || '';
23
+ const urlSearchParams = search.split('?');
24
+ if (urlSearchParams.length === 1) {
25
+ return {
26
+ host,
27
+ algoliaAgent: '',
28
+ searchParams: undefined,
29
+ path: pathname
30
+ };
31
+ }
32
+ const splitSearchParams = urlSearchParams[1].split('&');
33
+ let algoliaAgent = '';
24
34
  const searchParams = {};
25
- for (const [k, v] of urlSearchParams) {
26
- if (k === 'x-algolia-agent') {
27
- continue;
28
- }
29
- searchParams[k] = v;
35
+ if (splitSearchParams.length > 0) {
36
+ splitSearchParams.forEach(param => {
37
+ const [key, value] = param.split('=');
38
+ if (key === 'x-algolia-agent') {
39
+ algoliaAgent = value;
40
+ return;
41
+ }
42
+ searchParams[key] = value;
43
+ });
30
44
  }
31
45
  return {
32
46
  host,
@@ -51,7 +65,7 @@ function createEchoRequester({
51
65
  data: request.data ? JSON.parse(request.data) : undefined,
52
66
  path,
53
67
  host,
54
- algoliaAgent: encodeURIComponent(algoliaAgent),
68
+ algoliaAgent,
55
69
  searchParams
56
70
  };
57
71
  return Promise.resolve({
@@ -373,7 +387,7 @@ function shuffle(array) {
373
387
  }
374
388
  function serializeUrl(host, path, queryParameters) {
375
389
  const queryParametersAsString = serializeQueryParameters(queryParameters);
376
- let url = `${host.protocol}://${host.url}/${path.charAt(0) === '/' ? path.substr(1) : path}`;
390
+ let url = `${host.protocol}://${host.url}${host.port ? `:${host.port}` : ''}/${path.charAt(0) === '/' ? path.substr(1) : path}`;
377
391
  if (queryParametersAsString.length) {
378
392
  url += `?${queryParametersAsString}`;
379
393
  }
@@ -381,7 +395,7 @@ function serializeUrl(host, path, queryParameters) {
381
395
  }
382
396
  function serializeQueryParameters(parameters) {
383
397
  const isObjectOrArray = value => Object.prototype.toString.call(value) === '[object Object]' || Object.prototype.toString.call(value) === '[object Array]';
384
- return Object.keys(parameters).map(key => `${key}=${encodeURIComponent(isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key])}`).join('&');
398
+ return Object.keys(parameters).map(key => `${key}=${encodeURIComponent(isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key]).replaceAll('+', '%20')}`).join('&');
385
399
  }
386
400
  function serializeData(request, requestOptions) {
387
401
  if (request.method === 'GET' || request.data === undefined && requestOptions.data === undefined) {
@@ -15,16 +15,30 @@ function createAuth(appId, apiKey, authMode = 'WithinHeaders') {
15
15
 
16
16
  function getUrlParams({
17
17
  host,
18
- searchParams: urlSearchParams,
18
+ search,
19
19
  pathname
20
20
  }) {
21
- const algoliaAgent = urlSearchParams.get('x-algolia-agent') || '';
21
+ const urlSearchParams = search.split('?');
22
+ if (urlSearchParams.length === 1) {
23
+ return {
24
+ host,
25
+ algoliaAgent: '',
26
+ searchParams: undefined,
27
+ path: pathname
28
+ };
29
+ }
30
+ const splitSearchParams = urlSearchParams[1].split('&');
31
+ let algoliaAgent = '';
22
32
  const searchParams = {};
23
- for (const [k, v] of urlSearchParams) {
24
- if (k === 'x-algolia-agent') {
25
- continue;
26
- }
27
- searchParams[k] = v;
33
+ if (splitSearchParams.length > 0) {
34
+ splitSearchParams.forEach(param => {
35
+ const [key, value] = param.split('=');
36
+ if (key === 'x-algolia-agent') {
37
+ algoliaAgent = value;
38
+ return;
39
+ }
40
+ searchParams[key] = value;
41
+ });
28
42
  }
29
43
  return {
30
44
  host,
@@ -49,7 +63,7 @@ function createEchoRequester({
49
63
  data: request.data ? JSON.parse(request.data) : undefined,
50
64
  path,
51
65
  host,
52
- algoliaAgent: encodeURIComponent(algoliaAgent),
66
+ algoliaAgent,
53
67
  searchParams
54
68
  };
55
69
  return Promise.resolve({
@@ -371,7 +385,7 @@ function shuffle(array) {
371
385
  }
372
386
  function serializeUrl(host, path, queryParameters) {
373
387
  const queryParametersAsString = serializeQueryParameters(queryParameters);
374
- let url = `${host.protocol}://${host.url}/${path.charAt(0) === '/' ? path.substr(1) : path}`;
388
+ let url = `${host.protocol}://${host.url}${host.port ? `:${host.port}` : ''}/${path.charAt(0) === '/' ? path.substr(1) : path}`;
375
389
  if (queryParametersAsString.length) {
376
390
  url += `?${queryParametersAsString}`;
377
391
  }
@@ -379,7 +393,7 @@ function serializeUrl(host, path, queryParameters) {
379
393
  }
380
394
  function serializeQueryParameters(parameters) {
381
395
  const isObjectOrArray = value => Object.prototype.toString.call(value) === '[object Object]' || Object.prototype.toString.call(value) === '[object Array]';
382
- return Object.keys(parameters).map(key => `${key}=${encodeURIComponent(isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key])}`).join('&');
396
+ return Object.keys(parameters).map(key => `${key}=${encodeURIComponent(isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key]).replaceAll('+', '%20')}`).join('&');
383
397
  }
384
398
  function serializeData(request, requestOptions) {
385
399
  if (request.method === 'GET' || request.data === undefined && requestOptions.data === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"createEchoRequester.d.ts","sourceRoot":"","sources":["../../src/createEchoRequester.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,SAAS,EAAY,MAAM,SAAS,CAAC;AAE7E,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AA2BF,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,MAAY,GACb,EAAE,mBAAmB,GAAG,SAAS,CAuBjC"}
1
+ {"version":3,"file":"createEchoRequester.d.ts","sourceRoot":"","sources":["../../src/createEchoRequester.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,SAAS,EAAY,MAAM,SAAS,CAAC;AAE7E,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AA0CF,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,MAAY,GACb,EAAE,mBAAmB,GAAG,SAAS,CAuBjC"}
@@ -11,6 +11,10 @@ export type Host = {
11
11
  * The protocol of the host URL.
12
12
  */
13
13
  protocol: 'http' | 'https';
14
+ /**
15
+ * The port of the host URL.
16
+ */
17
+ port?: number;
14
18
  };
15
19
  export type StatefulHost = Host & {
16
20
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../src/types/host.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG;IACjB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;IAEvC;;OAEG;IACH,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG;IAChC;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IAEpC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC;CAC3B,CAAC"}
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../src/types/host.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG;IACjB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;IAEvC;;OAEG;IACH,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAE3B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG;IAChC;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IAEpC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC;CAC3B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@algolia/client-common",
3
- "version": "5.0.0-alpha.101",
3
+ "version": "5.0.0-alpha.102",
4
4
  "description": "Common package for the Algolia JavaScript API client.",
5
5
  "repository": "algolia/algoliasearch-client-javascript",
6
6
  "license": "MIT",
@@ -22,8 +22,8 @@
22
22
  "devDependencies": {
23
23
  "@babel/preset-env": "7.23.9",
24
24
  "@babel/preset-typescript": "7.23.3",
25
- "@types/jest": "29.5.11",
26
- "@types/node": "20.11.0",
25
+ "@types/jest": "29.5.12",
26
+ "@types/node": "20.11.19",
27
27
  "jest": "29.7.0",
28
28
  "jest-environment-jsdom": "29.7.0",
29
29
  "ts-jest": "29.1.2",
@@ -7,18 +7,33 @@ export type EchoRequesterParams = {
7
7
 
8
8
  function getUrlParams({
9
9
  host,
10
- searchParams: urlSearchParams,
10
+ search,
11
11
  pathname,
12
12
  }: URL): Pick<EchoResponse, 'algoliaAgent' | 'host' | 'path' | 'searchParams'> {
13
- const algoliaAgent = urlSearchParams.get('x-algolia-agent') || '';
13
+ const urlSearchParams = search.split('?');
14
+ if (urlSearchParams.length === 1) {
15
+ return {
16
+ host,
17
+ algoliaAgent: '',
18
+ searchParams: undefined,
19
+ path: pathname,
20
+ };
21
+ }
22
+
23
+ const splitSearchParams = urlSearchParams[1].split('&');
24
+ let algoliaAgent = '';
14
25
  const searchParams: Record<string, string> = {};
15
26
 
16
- for (const [k, v] of urlSearchParams) {
17
- if (k === 'x-algolia-agent') {
18
- continue;
19
- }
27
+ if (splitSearchParams.length > 0) {
28
+ splitSearchParams.forEach((param) => {
29
+ const [key, value] = param.split('=');
30
+ if (key === 'x-algolia-agent') {
31
+ algoliaAgent = value;
32
+ return;
33
+ }
20
34
 
21
- searchParams[k] = v;
35
+ searchParams[key] = value;
36
+ });
22
37
  }
23
38
 
24
39
  return {
@@ -44,7 +59,7 @@ export function createEchoRequester({
44
59
  data: request.data ? JSON.parse(request.data) : undefined,
45
60
  path,
46
61
  host,
47
- algoliaAgent: encodeURIComponent(algoliaAgent),
62
+ algoliaAgent,
48
63
  searchParams,
49
64
  };
50
65
 
@@ -30,7 +30,7 @@ export function serializeUrl(
30
30
  queryParameters: QueryParameters
31
31
  ): string {
32
32
  const queryParametersAsString = serializeQueryParameters(queryParameters);
33
- let url = `${host.protocol}://${host.url}/${
33
+ let url = `${host.protocol}://${host.url}${host.port ? `:${host.port}` : ''}/${
34
34
  path.charAt(0) === '/' ? path.substr(1) : path
35
35
  }`;
36
36
 
@@ -53,7 +53,7 @@ export function serializeQueryParameters(parameters: QueryParameters): string {
53
53
  isObjectOrArray(parameters[key])
54
54
  ? JSON.stringify(parameters[key])
55
55
  : parameters[key]
56
- )}`
56
+ ).replaceAll('+', '%20')}`
57
57
  )
58
58
  .join('&');
59
59
  }
package/src/types/host.ts CHANGED
@@ -13,6 +13,11 @@ export type Host = {
13
13
  * The protocol of the host URL.
14
14
  */
15
15
  protocol: 'http' | 'https';
16
+
17
+ /**
18
+ * The port of the host URL.
19
+ */
20
+ port?: number;
16
21
  };
17
22
 
18
23
  export type StatefulHost = Host & {