Skip to content

Commit a49d323

Browse files
authored
chore(datafile manager): Fix ESLint warnings & errors, apply Prettier formatting (#440)
Summary: In datafile manager package, apply Prettier formatting and fix all ESlint errors & warnings. Test plan: Existing unit tests
1 parent 5a2d4f9 commit a49d323

17 files changed

+349
-355
lines changed

packages/datafile-manager/.eslintrc.js

+2
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,7 @@ module.exports = {
2323
'@typescript-eslint/ban-ts-ignore': 'off',
2424
'@typescript-eslint/camelcase': 'off',
2525
'@typescript-eslint/no-empty-function': 'off',
26+
'@typescript-eslint/no-explicit-any': 'off',
27+
'@typescript-eslint/no-non-null-assertion': 'off'
2628
},
2729
};

packages/datafile-manager/src/backoffController.ts

+9-9
Original file line numberDiff line numberDiff line change
@@ -14,33 +14,33 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { BACKOFF_BASE_WAIT_SECONDS_BY_ERROR_COUNT } from './config'
17+
import { BACKOFF_BASE_WAIT_SECONDS_BY_ERROR_COUNT } from './config';
1818

19-
function randomMilliseconds() {
20-
return Math.round(Math.random() * 1000)
19+
function randomMilliseconds(): number {
20+
return Math.round(Math.random() * 1000);
2121
}
2222

2323
export default class BackoffController {
24-
private errorCount = 0
24+
private errorCount = 0;
2525

2626
getDelay(): number {
2727
if (this.errorCount === 0) {
28-
return 0
28+
return 0;
2929
}
3030
const baseWaitSeconds =
3131
BACKOFF_BASE_WAIT_SECONDS_BY_ERROR_COUNT[
3232
Math.min(BACKOFF_BASE_WAIT_SECONDS_BY_ERROR_COUNT.length - 1, this.errorCount)
33-
]
34-
return baseWaitSeconds * 1000 + randomMilliseconds()
33+
];
34+
return baseWaitSeconds * 1000 + randomMilliseconds();
3535
}
3636

3737
countError(): void {
3838
if (this.errorCount < BACKOFF_BASE_WAIT_SECONDS_BY_ERROR_COUNT.length - 1) {
39-
this.errorCount++
39+
this.errorCount++;
4040
}
4141
}
4242

4343
reset(): void {
44-
this.errorCount = 0
44+
this.errorCount = 0;
4545
}
4646
}

packages/datafile-manager/src/browserDatafileManager.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,19 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { makeGetRequest } from './browserRequest'
18-
import HttpPollingDatafileManager from './httpPollingDatafileManager'
17+
import { makeGetRequest } from './browserRequest';
18+
import HttpPollingDatafileManager from './httpPollingDatafileManager';
1919
import { Headers, AbortableRequest } from './http';
2020
import { DatafileManagerConfig } from './datafileManager';
2121

2222
export default class BrowserDatafileManager extends HttpPollingDatafileManager {
2323
protected makeGetRequest(reqUrl: string, headers: Headers): AbortableRequest {
24-
return makeGetRequest(reqUrl, headers)
24+
return makeGetRequest(reqUrl, headers);
2525
}
2626

2727
protected getConfigDefaults(): Partial<DatafileManagerConfig> {
2828
return {
2929
autoUpdate: false,
30-
}
30+
};
3131
}
3232
}

packages/datafile-manager/src/browserRequest.ts

+39-39
Original file line numberDiff line numberDiff line change
@@ -14,83 +14,83 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { AbortableRequest, Response, Headers } from './http'
18-
import { REQUEST_TIMEOUT_MS } from './config'
19-
import { getLogger } from '@optimizely/js-sdk-logging'
17+
import { AbortableRequest, Response, Headers } from './http';
18+
import { REQUEST_TIMEOUT_MS } from './config';
19+
import { getLogger } from '@optimizely/js-sdk-logging';
2020

21-
const logger = getLogger('DatafileManager')
21+
const logger = getLogger('DatafileManager');
2222

23-
const GET_METHOD = 'GET'
24-
const READY_STATE_DONE = 4
23+
const GET_METHOD = 'GET';
24+
const READY_STATE_DONE = 4;
2525

