@bpd-library/utilities 1.3.4 → 1.3.5-beta.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.
@@ -37,6 +37,7 @@ export declare class HttpClient {
37
37
  delete: RequestFn;
38
38
  setToken: (token: string | undefined) => string | undefined;
39
39
  setBaseUrl: (baseUrl: string) => string;
40
+ setSecurityHeaders: (name: string, value: string) => void;
40
41
  private setAuthenticationHeaders;
41
42
  private setAbortController;
42
43
  request<T>(url: string | URL, requestConfig?: RequestConfig): Promise<T>;
package/dist/api/http.js CHANGED
@@ -21,6 +21,12 @@ export class HttpClient {
21
21
  this.delete = this.createRequest('DELETE');
22
22
  this.setToken = (token) => (this.token = token);
23
23
  this.setBaseUrl = (baseUrl) => (this.config.baseUrl = baseUrl);
24
+ this.setSecurityHeaders = (name, value) => {
25
+ var _a;
26
+ if ((_a = this.config) === null || _a === void 0 ? void 0 : _a.headers) {
27
+ this.config.headers = Object.assign(Object.assign({}, this.config.headers), { [name]: value });
28
+ }
29
+ };
24
30
  this.setAbortController = (config) => {
25
31
  const { createAbort } = config;
26
32
  if (createAbort) {
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/api/http.ts"],"names":[],"mappings":"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","sourcesContent":["import qs from 'qs';\n\nexport interface HttpErrorInput {\n message: string;\n statusCode: number;\n response?: Response;\n body?: any;\n}\n\nexport class HttpError extends Error {\n statusCode: number;\n response?: Response;\n body?: any;\n\n constructor(input: HttpErrorInput) {\n super(input.message);\n this.response = input.response;\n this.statusCode = input.statusCode;\n this.body = input.body;\n this.name = 'HttpError';\n }\n}\n\nexport type AbortFunction = () => void;\ntype Token = string | undefined;\ntype RequestFn = <T = any, I = any>(url: string, data: I, config?: RequestConfig) => Promise<T>;\ntype RequestGetFn = <T = any, I = any>(url: string, data?: I, config?: RequestConfig) => Promise<T>;\ntype BeforeHook = (client: HttpClient) => Promise<void> | void;\ntype ErrorHook = <T = any>(err: HttpError, request: () => Promise<T>) => any;\ntype HttpClientInit = RequestInit & {\n baseUrl?: string;\n returnType?: 'json' | 'text' | 'blob';\n /** This function is called before every request. This is where you would check if your token is still valid */\n beforeHook?: BeforeHook;\n /** Function that is called if an error occurs */\n onError?: ErrorHook;\n};\nexport type RequestConfig = HttpClientInit & {\n createAbort?: (abortFunction: AbortFunction) => void;\n};\n\n/**\n * Wrapper around fetch\n */\nexport class HttpClient {\n private defaultConfig: RequestConfig = {\n returnType: 'json',\n };\n\n private config: RequestConfig = {};\n private token: Token;\n\n constructor(config: HttpClientInit = {}) {\n this.config = {\n ...this.defaultConfig,\n ...config,\n };\n }\n\n /**\n *\n *\n * @private\n * @param {'GET'} method\n * @returns {RequestGetFn}\n * @memberof HttpClient\n */\n private createRequest(method: 'GET'): RequestGetFn;\n private createRequest(method: string): RequestFn;\n private createRequest(method: 'GET' | string): RequestFn {\n return (url, data, config) => {\n if (method === 'GET') {\n let getUrl = url;\n if (data) {\n getUrl = url + '?' + qs.stringify(data);\n }\n\n return this.request(getUrl, {\n ...config,\n method: 'GET',\n });\n }\n\n const contentType = config && config.headers && (config.headers as any)['Content-Type'];\n\n return this.request(url, {\n ...config,\n method,\n body: this.createBody(data, contentType),\n });\n };\n }\n\n public get = this.createRequest('GET');\n public post = this.createRequest('POST');\n public put = this.createRequest('PUT');\n public patch = this.createRequest('PATCH');\n public delete = this.createRequest('DELETE');\n\n public setToken = (token: Token) => (this.token = token);\n public setBaseUrl = (baseUrl: string) => (this.config.baseUrl = baseUrl);\n\n private setAuthenticationHeaders(config: RequestConfig) {\n // if authenticated set bearer token\n if (this.token) {\n config.headers = {\n ...config.headers,\n Authorization: `Bearer ${this.token}`,\n };\n }\n }\n\n /**\n *\n *\n * @private\n * @memberof HttpClient\n */\n private setAbortController = (config: RequestConfig) => {\n const { createAbort } = config;\n if (createAbort) {\n if (typeof AbortController !== undefined) {\n const controller = new AbortController();\n const { signal } = controller;\n config.signal = signal;\n createAbort(controller.abort.bind(controller));\n } else {\n createAbort(() =>\n console.log('The AbortController api isnt available in your browser'),\n );\n }\n }\n };\n\n /**\n *\n *\n * @template T\n * @param {(string | URL)} url\n * @param {RequestConfig} [requestConfig={}]\n * @returns {Promise<T>}\n * @memberof HttpClient\n */\n public async request<T>(url: string | URL, requestConfig: RequestConfig = {}): Promise<T> {\n const { beforeHook } = this.config;\n\n const config: RequestConfig = {\n ...this.config,\n ...requestConfig,\n };\n\n const { baseUrl = '' } = config;\n\n this.setAbortController(config);\n\n if (beforeHook) {\n await beforeHook(this);\n }\n\n this.setAuthenticationHeaders(config);\n\n const requestFn = fetch(baseUrl + url, config)\n .then(this.handleError)\n .then((res) => this.handleSuccess(res, config)) as Promise<T>;\n\n return requestFn.catch((err) =>\n this.onError<T>(err, () => this.request(url, requestConfig)),\n );\n }\n\n /**\n *\n *\n * @private\n * @param {Response} res\n * @param {RequestConfig} config\n * @returns\n * @memberof HttpClient\n */\n private handleSuccess(res: Response, config: RequestConfig) {\n const { returnType = 'json' } = config;\n\n if (res.status === 204 || res.status === 201 || !res[returnType]) {\n return res;\n }\n\n return res[returnType]();\n }\n\n private async onError<T = any>(err: HttpError, requestFn: () => Promise<T>) {\n const { onError } = this.config;\n\n if (onError) {\n return onError(err, requestFn);\n }\n\n throw err;\n }\n\n /**\n * createBody is responsible for creating a body based on the content type\n *\n * @param body The body\n * @param contentType The content type\n */\n private createBody(body: any, contentType: string): any {\n switch (contentType) {\n case 'application/json':\n return JSON.stringify(body);\n case 'application/x-www-form-urlencoded':\n return new URLSearchParams(body);\n default:\n return JSON.stringify(body);\n }\n }\n\n /**\n * Handles the errors if the fetch request fails and throws a HttpError\n * @param response\n */\n private async handleError(response: Response) {\n if (response.ok) {\n return response;\n }\n\n const responseBody = await response.text();\n let body: any = response;\n\n try {\n body = JSON.parse(responseBody);\n } catch (err) {\n body = responseBody;\n }\n\n const error = {\n message: `HttpError: ${response.status} - ${response.statusText}`,\n statusCode: response.status,\n response,\n body,\n };\n\n console.error(error);\n throw new HttpError(error);\n }\n}\n"]}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/api/http.ts"],"names":[],"mappings":"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","sourcesContent":["import qs from 'qs';\n\nexport interface HttpErrorInput {\n message: string;\n statusCode: number;\n response?: Response;\n body?: any;\n}\n\nexport class HttpError extends Error {\n statusCode: number;\n response?: Response;\n body?: any;\n\n constructor(input: HttpErrorInput) {\n super(input.message);\n this.response = input.response;\n this.statusCode = input.statusCode;\n this.body = input.body;\n this.name = 'HttpError';\n }\n}\n\nexport type AbortFunction = () => void;\ntype Token = string | undefined;\ntype RequestFn = <T = any, I = any>(url: string, data: I, config?: RequestConfig) => Promise<T>;\ntype RequestGetFn = <T = any, I = any>(url: string, data?: I, config?: RequestConfig) => Promise<T>;\ntype BeforeHook = (client: HttpClient) => Promise<void> | void;\ntype ErrorHook = <T = any>(err: HttpError, request: () => Promise<T>) => any;\ntype HttpClientInit = RequestInit & {\n baseUrl?: string;\n returnType?: 'json' | 'text' | 'blob';\n /** This function is called before every request. This is where you would check if your token is still valid */\n beforeHook?: BeforeHook;\n /** Function that is called if an error occurs */\n onError?: ErrorHook;\n};\nexport type RequestConfig = HttpClientInit & {\n createAbort?: (abortFunction: AbortFunction) => void;\n};\n\n/**\n * Wrapper around fetch\n */\nexport class HttpClient {\n private defaultConfig: RequestConfig = {\n returnType: 'json',\n };\n\n private config: RequestConfig = {};\n private token: Token;\n\n constructor(config: HttpClientInit = {}) {\n this.config = {\n ...this.defaultConfig,\n ...config,\n };\n }\n\n /**\n *\n *\n * @private\n * @param {'GET'} method\n * @returns {RequestGetFn}\n * @memberof HttpClient\n */\n private createRequest(method: 'GET'): RequestGetFn;\n private createRequest(method: string): RequestFn;\n private createRequest(method: 'GET' | string): RequestFn {\n return (url, data, config) => {\n if (method === 'GET') {\n let getUrl = url;\n if (data) {\n getUrl = url + '?' + qs.stringify(data);\n }\n\n return this.request(getUrl, {\n ...config,\n method: 'GET',\n });\n }\n\n const contentType = config && config.headers && (config.headers as any)['Content-Type'];\n\n return this.request(url, {\n ...config,\n method,\n body: this.createBody(data, contentType),\n });\n };\n }\n\n public get = this.createRequest('GET');\n public post = this.createRequest('POST');\n public put = this.createRequest('PUT');\n public patch = this.createRequest('PATCH');\n public delete = this.createRequest('DELETE');\n\n public setToken = (token: Token) => (this.token = token);\n public setBaseUrl = (baseUrl: string) => (this.config.baseUrl = baseUrl);\n public setSecurityHeaders = (name: string, value: string) => {\n if (this.config?.headers) {\n this.config.headers = {...this.config.headers, [name]: value}\n }\n }\n\n private setAuthenticationHeaders(config: RequestConfig) {\n // if authenticated set bearer token\n if (this.token) {\n config.headers = {\n ...config.headers,\n Authorization: `Bearer ${this.token}`,\n };\n }\n }\n\n /**\n *\n *\n * @private\n * @memberof HttpClient\n */\n private setAbortController = (config: RequestConfig) => {\n const { createAbort } = config;\n if (createAbort) {\n if (typeof AbortController !== undefined) {\n const controller = new AbortController();\n const { signal } = controller;\n config.signal = signal;\n createAbort(controller.abort.bind(controller));\n } else {\n createAbort(() =>\n console.log('The AbortController api isnt available in your browser'),\n );\n }\n }\n };\n\n /**\n *\n *\n * @template T\n * @param {(string | URL)} url\n * @param {RequestConfig} [requestConfig={}]\n * @returns {Promise<T>}\n * @memberof HttpClient\n */\n public async request<T>(url: string | URL, requestConfig: RequestConfig = {}): Promise<T> {\n const { beforeHook } = this.config;\n\n const config: RequestConfig = {\n ...this.config,\n ...requestConfig,\n };\n\n const { baseUrl = '' } = config;\n\n this.setAbortController(config);\n\n if (beforeHook) {\n await beforeHook(this);\n }\n\n this.setAuthenticationHeaders(config);\n\n const requestFn = fetch(baseUrl + url, config)\n .then(this.handleError)\n .then((res) => this.handleSuccess(res, config)) as Promise<T>;\n\n return requestFn.catch((err) =>\n this.onError<T>(err, () => this.request(url, requestConfig)),\n );\n }\n\n /**\n *\n *\n * @private\n * @param {Response} res\n * @param {RequestConfig} config\n * @returns\n * @memberof HttpClient\n */\n private handleSuccess(res: Response, config: RequestConfig) {\n const { returnType = 'json' } = config;\n\n if (res.status === 204 || res.status === 201 || !res[returnType]) {\n return res;\n }\n\n return res[returnType]();\n }\n\n private async onError<T = any>(err: HttpError, requestFn: () => Promise<T>) {\n const { onError } = this.config;\n\n if (onError) {\n return onError(err, requestFn);\n }\n\n throw err;\n }\n\n /**\n * createBody is responsible for creating a body based on the content type\n *\n * @param body The body\n * @param contentType The content type\n */\n private createBody(body: any, contentType: string): any {\n switch (contentType) {\n case 'application/json':\n return JSON.stringify(body);\n case 'application/x-www-form-urlencoded':\n return new URLSearchParams(body);\n default:\n return JSON.stringify(body);\n }\n }\n\n /**\n * Handles the errors if the fetch request fails and throws a HttpError\n * @param response\n */\n private async handleError(response: Response) {\n if (response.ok) {\n return response;\n }\n\n const responseBody = await response.text();\n let body: any = response;\n\n try {\n body = JSON.parse(responseBody);\n } catch (err) {\n body = responseBody;\n }\n\n const error = {\n message: `HttpError: ${response.status} - ${response.statusText}`,\n statusCode: response.status,\n response,\n body,\n };\n\n console.error(error);\n throw new HttpError(error);\n }\n}\n"]}
package/dist/api/index.js CHANGED
@@ -1,9 +1,7 @@
1
- import { environmentDetails } from '../environment';
2
1
  import { HttpClient } from './http';
3
- const { middlewareSecurityHeaderName, middlewareSecurityHeaderValue } = environmentDetails;
4
2
  export const APIClient = new HttpClient({
5
- headers: Object.assign({ 'Content-Type': 'application/json' }, (middlewareSecurityHeaderName && {
6
- [middlewareSecurityHeaderName]: middlewareSecurityHeaderValue,
7
- })),
3
+ headers: {
4
+ 'Content-Type': 'application/json',
5
+ },
8
6
  });
9
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,GAAG,kBAAkB,CAAC;AAE3F,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC;IACpC,OAAO,kBACH,cAAc,EAAE,kBAAkB,IAC/B,CAAC,4BAA4B,IAAI;QAChC,CAAC,4BAA4B,CAAC,EAAE,6BAA6B;KAChE,CAAC,CACL;CACJ,CAAC,CAAC","sourcesContent":["import { environmentDetails } from '../environment';\nimport { HttpClient } from './http';\n\nconst { middlewareSecurityHeaderName, middlewareSecurityHeaderValue } = environmentDetails;\n\nexport const APIClient = new HttpClient({\n headers: {\n 'Content-Type': 'application/json',\n ...(middlewareSecurityHeaderName && {\n [middlewareSecurityHeaderName]: middlewareSecurityHeaderValue,\n }),\n },\n});\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC;IACpC,OAAO,EAAE;QACL,cAAc,EAAE,kBAAkB;KACrC;CACJ,CAAC,CAAC","sourcesContent":["import { HttpClient } from './http';\n\nexport const APIClient = new HttpClient({\n headers: {\n 'Content-Type': 'application/json',\n },\n});\n"]}
@@ -10,6 +10,9 @@ class EnvironmentDetails {
10
10
  this.middlewareSecurityHeaderName = middlewareSecurityHeaderName;
11
11
  this.middlewareSecurityHeaderValue = middlewareSecurityHeaderValue;
12
12
  APIClient.setBaseUrl(apiBaseUrl);
13
+ if (this.middlewareSecurityHeaderValue && this.middlewareSecurityHeaderName) {
14
+ APIClient.setSecurityHeaders(this.middlewareSecurityHeaderName, this.middlewareSecurityHeaderValue);
15
+ }
13
16
  }
14
17
  get isLocal() {
15
18
  return this.environment === 'local';
@@ -1 +1 @@
1
- {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAkBlC,MAAM,kBAAkB;IAUpB,IAAI,CAAC,EACD,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,eAAe,EACf,MAAM,EACN,4BAA4B,EAC5B,6BAA6B,GACN;QACvB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,4BAA4B,GAAG,4BAA4B,CAAC;QACjE,IAAI,CAAC,6BAA6B,GAAG,6BAA6B,CAAC;QAEnE,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC;IACxC,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC;IACvC,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,WAAW,KAAK,YAAY,CAAC;IAC7C,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,WAAW,KAAK,YAAY,CAAC;IAC7C,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC","sourcesContent":["import { APIClient } from './api';\n\ninterface EnvironmentDetailsConfig {\n environment: string;\n mapboxAccessToken: string;\n mapboxStyle: string;\n apiBaseUrl: string;\n languageIsoCode: string;\n areaId?: string;\n middlewareSecurityHeaderName?: string;\n middlewareSecurityHeaderValue?: string;\n}\n\n/**\n * @description Sets up the environment details for the Shared Repo. init method must be called in the entry file before importing components.\n * @class EnvironmentDetails\n * @implements {Partial<EnvironmentDetailsConfig>}\n */\nclass EnvironmentDetails implements Partial<EnvironmentDetailsConfig> {\n environment?: string;\n mapboxAccessToken?: string;\n mapboxStyle?: string;\n apiBaseUrl?: string;\n languageIsoCode?: string;\n areaId?: string;\n middlewareSecurityHeaderName?: string;\n middlewareSecurityHeaderValue?: string;\n\n init({\n environment,\n mapboxAccessToken,\n apiBaseUrl,\n mapboxStyle,\n languageIsoCode,\n areaId,\n middlewareSecurityHeaderName,\n middlewareSecurityHeaderValue,\n }: EnvironmentDetailsConfig) {\n this.environment = environment;\n this.mapboxAccessToken = mapboxAccessToken;\n this.mapboxStyle = mapboxStyle;\n this.apiBaseUrl = apiBaseUrl;\n this.languageIsoCode = languageIsoCode;\n this.areaId = areaId;\n this.middlewareSecurityHeaderName = middlewareSecurityHeaderName;\n this.middlewareSecurityHeaderValue = middlewareSecurityHeaderValue;\n\n APIClient.setBaseUrl(apiBaseUrl);\n }\n\n get isLocal() {\n return this.environment === 'local';\n }\n\n get isTest() {\n return this.environment === 'test';\n }\n\n get isAcceptance() {\n return this.environment === 'acceptance';\n }\n\n get isProduction() {\n return this.environment === 'production';\n }\n}\n\nexport const environmentDetails = new EnvironmentDetails();\n"]}
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAkBlC,MAAM,kBAAkB;IAUpB,IAAI,CAAC,EACD,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,eAAe,EACf,MAAM,EACN,4BAA4B,EAC5B,6BAA6B,GACN;QACvB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,4BAA4B,GAAG,4BAA4B,CAAC;QACjE,IAAI,CAAC,6BAA6B,GAAG,6BAA6B,CAAC;QAEnE,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,6BAA6B,IAAI,IAAI,CAAC,4BAA4B,EAAE;YACzE,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,4BAA4B,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;SACvG;IACL,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC;IACxC,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC;IACvC,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,WAAW,KAAK,YAAY,CAAC;IAC7C,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,WAAW,KAAK,YAAY,CAAC;IAC7C,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC","sourcesContent":["import { APIClient } from './api';\n\ninterface EnvironmentDetailsConfig {\n environment: string;\n mapboxAccessToken: string;\n mapboxStyle: string;\n apiBaseUrl: string;\n languageIsoCode: string;\n areaId?: string;\n middlewareSecurityHeaderName?: string;\n middlewareSecurityHeaderValue?: string;\n}\n\n/**\n * @description Sets up the environment details for the Shared Repo. init method must be called in the entry file before importing components.\n * @class EnvironmentDetails\n * @implements {Partial<EnvironmentDetailsConfig>}\n */\nclass EnvironmentDetails implements Partial<EnvironmentDetailsConfig> {\n environment?: string;\n mapboxAccessToken?: string;\n mapboxStyle?: string;\n apiBaseUrl?: string;\n languageIsoCode?: string;\n areaId?: string;\n middlewareSecurityHeaderName?: string;\n middlewareSecurityHeaderValue?: string;\n\n init({\n environment,\n mapboxAccessToken,\n apiBaseUrl,\n mapboxStyle,\n languageIsoCode,\n areaId,\n middlewareSecurityHeaderName,\n middlewareSecurityHeaderValue,\n }: EnvironmentDetailsConfig) {\n this.environment = environment;\n this.mapboxAccessToken = mapboxAccessToken;\n this.mapboxStyle = mapboxStyle;\n this.apiBaseUrl = apiBaseUrl;\n this.languageIsoCode = languageIsoCode;\n this.areaId = areaId;\n this.middlewareSecurityHeaderName = middlewareSecurityHeaderName;\n this.middlewareSecurityHeaderValue = middlewareSecurityHeaderValue;\n\n APIClient.setBaseUrl(apiBaseUrl);\n if (this.middlewareSecurityHeaderValue && this.middlewareSecurityHeaderName) {\n APIClient.setSecurityHeaders(this.middlewareSecurityHeaderName, this.middlewareSecurityHeaderValue);\n }\n }\n\n get isLocal() {\n return this.environment === 'local';\n }\n\n get isTest() {\n return this.environment === 'test';\n }\n\n get isAcceptance() {\n return this.environment === 'acceptance';\n }\n\n get isProduction() {\n return this.environment === 'production';\n }\n}\n\nexport const environmentDetails = new EnvironmentDetails();\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"extended-area.js","sourceRoot":"","sources":["../../src/extended-api-models/extended-area.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ExtendedApartmentBuilding,\n ExtendedAreaProject,\n ExtendedConstructionNumber,\n ExtendedDistrict,\n ExtendedProjectPhase,\n ExtendedPropertyType,\n filterConstructionNumbers,\n filterPropertyTypes,\n findProjectPhase,\n findPropertyType,\n getDistrictStatus,\n} from '../api-utilities';\nimport { environmentDetails } from '../environment';\nimport {\n ApartmentBuildingModel,\n apartmentBuildingQuery,\n areaProjectGetById,\n AreaProjectModel,\n ConstructionNumberModel,\n constructionNumberQuery,\n DistrictModel,\n districtQuery,\n ProjectPhaseModel,\n projectPhaseQuery,\n PropertyTypeModel,\n propertyTypeQuery,\n} from '../generated';\nimport { COMPOSED_INCLUDE_STRINGS } from './included-properties';\nimport { getApartmentBuildingStatus } from './status/apartment-building-status';\nimport { constructionNumberStatus } from './status/construction-number-status';\nimport { getPropertyTypeStatus } from './status/property-type-status';\n\ninterface OriginalAreaModels {\n constructionNumbers: ConstructionNumberModel[];\n propertyTypes: PropertyTypeModel[];\n apartmentBuildings: ApartmentBuildingModel[];\n projectPhases: ProjectPhaseModel[];\n districts: DistrictModel[];\n areaProject: AreaProjectModel;\n}\n\ninterface ExtendedAreaModels {\n constructionNumbers: ExtendedConstructionNumber[];\n propertyTypes: ExtendedPropertyType[];\n apartmentBuildings: ExtendedApartmentBuilding[];\n projectPhases: ExtendedProjectPhase[];\n districts: ExtendedDistrict[];\n areaProject: ExtendedAreaProject;\n}\ninterface FilterFunctions {\n constructionNumber?: (constructionNumber: ConstructionNumberModel) => boolean;\n propertyType?: (propertyType: PropertyTypeModel) => boolean;\n apartmentBuilding?: (apartmentBuilding: ApartmentBuildingModel) => boolean;\n projectPhase?: (projectPhase: ProjectPhaseModel) => boolean;\n district?: (district: DistrictModel) => boolean;\n}\n\nconst ExtendedAreaModelsUtility = () => {\n const areaState: {\n [areaId: string]: {\n extendedData?: ExtendedAreaModels;\n resolveArray: Function[];\n filterFunctions?: FilterFunctions;\n };\n } = {};\n\n async function controller(areaId: string) {\n let originalData: OriginalAreaModels;\n\n if (hasSessionStorageData(areaId)) {\n originalData = fetchSessionStorageData(areaId)!;\n } else {\n originalData = await fetchData(areaId);\n setSessionStorageData(areaId, originalData);\n }\n\n // Objects without images, should not be shown on the website\n originalData = filterObjectsWithImages(originalData);\n\n areaState[areaId].extendedData = extendModels(originalData);\n\n setLoaded(areaId);\n }\n\n async function getData(areaId: string): Promise<ExtendedAreaModels> {\n if (!areaState[areaId]) {\n areaState[areaId] = {\n resolveArray: [],\n };\n\n // Controller handles fetching + extending of data\n controller(areaId);\n }\n\n const state = areaState[areaId];\n\n if (!state.extendedData) {\n /*\n if no extendedData is found, it means it's being fetched.\n Promises will be resolved after data is loaded\n */\n return new Promise((res) => {\n state.resolveArray.push(res);\n });\n } else {\n // if no extendedData is found, it comes from sessionStorage\n return state.extendedData;\n }\n }\n\n async function getCurrentAreaData(): Promise<ExtendedAreaModels> {\n return getData(environmentDetails.areaId!);\n }\n\n function setLoaded(areaId: string) {\n areaState[areaId].resolveArray.forEach((res) => {\n res(areaState[areaId].extendedData);\n });\n }\n\n function filterObjectsWithImages(data: OriginalAreaModels): OriginalAreaModels {\n return {\n ...data,\n constructionNumbers: data.constructionNumbers.filter(\n ({ mainImage }) => !!mainImage?.url,\n ),\n propertyTypes: data.propertyTypes.filter(({ mainImage }) => !!mainImage?.url),\n apartmentBuildings: data.apartmentBuildings.filter(({ image }) => !!image?.url),\n };\n }\n\n function sessionStorageId(areaId: string) {\n return `AreaObjects::${areaId}`;\n }\n\n function sessionStorageData(areaId: string) {\n return sessionStorage.getItem(sessionStorageId(areaId));\n }\n\n function hasSessionStorageData(areaId: string) {\n return !!sessionStorageData(areaId);\n }\n\n function fetchSessionStorageData(areaId: string) {\n if (hasSessionStorageData(areaId)) {\n return JSON.parse(sessionStorageData(areaId)!) as OriginalAreaModels;\n } else {\n return;\n }\n }\n\n function setSessionStorageData(areaId: string, originalData: OriginalAreaModels) {\n sessionStorage.setItem(sessionStorageId(areaId), JSON.stringify(originalData));\n }\n\n async function fetchData(areaId: string) {\n const propertyTypes = propertyTypeQuery({\n AreaProjectId: areaId,\n include: COMPOSED_INCLUDE_STRINGS.propertyType,\n });\n const constructionNumbers = constructionNumberQuery({\n AreaProjectId: areaId,\n include: COMPOSED_INCLUDE_STRINGS.constructionNumber,\n });\n const projectPhases = projectPhaseQuery({\n AreaProjectId: areaId,\n include: COMPOSED_INCLUDE_STRINGS.projectPhase,\n });\n const apartmentBuildings = apartmentBuildingQuery({\n AreaProjectId: areaId,\n include: COMPOSED_INCLUDE_STRINGS.apartmentBuilding,\n });\n const districts = districtQuery({\n AreaProjectId: areaId,\n include: COMPOSED_INCLUDE_STRINGS.district,\n });\n const areaProject = areaProjectGetById(areaId, {\n include: COMPOSED_INCLUDE_STRINGS.areaProject,\n });\n\n return {\n propertyTypes: await propertyTypes,\n constructionNumbers: await constructionNumbers,\n projectPhases: await projectPhases,\n apartmentBuildings: await apartmentBuildings,\n districts: await districts,\n areaProject: await areaProject,\n };\n }\n\n function extendModels(data: OriginalAreaModels): ExtendedAreaModels {\n const {\n constructionNumbers,\n propertyTypes,\n apartmentBuildings,\n projectPhases,\n districts,\n areaProject,\n } = data as ExtendedAreaModels;\n\n /*\n Extend constructionNumbers object\n */\n constructionNumbers.forEach((constructionNumber) => {\n const { propertyTypeId, projectPhaseId } = constructionNumber;\n\n constructionNumber.areaProject = areaProject;\n\n if (propertyTypeId) {\n constructionNumber.propertyType = findPropertyType(propertyTypes, {\n id: propertyTypeId,\n });\n }\n\n if (projectPhaseId) {\n constructionNumber.projectPhase = findProjectPhase(projectPhases, {\n id: projectPhaseId,\n });\n }\n\n constructionNumber.apartmentBuilding = apartmentBuildings.find((s) =>\n s.constructionNumberIds?.includes(constructionNumber.id),\n );\n\n constructionNumber.status = constructionNumberStatus(constructionNumber);\n\n constructionNumber.objectType = 'constructionNumber';\n });\n\n /*\n Extend propertTypes object\n */\n propertyTypes.forEach((propertyType) => {\n const { projectPhaseId, id } = propertyType;\n\n if (projectPhaseId) {\n propertyType.projectPhase = findProjectPhase(projectPhases, {\n id: projectPhaseId,\n });\n }\n\n propertyType.constructionNumbers = filterConstructionNumbers(constructionNumbers, {\n propertyTypeId: id,\n });\n\n if (propertyType.projectPhase) {\n propertyType.status = getPropertyTypeStatus(\n propertyType.projectPhase,\n propertyType.constructionNumbers,\n );\n }\n\n propertyType.apartmentBuildings = apartmentBuildings.filter((s) =>\n s.propertyTypeIds?.includes(propertyType.id),\n );\n\n propertyType.objectType = 'propertyType';\n });\n\n /*\n Extend projectPhase object\n */\n projectPhases.forEach((projectPhase) => {\n const { id } = projectPhase;\n\n projectPhase.propertyTypes = filterPropertyTypes(propertyTypes, {\n projectPhaseId: id,\n });\n projectPhase.constructionNumbers = filterConstructionNumbers(constructionNumbers, {\n projectPhaseId: id,\n });\n\n projectPhase.objectType = 'projectPhase';\n });\n\n /*\n Extend apartmentBuilding object\n */\n apartmentBuildings.forEach((apartmentBuilding) => {\n const { propertyTypeIds, constructionNumberIds, projectPhaseId } = apartmentBuilding;\n\n if (propertyTypeIds) {\n apartmentBuilding.propertyTypes = propertyTypes.filter(({ id }) =>\n propertyTypeIds?.includes(id),\n );\n }\n\n if (constructionNumberIds) {\n apartmentBuilding.constructionNumbers = constructionNumbers.filter(({ id }) =>\n constructionNumberIds?.includes(id),\n );\n }\n\n if (projectPhaseId) {\n apartmentBuilding.projectPhase = findProjectPhase(projectPhases, {\n id: projectPhaseId,\n });\n }\n\n if (apartmentBuilding.projectPhase) {\n apartmentBuilding.status = getApartmentBuildingStatus(\n apartmentBuilding.projectPhase,\n apartmentBuilding.constructionNumbers,\n );\n }\n\n apartmentBuilding.objectType = 'apartmentBuilding';\n });\n\n /*\n Extend district object\n */\n districts.forEach((district) => {\n district.status = getDistrictStatus(district, projectPhases);\n district.objectType = 'district';\n });\n\n return {\n constructionNumbers,\n propertyTypes,\n apartmentBuildings,\n projectPhases,\n districts,\n areaProject,\n };\n }\n\n return {\n getData,\n getCurrentAreaData,\n };\n};\n\nconst extendedArea = ExtendedAreaModelsUtility();\n\nexport { extendedArea, ExtendedAreaModels };\n"]}
1
+ {"version":3,"file":"extended-area.js","sourceRoot":"","sources":["../../src/extended-api-models/extended-area.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ExtendedApartmentBuilding,\n ExtendedAreaProject,\n ExtendedConstructionNumber,\n ExtendedDistrict,\n ExtendedProjectPhase,\n ExtendedPropertyType,\n filterConstructionNumbers,\n filterPropertyTypes,\n findProjectPhase,\n findPropertyType,\n getDistrictStatus,\n} from '../api-utilities';\nimport { environmentDetails } from '../environment';\nimport {\n ApartmentBuildingModel,\n apartmentBuildingQuery,\n areaProjectGetById,\n AreaProjectModel,\n ConstructionNumberModel,\n constructionNumberQuery,\n DistrictModel,\n districtQuery,\n ProjectPhaseModel,\n projectPhaseQuery,\n PropertyTypeModel,\n propertyTypeQuery,\n} from '../generated';\nimport { COMPOSED_INCLUDE_STRINGS } from './included-properties';\nimport { getApartmentBuildingStatus } from './status/apartment-building-status';\nimport { constructionNumberStatus } from './status/construction-number-status';\nimport { getPropertyTypeStatus } from './status/property-type-status';\n\ninterface OriginalAreaModels {\n constructionNumbers: ConstructionNumberModel[];\n propertyTypes: PropertyTypeModel[];\n apartmentBuildings: ApartmentBuildingModel[];\n projectPhases: ProjectPhaseModel[];\n districts: DistrictModel[];\n areaProject: AreaProjectModel;\n}\n\ninterface ExtendedAreaModels {\n constructionNumbers: ExtendedConstructionNumber[];\n propertyTypes: ExtendedPropertyType[];\n apartmentBuildings: ExtendedApartmentBuilding[];\n projectPhases: ExtendedProjectPhase[];\n districts: ExtendedDistrict[];\n areaProject: ExtendedAreaProject;\n}\ninterface FilterFunctions {\n constructionNumber?: (constructionNumber: ConstructionNumberModel) => boolean;\n propertyType?: (propertyType: PropertyTypeModel) => boolean;\n apartmentBuilding?: (apartmentBuilding: ApartmentBuildingModel) => boolean;\n projectPhase?: (projectPhase: ProjectPhaseModel) => boolean;\n district?: (district: DistrictModel) => boolean;\n}\n\nconst ExtendedAreaModelsUtility = () => {\n const areaState: {\n [areaId: string]: {\n extendedData?: ExtendedAreaModels;\n resolveArray: Function[];\n filterFunctions?: FilterFunctions;\n };\n } = {};\n\n async function controller(areaId: string) {\n let originalData: OriginalAreaModels;\n\n if (hasSessionStorageData(areaId)) {\n originalData = fetchSessionStorageData(areaId)!;\n } else {\n originalData = await fetchData(areaId);\n setSessionStorageData(areaId, originalData);\n }\n // Objects without images, should not be shown on the website\n originalData = filterObjectsWithImages(originalData);\n\n areaState[areaId].extendedData = extendModels(originalData);\n\n setLoaded(areaId);\n }\n\n async function getData(areaId: string): Promise<ExtendedAreaModels> {\n if (!areaState[areaId]) {\n areaState[areaId] = {\n resolveArray: [],\n };\n\n // Controller handles fetching + extending of data\n controller(areaId);\n }\n\n const state = areaState[areaId];\n\n if (!state.extendedData) {\n /*\n if no extendedData is found, it means it's being fetched.\n Promises will be resolved after data is loaded\n */\n return new Promise((res) => {\n state.resolveArray.push(res);\n });\n } else {\n // if no extendedData is found, it comes from sessionStorage\n return state.extendedData;\n }\n }\n\n async function getCurrentAreaData(): Promise<ExtendedAreaModels> {\n return getData(environmentDetails.areaId!);\n }\n\n function setLoaded(areaId: string) {\n areaState[areaId].resolveArray.forEach((res) => {\n res(areaState[areaId].extendedData);\n });\n }\n\n function filterObjectsWithImages(data: OriginalAreaModels): OriginalAreaModels {\n return {\n ...data,\n constructionNumbers: data.constructionNumbers.filter(\n ({ mainImage }) => !!mainImage?.url,\n ),\n propertyTypes: data.propertyTypes.filter(({ mainImage }) => !!mainImage?.url),\n apartmentBuildings: data.apartmentBuildings.filter(({ image }) => !!image?.url),\n };\n }\n\n function sessionStorageId(areaId: string) {\n return `AreaObjects::${areaId}`;\n }\n\n function sessionStorageData(areaId: string) {\n return sessionStorage.getItem(sessionStorageId(areaId));\n }\n\n function hasSessionStorageData(areaId: string) {\n return !!sessionStorageData(areaId);\n }\n\n function fetchSessionStorageData(areaId: string) {\n if (hasSessionStorageData(areaId)) {\n return JSON.parse(sessionStorageData(areaId)!) as OriginalAreaModels;\n } else {\n return;\n }\n }\n\n function setSessionStorageData(areaId: string, originalData: OriginalAreaModels) {\n sessionStorage.setItem(sessionStorageId(areaId), JSON.stringify(originalData));\n }\n\n async function fetchData(areaId: string) {\n const propertyTypes = propertyTypeQuery({\n AreaProjectId: areaId,\n include: COMPOSED_INCLUDE_STRINGS.propertyType,\n });\n const constructionNumbers = constructionNumberQuery({\n AreaProjectId: areaId,\n include: COMPOSED_INCLUDE_STRINGS.constructionNumber,\n });\n const projectPhases = projectPhaseQuery({\n AreaProjectId: areaId,\n include: COMPOSED_INCLUDE_STRINGS.projectPhase,\n });\n const apartmentBuildings = apartmentBuildingQuery({\n AreaProjectId: areaId,\n include: COMPOSED_INCLUDE_STRINGS.apartmentBuilding,\n });\n const districts = districtQuery({\n AreaProjectId: areaId,\n include: COMPOSED_INCLUDE_STRINGS.district,\n });\n const areaProject = areaProjectGetById(areaId, {\n include: COMPOSED_INCLUDE_STRINGS.areaProject,\n });\n\n return {\n propertyTypes: await propertyTypes,\n constructionNumbers: await constructionNumbers,\n projectPhases: await projectPhases,\n apartmentBuildings: await apartmentBuildings,\n districts: await districts,\n areaProject: await areaProject,\n };\n }\n\n function extendModels(data: OriginalAreaModels): ExtendedAreaModels {\n const {\n constructionNumbers,\n propertyTypes,\n apartmentBuildings,\n projectPhases,\n districts,\n areaProject,\n } = data as ExtendedAreaModels;\n\n /*\n Extend constructionNumbers object\n */\n constructionNumbers.forEach((constructionNumber) => {\n const { propertyTypeId, projectPhaseId } = constructionNumber;\n\n constructionNumber.areaProject = areaProject;\n\n if (propertyTypeId) {\n constructionNumber.propertyType = findPropertyType(propertyTypes, {\n id: propertyTypeId,\n });\n }\n\n if (projectPhaseId) {\n constructionNumber.projectPhase = findProjectPhase(projectPhases, {\n id: projectPhaseId,\n });\n }\n\n constructionNumber.apartmentBuilding = apartmentBuildings.find((s) =>\n s.constructionNumberIds?.includes(constructionNumber.id),\n );\n\n constructionNumber.status = constructionNumberStatus(constructionNumber);\n\n constructionNumber.objectType = 'constructionNumber';\n });\n\n /*\n Extend propertTypes object\n */\n propertyTypes.forEach((propertyType) => {\n const { projectPhaseId, id } = propertyType;\n\n if (projectPhaseId) {\n propertyType.projectPhase = findProjectPhase(projectPhases, {\n id: projectPhaseId,\n });\n }\n\n propertyType.constructionNumbers = filterConstructionNumbers(constructionNumbers, {\n propertyTypeId: id,\n });\n\n if (propertyType.projectPhase) {\n propertyType.status = getPropertyTypeStatus(\n propertyType.projectPhase,\n propertyType.constructionNumbers,\n );\n }\n\n propertyType.apartmentBuildings = apartmentBuildings.filter((s) =>\n s.propertyTypeIds?.includes(propertyType.id),\n );\n\n propertyType.objectType = 'propertyType';\n });\n\n /*\n Extend projectPhase object\n */\n projectPhases.forEach((projectPhase) => {\n const { id } = projectPhase;\n\n projectPhase.propertyTypes = filterPropertyTypes(propertyTypes, {\n projectPhaseId: id,\n });\n projectPhase.constructionNumbers = filterConstructionNumbers(constructionNumbers, {\n projectPhaseId: id,\n });\n\n projectPhase.objectType = 'projectPhase';\n });\n\n /*\n Extend apartmentBuilding object\n */\n apartmentBuildings.forEach((apartmentBuilding) => {\n const { propertyTypeIds, constructionNumberIds, projectPhaseId } = apartmentBuilding;\n\n if (propertyTypeIds) {\n apartmentBuilding.propertyTypes = propertyTypes.filter(({ id }) =>\n propertyTypeIds?.includes(id),\n );\n }\n\n if (constructionNumberIds) {\n apartmentBuilding.constructionNumbers = constructionNumbers.filter(({ id }) =>\n constructionNumberIds?.includes(id),\n );\n }\n\n if (projectPhaseId) {\n apartmentBuilding.projectPhase = findProjectPhase(projectPhases, {\n id: projectPhaseId,\n });\n }\n\n if (apartmentBuilding.projectPhase) {\n apartmentBuilding.status = getApartmentBuildingStatus(\n apartmentBuilding.projectPhase,\n apartmentBuilding.constructionNumbers,\n );\n }\n\n apartmentBuilding.objectType = 'apartmentBuilding';\n });\n\n /*\n Extend district object\n */\n districts.forEach((district) => {\n district.status = getDistrictStatus(district, projectPhases);\n district.objectType = 'district';\n });\n\n return {\n constructionNumbers,\n propertyTypes,\n apartmentBuildings,\n projectPhases,\n districts,\n areaProject,\n };\n }\n\n return {\n getData,\n getCurrentAreaData,\n };\n};\n\nconst extendedArea = ExtendedAreaModelsUtility();\n\nexport { extendedArea, ExtendedAreaModels };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bpd-library/utilities",
3
- "version": "1.3.4",
3
+ "version": "1.3.5-beta.0",
4
4
  "description": "Description",
5
5
  "url": "https://github.com/{repo name}",
6
6
  "license": "MIT",
@@ -45,13 +45,13 @@
45
45
  "publishConfig": {
46
46
  "access": "public"
47
47
  },
48
- "gitHead": "6c30fdc7102bf2e736581e29aec376234d2d939c",
48
+ "gitHead": "4478d61635b31bbe5080fb45edc850ff74605629",
49
49
  "dependencies": {
50
50
  "@atomify/core": "2.4.1",
51
51
  "@atomify/hooks": "1.1.11",
52
52
  "@atomify/jsx": "1.7.1",
53
53
  "@atomify/kit": "1.1.11",
54
- "@bpd-library/types": "^1.3.4",
54
+ "@bpd-library/types": "^1.3.5-beta.0",
55
55
  "qs": "^6.9.4",
56
56
  "query-string": "5"
57
57
  }