bcchapi 1.0.2 → 1.0.4

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/README.md CHANGED
@@ -78,7 +78,7 @@ _Output_
78
78
 
79
79
  ### SearchSeries
80
80
 
81
- Allows you to search for series by their frequency code (ie: daily, weekly, monthly, yearly).
81
+ Allows you to search for series by their frequency code (ie: daily, monthly, quarterly, yearly).
82
82
 
83
83
  #### Parameters
84
84
 
package/dist/client.js CHANGED
@@ -22,15 +22,11 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
25
  Object.defineProperty(exports, "__esModule", { value: true });
29
26
  exports.Client = exports.Frequency = void 0;
30
27
  const querystring = __importStar(require("node:querystring"));
31
28
  const assert = __importStar(require("node:assert/strict"));
32
- const parsers_1 = require("./helpers/parsers");
33
- const is_valid_date_1 = __importDefault(require("./helpers/is-valid-date"));
29
+ const utils_1 = require("./utils");
34
30
  var Frequency;
35
31
  (function (Frequency) {
36
32
  Frequency["Daily"] = "DAILY";
@@ -65,17 +61,17 @@ class Client {
65
61
  function: 'GetSeries',
66
62
  };
67
63
  if (since) {
68
- assert.ok((0, is_valid_date_1.default)(since), '"since" is not a valid date string or Date object');
64
+ assert.ok((0, utils_1.isValidDate)(since), '"since" is not a valid date string or Date object');
69
65
  query.firstdate = typeof since === 'string' ? since : since.toISOString().slice(0, 10);
70
66
  }
71
67
  if (until) {
72
- assert.ok((0, is_valid_date_1.default)(until), '"until" is not a valid date string or Date object');
68
+ assert.ok((0, utils_1.isValidDate)(until), '"until" is not a valid date string or Date object');
73
69
  query.lastdate = typeof until === 'string' ? until : until.toISOString().slice(0, 10);
74
70
  }
75
71
  if (query.firstdate && query.lastdate) {
76
72
  assert.ok(query.firstdate <= query.lastdate, 'invalid date range');
77
73
  }
78
- return this.request(query).then(parsers_1.parseGetSeriesResponse);
74
+ return this.request(query).then(utils_1.parseGetSeriesResponse);
79
75
  }
80
76
  /**
81
77
  * Fetches the list of available series by frequency and their metadata.
@@ -87,7 +83,7 @@ class Client {
87
83
  frequency,
88
84
  function: 'SearchSeries',
89
85
  };
90
- return this.request(query).then(parsers_1.parseSearchSeriesResponse);
86
+ return this.request(query).then(utils_1.parseSearchSeriesResponse);
91
87
  }
92
88
  }
93
89
  exports.Client = Client;
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- interface SeriesValue {
1
+ export interface SeriesObservation {
2
2
  /**
3
3
  * Series observed date in DD-MM-YYYY format.
4
4
  */
@@ -12,7 +12,7 @@ interface SeriesValue {
12
12
  */
13
13
  statusCode: 'OK' | 'ND';
14
14
  }
15
- interface SeriesHistory {
15
+ export interface SeriesHistory {
16
16
  /**
17
17
  * Series identifier.
18
18
  */
@@ -28,12 +28,12 @@ interface SeriesHistory {
28
28
  /**
29
29
  * List of series observed values.
30
30
  */
31
- Obs: SeriesValue[];
31
+ Obs: SeriesObservation[];
32
32
  }
33
- type NullSeries = {
33
+ export type NullSeries = {
34
34
  [key in keyof SeriesHistory]: null;
35
35
  };
36
- interface SeriesMetadata {
36
+ export interface SeriesMetadata {
37
37
  /**
38
38
  * Series identifier.
39
39
  */
@@ -106,4 +106,3 @@ export type SearchSeriesResponse = ReadonlyArray<{
106
106
  updatedAt: string;
107
107
  createdAt: string;
108
108
  }>;
109
- export {};
@@ -0,0 +1,17 @@
1
+ import { ApiResponse, GetSeriesResponse, SearchSeriesResponse } from './types';
2
+ /**
3
+ * Determines wether a given value can be parsed to a valid date.
4
+ */
5
+ export declare function isValidDate(date: unknown): boolean;
6
+ /**
7
+ * Reverses a date string from DD-MM-YYYY to YYYY-MM-DD format.
8
+ */
9
+ export declare function reverseDate(date: string): string;
10
+ /**
11
+ * Parses the GetSeries function API response.
12
+ */
13
+ export declare function parseGetSeriesResponse<T extends ApiResponse>(response: T): GetSeriesResponse;
14
+ /**
15
+ * Parses the SearchSeries function API response.
16
+ */
17
+ export declare function parseSearchSeriesResponse<T extends ApiResponse>(response: T): SearchSeriesResponse;
@@ -1,18 +1,37 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.parseSearchSeriesResponse = exports.parseGetSeriesResponse = void 0;
7
- const reverse_date_1 = __importDefault(require("./reverse-date"));
8
- const errors_1 = require("../errors");
3
+ exports.parseSearchSeriesResponse = exports.parseGetSeriesResponse = exports.reverseDate = exports.isValidDate = void 0;
4
+ const errors_1 = require("./errors");
5
+ /**
6
+ * Determines wether a given value can be parsed to a valid date.
7
+ */
8
+ function isValidDate(date) {
9
+ if (typeof date === 'string') {
10
+ return !Number.isNaN(Date.parse(date));
11
+ }
12
+ if (date instanceof Date) {
13
+ return !Number.isNaN(date.getTime());
14
+ }
15
+ return false;
16
+ }
17
+ exports.isValidDate = isValidDate;
18
+ /**
19
+ * Reverses a date string from DD-MM-YYYY to YYYY-MM-DD format.
20
+ */
21
+ function reverseDate(date) {
22
+ return date.split('-').reverse().join('-');
23
+ }
24
+ exports.reverseDate = reverseDate;
25
+ /**
26
+ * Parses the GetSeries function API response.
27
+ */
9
28
  function parseGetSeriesResponse(response) {
10
29
  if (response.Codigo !== 0) {
11
30
  switch (response.Codigo) {
12
31
  case errors_1.ErrorCodes.InvalidCredentials:
13
- throw new errors_1.InvalidCredentialsError();
32
+ throw new errors_1.InvalidCredentialsError(response);
14
33
  case errors_1.ErrorCodes.InvalidSeries:
15
- throw new errors_1.InvalidSeriesError();
34
+ throw new errors_1.InvalidSeriesError(response);
16
35
  default:
17
36
  throw new errors_1.WebServiceError(response);
18
37
  }
@@ -21,19 +40,22 @@ function parseGetSeriesResponse(response) {
21
40
  seriesId: response.Series.seriesId || '',
22
41
  description: response.Series.descripIng || '',
23
42
  data: (response.Series.Obs || []).map((obs) => ({
24
- date: (0, reverse_date_1.default)(obs.indexDateString),
43
+ date: reverseDate(obs.indexDateString),
25
44
  value: parseFloat(obs.value),
26
45
  })),
27
46
  };
28
47
  }
29
48
  exports.parseGetSeriesResponse = parseGetSeriesResponse;
49
+ /**
50
+ * Parses the SearchSeries function API response.
51
+ */
30
52
  function parseSearchSeriesResponse(response) {
31
53
  if (response.Codigo !== 0) {
32
54
  switch (response.Codigo) {
33
55
  case errors_1.ErrorCodes.InvalidCredentials:
34
- throw new errors_1.InvalidCredentialsError();
56
+ throw new errors_1.InvalidCredentialsError(response);
35
57
  case errors_1.ErrorCodes.InvalidFrequency:
36
- throw new errors_1.InvalidFrequencyError();
58
+ throw new errors_1.InvalidFrequencyError(response);
37
59
  default:
38
60
  throw new errors_1.WebServiceError(response);
39
61
  }
@@ -42,10 +64,10 @@ function parseSearchSeriesResponse(response) {
42
64
  seriesId: series.seriesId,
43
65
  frequency: series.frequencyCode,
44
66
  title: series.englishTitle,
45
- firstObservedAt: (0, reverse_date_1.default)(series.firstObservation),
46
- lastObservedAt: (0, reverse_date_1.default)(series.lastObservation),
47
- updatedAt: (0, reverse_date_1.default)(series.updatedAt),
48
- createdAt: (0, reverse_date_1.default)(series.createdAt),
67
+ firstObservedAt: reverseDate(series.firstObservation),
68
+ lastObservedAt: reverseDate(series.lastObservation),
69
+ updatedAt: reverseDate(series.updatedAt),
70
+ createdAt: reverseDate(series.createdAt),
49
71
  }));
50
72
  }
51
73
  exports.parseSearchSeriesResponse = parseSearchSeriesResponse;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bcchapi",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "API para acceder al Web Service del Banco Central de Chile.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/client.ts CHANGED
@@ -1,8 +1,7 @@
1
1
  import * as querystring from 'node:querystring';
2
2
  import * as assert from 'node:assert/strict';
3
3
  import { GetSeriesResponse, SearchSeriesResponse, ApiResponse } from './types';
4
- import { parseGetSeriesResponse, parseSearchSeriesResponse } from './helpers/parsers';
5
- import isValidDate from './helpers/is-valid-date';
4
+ import { isValidDate, parseGetSeriesResponse, parseSearchSeriesResponse } from './utils';
6
5
 
7
6
  export interface ClientConfig {
8
7
  /**
package/src/types.ts CHANGED
@@ -1,4 +1,4 @@
1
- interface SeriesValue {
1
+ export interface SeriesObservation {
2
2
  /**
3
3
  * Series observed date in DD-MM-YYYY format.
4
4
  */
@@ -13,7 +13,7 @@ interface SeriesValue {
13
13
  statusCode: 'OK' | 'ND';
14
14
  }
15
15
 
16
- interface SeriesHistory {
16
+ export interface SeriesHistory {
17
17
  /**
18
18
  * Series identifier.
19
19
  */
@@ -29,14 +29,14 @@ interface SeriesHistory {
29
29
  /**
30
30
  * List of series observed values.
31
31
  */
32
- Obs: SeriesValue[];
32
+ Obs: SeriesObservation[];
33
33
  }
34
34
 
35
- type NullSeries = {
35
+ export type NullSeries = {
36
36
  [key in keyof SeriesHistory]: null;
37
37
  };
38
38
 
39
- interface SeriesMetadata {
39
+ export interface SeriesMetadata {
40
40
  /**
41
41
  * Series identifier.
42
42
  */
@@ -1,20 +1,49 @@
1
- import reverseDate from './reverse-date';
2
1
  import {
3
2
  ErrorCodes,
4
3
  InvalidFrequencyError,
5
4
  InvalidCredentialsError,
6
5
  InvalidSeriesError,
7
6
  WebServiceError,
8
- } from '../errors';
9
- import { ApiResponse, ErrorResponse, GetSeriesResponse, SearchSeriesResponse } from '../types';
7
+ } from './errors';
8
+ import {
9
+ ApiResponse,
10
+ SeriesObservation,
11
+ SeriesMetadata,
12
+ ErrorResponse,
13
+ GetSeriesResponse,
14
+ SearchSeriesResponse,
15
+ } from './types';
16
+
17
+ /**
18
+ * Determines wether a given value can be parsed to a valid date.
19
+ */
20
+ export function isValidDate(date: unknown): boolean {
21
+ if (typeof date === 'string') {
22
+ return !Number.isNaN(Date.parse(date));
23
+ }
24
+ if (date instanceof Date) {
25
+ return !Number.isNaN(date.getTime());
26
+ }
27
+ return false;
28
+ }
29
+
30
+ /**
31
+ * Reverses a date string from DD-MM-YYYY to YYYY-MM-DD format.
32
+ */
33
+ export function reverseDate(date: string): string {
34
+ return date.split('-').reverse().join('-');
35
+ }
10
36
 
37
+ /**
38
+ * Parses the GetSeries function API response.
39
+ */
11
40
  export function parseGetSeriesResponse<T extends ApiResponse>(response: T): GetSeriesResponse {
12
41
  if (response.Codigo !== 0) {
13
42
  switch (response.Codigo) {
14
43
  case ErrorCodes.InvalidCredentials:
15
- throw new InvalidCredentialsError();
44
+ throw new InvalidCredentialsError(response as ApiResponse as ErrorResponse);
16
45
  case ErrorCodes.InvalidSeries:
17
- throw new InvalidSeriesError();
46
+ throw new InvalidSeriesError(response as ApiResponse as ErrorResponse);
18
47
  default:
19
48
  throw new WebServiceError(response as ApiResponse as ErrorResponse);
20
49
  }
@@ -23,28 +52,31 @@ export function parseGetSeriesResponse<T extends ApiResponse>(response: T): GetS
23
52
  return {
24
53
  seriesId: response.Series.seriesId || '',
25
54
  description: response.Series.descripIng || '',
26
- data: (response.Series.Obs || []).map((obs) => ({
55
+ data: (response.Series.Obs || []).map((obs: SeriesObservation) => ({
27
56
  date: reverseDate(obs.indexDateString),
28
57
  value: parseFloat(obs.value),
29
58
  })),
30
59
  };
31
60
  }
32
61
 
62
+ /**
63
+ * Parses the SearchSeries function API response.
64
+ */
33
65
  export function parseSearchSeriesResponse<T extends ApiResponse>(
34
66
  response: T,
35
67
  ): SearchSeriesResponse {
36
68
  if (response.Codigo !== 0) {
37
69
  switch (response.Codigo) {
38
70
  case ErrorCodes.InvalidCredentials:
39
- throw new InvalidCredentialsError();
71
+ throw new InvalidCredentialsError(response as ApiResponse as ErrorResponse);
40
72
  case ErrorCodes.InvalidFrequency:
41
- throw new InvalidFrequencyError();
73
+ throw new InvalidFrequencyError(response as ApiResponse as ErrorResponse);
42
74
  default:
43
75
  throw new WebServiceError(response as ApiResponse as ErrorResponse);
44
76
  }
45
77
  }
46
78
 
47
- return response.SeriesInfos.map((series) => ({
79
+ return response.SeriesInfos.map((series: SeriesMetadata) => ({
48
80
  seriesId: series.seriesId,
49
81
  frequency: series.frequencyCode,
50
82
  title: series.englishTitle,
@@ -6,9 +6,9 @@ import {
6
6
  InvalidSeriesError,
7
7
  InvalidFrequencyError,
8
8
  } from '../src';
9
+ import { reverseDate } from '../src/utils';
9
10
  import fetchMock from './mocks/fetch.mock';
10
11
  import fixtures from './fixtures';
11
- import reverseDate from '../src/helpers/reverse-date';
12
12
 
13
13
  const fetchSpy = vi.spyOn(global, 'fetch').mockImplementation(fetchMock);
14
14
 
@@ -1,5 +1,5 @@
1
1
  import { Frequency } from '../../src/client';
2
- import reverseDate from '../../src/helpers/reverse-date';
2
+ import { reverseDate } from '../../src/utils';
3
3
  import fixtures from '../fixtures';
4
4
 
5
5
  export default (input: string | URL | Request) => {
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect } from 'vitest';
2
- import isValidDate from '../../src/helpers/is-valid-date';
2
+ import { isValidDate } from '../../src/utils';
3
3
 
4
4
  describe('isValidDate', () => {
5
5
  it('should return true if the date is valid', () => {
@@ -1,6 +1,6 @@
1
1
  import { describe, it, expect } from 'vitest';
2
2
  import * as Errors from '../../src/errors';
3
- import { parseGetSeriesResponse } from '../../src/helpers/parsers';
3
+ import { parseGetSeriesResponse } from '../../src/utils';
4
4
  import { ApiResponse } from '../../src/types';
5
5
  import fixtures from '../fixtures';
6
6
 
@@ -1,7 +1,7 @@
1
1
  import { describe, it, expect } from 'vitest';
2
2
  import * as Errors from '../../src/errors';
3
3
  import { ApiResponse } from '../../src/types';
4
- import { parseSearchSeriesResponse } from '../../src/helpers/parsers';
4
+ import { parseSearchSeriesResponse } from '../../src/utils';
5
5
  import fixtures from '../fixtures';
6
6
 
7
7
  describe('parseSearchSeriesResponse', () => {
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect } from 'vitest';
2
- import reverseDate from '../../src/helpers/reverse-date';
2
+ import { reverseDate } from '../../src/utils';
3
3
 
4
4
  describe('reverseDate', () => {
5
5
  it('should reverse correctly a date in DD-MM-YYYY format', () => {
@@ -1 +0,0 @@
1
- export default function isValidDate(date: unknown): boolean;
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- function isValidDate(date) {
4
- if (typeof date === 'string') {
5
- return !Number.isNaN(Date.parse(date));
6
- }
7
- if (date instanceof Date) {
8
- return !Number.isNaN(date.getTime());
9
- }
10
- return false;
11
- }
12
- exports.default = isValidDate;
@@ -1,3 +0,0 @@
1
- import { ApiResponse, GetSeriesResponse, SearchSeriesResponse } from '../types';
2
- export declare function parseGetSeriesResponse<T extends ApiResponse>(response: T): GetSeriesResponse;
3
- export declare function parseSearchSeriesResponse<T extends ApiResponse>(response: T): SearchSeriesResponse;
@@ -1 +0,0 @@
1
- export default function reverseDate(date: string): string;
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- function reverseDate(date) {
4
- return date.split('-').reverse().join('-');
5
- }
6
- exports.default = reverseDate;
@@ -1,9 +0,0 @@
1
- export default function isValidDate(date: unknown): boolean {
2
- if (typeof date === 'string') {
3
- return !Number.isNaN(Date.parse(date));
4
- }
5
- if (date instanceof Date) {
6
- return !Number.isNaN(date.getTime());
7
- }
8
- return false;
9
- }
@@ -1,3 +0,0 @@
1
- export default function reverseDate(date: string): string {
2
- return date.split('-').reverse().join('-');
3
- }