2626
function parseHeadersFromXhr(req: XMLHttpRequest): Headers {
27-
const allHeadersString = req.getAllResponseHeaders()
27+
const allHeadersString = req.getAllResponseHeaders();
2828

2929
if (allHeadersString === null) {
30-
return {}
30+
return {};
3131
}
3232

33-
const headerLines = allHeadersString.split('\r\n')
34-
const headers: Headers = {}
33+
const headerLines = allHeadersString.split('\r\n');
34+
const headers: Headers = {};
3535
headerLines.forEach(headerLine => {
36-
const separatorIndex = headerLine.indexOf(': ')
36+
const separatorIndex = headerLine.indexOf(': ');
3737
if (separatorIndex > -1) {
38-
const headerName = headerLine.slice(0, separatorIndex)
39-
const headerValue = headerLine.slice(separatorIndex + 2)
38+
const headerName = headerLine.slice(0, separatorIndex);
39+
const headerValue = headerLine.slice(separatorIndex + 2);
4040
if (headerValue.length > 0) {
41-
headers[headerName] = headerValue
41+
headers[headerName] = headerValue;
4242
}
4343
}
44-
})
45-
return headers
44+
});
45+
return headers;
4646
}
4747

4848
function setHeadersInXhr(headers: Headers, req: XMLHttpRequest): void {
4949
Object.keys(headers).forEach(headerName => {
50-
const header = headers[headerName]
51-
req.setRequestHeader(headerName, header!)
52-
})
50+
const header = headers[headerName];
51+
req.setRequestHeader(headerName, header!);
52+
});
5353
}
5454

5555
export function makeGetRequest(reqUrl: string, headers: Headers): AbortableRequest {
56-
const req = new XMLHttpRequest()
56+
const req = new XMLHttpRequest();
5757

5858
const responsePromise: Promise<Response> = new Promise((resolve, reject) => {
59-
req.open(GET_METHOD, reqUrl, true)
59+
req.open(GET_METHOD, reqUrl, true);
6060

61-
setHeadersInXhr(headers, req)
61+
setHeadersInXhr(headers, req);
6262

63-
req.onreadystatechange = () => {
63+
req.onreadystatechange = (): void => {
6464
if (req.readyState === READY_STATE_DONE) {
65-
const statusCode = req.status
65+
const statusCode = req.status;
6666
if (statusCode === 0) {
67-
reject(new Error('Request error'))
68-
return
67+
reject(new Error('Request error'));
68+
return;
6969
}
7070

71-
const headers = parseHeadersFromXhr(req)
71+
const headers = parseHeadersFromXhr(req);
7272
const resp: Response = {
7373
statusCode: req.status,
7474
body: req.responseText,
7575
headers,
76-
}
77-
resolve(resp)
76+
};
77+
resolve(resp);
7878
}
79-
}
79+
};
8080

81-
req.timeout = REQUEST_TIMEOUT_MS
81+
req.timeout = REQUEST_TIMEOUT_MS;
8282

83-
req.ontimeout = () => {
84-
logger.error('Request timed out')
85-
}
83+
req.ontimeout = (): void => {
84+
logger.error('Request timed out');
85+
};
8686

87-
req.send()
88-
})
87+
req.send();
88+
});
8989

9090
return {
9191
responsePromise,
92-
abort() {
93-
req.abort()
92+
abort(): void {
93+
req.abort();
9494
},
95-
}
95+
};
9696
}

packages/datafile-manager/src/config.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414
* limitations under the License.
1515
*/
1616

17-
export const DEFAULT_UPDATE_INTERVAL = 5 * 60 * 1000 // 5 minutes
17+
export const DEFAULT_UPDATE_INTERVAL = 5 * 60 * 1000; // 5 minutes
1818

19-
export const MIN_UPDATE_INTERVAL = 1000
19+
export const MIN_UPDATE_INTERVAL = 1000;
2020

21-
export const DEFAULT_URL_TEMPLATE = `https://cdn.optimizely.com/datafiles/%s.json`
21+
export const DEFAULT_URL_TEMPLATE = `https://cdn.optimizely.com/datafiles/%s.json`;
2222

23-
export const BACKOFF_BASE_WAIT_SECONDS_BY_ERROR_COUNT = [0, 8, 16, 32, 64, 128, 256, 512]
23+
export const BACKOFF_BASE_WAIT_SECONDS_BY_ERROR_COUNT = [0, 8, 16, 32, 64, 128, 256, 512];
2424

25-
export const REQUEST_TIMEOUT_MS = 60 * 1000 // 1 minute
25+
export const REQUEST_TIMEOUT_MS = 60 * 1000; // 1 minute

packages/datafile-manager/src/datafileManager.ts

+14-14
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,34 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
import PersistentKeyValueCache from './persistentKeyValueCache'
16+
import PersistentKeyValueCache from './persistentKeyValueCache';
1717

1818
export interface DatafileUpdate {
19-
datafile: object
19+
datafile: object;
2020
}
2121

2222
export interface DatafileUpdateListener {
23-
(datafileUpdate: DatafileUpdate): void
23+
(datafileUpdate: DatafileUpdate): void;
2424
}
2525

2626
// TODO: Replace this with the one from js-sdk-models
2727
interface Managed {
28-
start(): void
28+
start(): void;
2929

30-
stop(): Promise<any>
30+
stop(): Promise<any>;
3131
}
3232

3333
export interface DatafileManager extends Managed {
34-
get: () => object | null
35-
on: (eventName: string, listener: DatafileUpdateListener) => () => void
36-
onReady: () => Promise<void>
34+
get: () => object | null;
35+
on: (eventName: string, listener: DatafileUpdateListener) => () => void;
36+
onReady: () => Promise<void>;
3737
}
3838

3939
export interface DatafileManagerConfig {
40-
autoUpdate?: boolean
41-
datafile?: object
42-
sdkKey: string
43-
updateInterval?: number
44-
urlTemplate?: string
45-
cache?: PersistentKeyValueCache
40+
autoUpdate?: boolean;
41+
datafile?: object;
42+
sdkKey: string;
43+
updateInterval?: number;
44+
urlTemplate?: string;
45+
cache?: PersistentKeyValueCache;
4646
}

packages/datafile-manager/src/eventEmitter.ts

+21-21
Original file line numberDiff line numberDiff line change
@@ -14,49 +14,49 @@
1414
* limitations under the License.
1515
*/
1616

17-
export type Disposer = () => void
17+
export type Disposer = () => void;
1818

19-
export type Listener = (arg?: any) => void
19+
export type Listener = (arg?: any) => void;
2020

2121
interface Listeners {
22-
[index: string]: { // index is event name
23-
[index: string]: Listener // index is listener id
24-
}
22+
[index: string]: {
23+
// index is event name
24+
[index: string]: Listener; // index is listener id
25+
};
2526
}
2627

2728
export default class EventEmitter {
28-
private listeners: Listeners = {}
29+
private listeners: Listeners = {};
2930

30-
private listenerId = 1
31+
private listenerId = 1;
3132

3233
on(eventName: string, listener: Listener): Disposer {
3334
if (!this.listeners[eventName]) {
34-
this.listeners[eventName] = {}
35+
this.listeners[eventName] = {};
3536
}
36-
const currentListenerId = String(this.listenerId)
37-
this.listenerId++
38-
this.listeners[eventName][currentListenerId] = listener
39-
return () => {
37+
const currentListenerId = String(this.listenerId);
38+
this.listenerId++;
39+
this.listeners[eventName][currentListenerId] = listener;
40+
return (): void => {
4041
if (this.listeners[eventName]) {
41-
delete this.listeners[eventName][currentListenerId]
42+
delete this.listeners[eventName][currentListenerId];
4243
}
43-
}
44+
};
4445
}
4546

46-
emit(eventName: string, arg?: any) {
47-
const listeners = this.listeners[eventName]
47+
emit(eventName: string, arg?: any): void {
48+
const listeners = this.listeners[eventName];
4849
if (listeners) {
4950
Object.keys(listeners).forEach(listenerId => {
50-
const listener = listeners[listenerId]
51-
listener(arg)
52-
})
51+
const listener = listeners[listenerId];
52+
listener(arg);
53+
});
5354
}
5455
}
5556

5657
removeAllListeners(): void {
57-
this.listeners = {}
58+
this.listeners = {};
5859
}
5960
}
6061

61-
6262
// TODO: Create a typed event emitter for use in TS only (not JS)

packages/datafile-manager/src/http.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@
2222
* to work with multiple values per header name.
2323
*/
2424
export interface Headers {
25-
[header: string]: string | undefined
25+
[header: string]: string | undefined;
2626
}
2727

2828
export interface Response {
29-
statusCode?: number
30-
body: string
31-
headers: Headers
29+
statusCode?: number;
30+
body: string;
31+
headers: Headers;
3232
}
3333

3434
export interface AbortableRequest {
35-
abort(): void
36-
responsePromise: Promise<Response>
35+
abort(): void;
36+
responsePromise: Promise<Response>;
3737
}

0 commit comments

Comments
 (0)