Skip to content

Commit f673df6

Browse files
authored
refactor: Convert helper functions to TypeScript (#2132)
1 parent 1ac1890 commit f673df6

25 files changed

+60
-98
lines changed

.github/workflows/ci.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ jobs:
2525
- run: npm ci
2626
- name: Build Types
2727
run: npm run build:types
28-
- name: Lint Types
29-
run: npm run lint:types
3028
- name: Test Types
3129
run: npm run test:types
30+
- name: Lint Types
31+
run: npm run lint:types
3232
check-docs:
3333
name: Check Docs
3434
timeout-minutes: 5

src/CoreManager.ts

+9-12
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@ import type ParseConfig from './ParseConfig';
1515
import type LiveQueryClient from './LiveQueryClient';
1616
import type ParseSchema from './ParseSchema';
1717
import type ParseInstallation from './ParseInstallation';
18-
import type ParseQuery from './ParseQuery';
19-
import type * as ParseOp from './ParseOp';
20-
import type ParseRole from './ParseRole';
2118

2219
type AnalyticsController = {
2320
track: (name: string, dimensions: { [key: string]: string }) => Promise<any>,
@@ -598,43 +595,43 @@ const CoreManager = {
598595
return config['HooksController']!;
599596
},
600597

601-
setParseOp(op: typeof ParseOp) {
598+
setParseOp(op: any) {
602599
config['ParseOp'] = op;
603600
},
604601

605602
getParseOp() {
606603
return config['ParseOp']!;
607604
},
608605

609-
setParseObject(object: typeof ParseObject) {
606+
setParseObject(object: any) {
610607
config['ParseObject'] = object;
611608
},
612609

613-
getParseObject(): ParseObject {
610+
getParseObject() {
614611
return config['ParseObject']!;
615612
},
616613

617-
setParseQuery(query: typeof ParseQuery) {
614+
setParseQuery(query: any) {
618615
config['ParseQuery'] = query;
619616
},
620617

621-
getParseQuery(): ParseQuery {
618+
getParseQuery() {
622619
return config['ParseQuery']!;
623620
},
624621

625-
setParseRole(role: typeof ParseRole) {
622+
setParseRole(role: any) {
626623
config['ParseRole'] = role;
627624
},
628625

629-
getParseRole(): ParseRole {
626+
getParseRole() {
630627
return config['ParseRole']!;
631628
},
632629

633-
setParseUser(user: typeof ParseUser) {
630+
setParseUser(user: any) {
634631
config['ParseUser'] = user;
635632
},
636633

637-
getParseUser(): ParseUser {
634+
getParseUser() {
638635
return config['ParseUser']!;
639636
},
640637
};

src/ParseObject.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -2385,7 +2385,7 @@ const DefaultController = {
23852385
return Promise.resolve(target);
23862386
},
23872387

2388-
save(target: ParseObject | Array<ParseObject | ParseFile>, options: RequestOptions): Promise<ParseObject | Array<ParseObject> | ParseFile> {
2388+
save(target: ParseObject | null | Array<ParseObject | ParseFile>, options: RequestOptions): Promise<ParseObject | Array<ParseObject> | ParseFile> {
23892389
const batchSize =
23902390
options && options.batchSize ? options.batchSize : CoreManager.get('REQUEST_BATCH_SIZE');
23912391
const localDatastore = CoreManager.getLocalDatastore();
@@ -2452,11 +2452,11 @@ const DefaultController = {
24522452

24532453
// Queue up tasks for each object in the batch.
24542454
// When every task is ready, the API request will execute
2455-
const batchReturned = new resolvingPromise();
2456-
const batchReady = [];
2457-
const batchTasks = [];
2455+
const batchReturned = resolvingPromise();
2456+
const batchReady: ReturnType<typeof resolvingPromise<void>>[] = [];
2457+
const batchTasks: Promise<void>[] = [];
24582458
batch.forEach((obj, index) => {
2459-
const ready = new resolvingPromise();
2459+
const ready = resolvingPromise<void>();
24602460
batchReady.push(ready);
24612461
const task = function () {
24622462
ready.resolve();

src/__tests__/escape-test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
jest.autoMockOff();
22

3-
const escape = require('../escape.js').default;
3+
const escape = require('../escape').default;
44

55
describe('escape', () => {
66
it('escapes special HTML characters', () => {

src/arrayContainsObject.js renamed to src/arrayContainsObject.ts

-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
/**
2-
* @flow
3-
*/
4-
51
import CoreManager from './CoreManager';
62
import type ParseObject from './ParseObject';
73

src/canBeSerialized.js renamed to src/canBeSerialized.ts

-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
/**
2-
* @flow
3-
*/
4-
51
import CoreManager from './CoreManager';
62
import ParseFile from './ParseFile';
73
import type ParseObject from './ParseObject';

src/decode.js renamed to src/decode.ts

-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
/**
2-
* @flow
3-
*/
41
import CoreManager from './CoreManager';
5-
import ParseACL from './ParseACL'; // eslint-disable-line no-unused-vars
62
import ParseFile from './ParseFile';
73
import ParseGeoPoint from './ParseGeoPoint';
84
import ParsePolygon from './ParsePolygon';

src/encode.js renamed to src/encode.ts

+5-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
/**
2-
* @flow
3-
*/
4-
51
import CoreManager from './CoreManager';
62
import ParseACL from './ParseACL';
73
import ParseFile from './ParseFile';
@@ -10,10 +6,10 @@ import ParsePolygon from './ParsePolygon';
106
import ParseRelation from './ParseRelation';
117

128
function encode(
13-
value: mixed,
9+
value: any,
1410
disallowObjects: boolean,
1511
forcePointers: boolean,
16-
seen: Array<mixed>,
12+
seen: Array<any>,
1713
offline: boolean
1814
): any {
1915
const ParseObject = CoreManager.getParseObject();
@@ -57,7 +53,7 @@ function encode(
5753
if (isNaN(value)) {
5854
throw new Error('Tried to encode an invalid date.');
5955
}
60-
return { __type: 'Date', iso: (value: any).toJSON() };
56+
return { __type: 'Date', iso: (value as Date).toJSON() };
6157
}
6258
if (
6359
Object.prototype.toString.call(value) === '[object RegExp]' &&
@@ -84,10 +80,10 @@ function encode(
8480
}
8581

8682
export default function (
87-
value: mixed,
83+
value: any,
8884
disallowObjects?: boolean,
8985
forcePointers?: boolean,
90-
seen?: Array<mixed>,
86+
seen?: Array<any>,
9187
offline?: boolean
9288
): any {
9389
return encode(value, !!disallowObjects, !!forcePointers, seen || [], offline);

src/equals.js renamed to src/equals.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import ParseACL from './ParseACL';
33
import ParseFile from './ParseFile';
44
import ParseGeoPoint from './ParseGeoPoint';
55

6-
export default function equals(a, b) {
6+
export default function equals(a: any, b: any): boolean {
77
const toString = Object.prototype.toString;
88
if (toString.call(a) === '[object Date]' || toString.call(b) === '[object Date]') {
99
const dateA = new Date(a);

src/escape.js renamed to src/escape.ts

-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
/*
2-
* @flow
3-
*/
4-
51
const encoded = {
62
'&': '&amp;',
73
'<': '&lt;',
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
/**
2-
* @flow
3-
*/
4-
51
export default function isRevocableSession(token: string): boolean {
62
return token.indexOf('r:') > -1;
73
}

src/parseDate.js renamed to src/parseDate.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
/**
2-
* @flow
3-
*/
4-
5-
export default function parseDate(iso8601: string): ?Date {
1+
export default function parseDate(iso8601: string): Date | null {
62
const regexp = new RegExp(
73
'^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2})' +
84
'T' +

src/promiseUtils.js renamed to src/promiseUtils.ts

+12-11
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
// Create Deferred Promise
2-
export function resolvingPromise() {
3-
let res;
4-
let rej;
5-
const promise = new Promise((resolve, reject) => {
2+
export function resolvingPromise<T = any>() {
3+
let res: (value: T) => void;
4+
let rej: (error: T) => void;
5+
const promise = new Promise<T>((resolve, reject) => {
66
res = resolve;
77
rej = reject;
88
});
9-
promise.resolve = res;
10-
promise.reject = rej;
11-
return promise;
9+
const defer: typeof promise & { resolve: (res: T) => void, reject: (err: any) => void } = promise as any;
10+
defer.resolve = res!;
11+
defer.reject = rej!;
12+
return defer;
1213
}
1314

14-
export function when(promises) {
15+
export function when(promises: any) {
1516
let objects;
1617
const arrayArgument = Array.isArray(promises);
1718
if (arrayArgument) {
@@ -32,7 +33,7 @@ export function when(promises) {
3233
return Promise.resolve(returnValue);
3334
}
3435

35-
const promise = new resolvingPromise();
36+
const promise = resolvingPromise();
3637

3738
const resolveOne = function () {
3839
total--;
@@ -45,7 +46,7 @@ export function when(promises) {
4546
}
4647
};
4748

48-
const chain = function (object, index) {
49+
const chain = function (object: Promise<any>, index: number) {
4950
if (object && typeof object.then === 'function') {
5051
object.then(
5152
function (result) {
@@ -70,7 +71,7 @@ export function when(promises) {
7071
return promise;
7172
}
7273

73-
export function continueWhile(test, emitter) {
74+
export function continueWhile(test: () => any, emitter: () => Promise<any>) {
7475
if (test()) {
7576
return emitter().then(() => {
7677
return continueWhile(test, emitter);

src/unique.js renamed to src/unique.ts

+2-6
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
1-
/**
2-
* @flow
3-
*/
4-
51
import arrayContainsObject from './arrayContainsObject';
62
import CoreManager from './CoreManager';
73

84
export default function unique<T>(arr: Array<T>): Array<T> {
9-
const uniques = [];
5+
const uniques: T[] = [];
106
arr.forEach(value => {
117
const ParseObject = CoreManager.getParseObject();
128
if (value instanceof ParseObject) {
13-
if (!arrayContainsObject(uniques, value)) {
9+
if (!arrayContainsObject(uniques, value as typeof ParseObject)) {
1410
uniques.push(value);
1511
}
1612
} else {

src/unsavedChildren.js renamed to src/unsavedChildren.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
/**
2-
* @flow
3-
*/
4-
51
import CoreManager from './CoreManager';
62
import ParseFile from './ParseFile';
73
import type ParseObject from './ParseObject';
@@ -69,7 +65,7 @@ function traverse(
6965
return;
7066
}
7167
if (obj instanceof ParseFile) {
72-
if (!obj.url() && encountered.files.indexOf(obj) < 0) {
68+
if (!(obj as ParseFile).url() && encountered.files.indexOf(obj) < 0) {
7369
encountered.files.push(obj);
7470
}
7571
return;

src/uuid.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { v4 } from 'uuid';
22

3-
let uuid: () => string = null as any;
3+
let uuid: () => string;
44

55
if (process.env.PARSE_BUILD === 'weapp') {
66
uuid = function () {

types/CoreManager.d.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -286,13 +286,13 @@ declare const CoreManager: {
286286
getHooksController(): HooksController;
287287
setParseOp(op: any): void;
288288
getParseOp(): any;
289-
setParseObject(object: typeof ParseObject): void;
290-
getParseObject(): ParseObject;
289+
setParseObject(object: any): void;
290+
getParseObject(): any;
291291
setParseQuery(query: any): void;
292-
getParseQuery(): ParseQuery;
292+
getParseQuery(): any;
293293
setParseRole(role: any): void;
294-
getParseRole(): ParseRole;
294+
getParseRole(): any;
295295
setParseUser(user: any): void;
296-
getParseUser(): ParseUser;
296+
getParseUser(): any;
297297
};
298298
export default CoreManager;

types/arrayContainsObject.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1+
import type ParseObject from './ParseObject';
12
export default function arrayContainsObject(array: Array<any>, object: ParseObject): boolean;
2-
import ParseObject from './ParseObject';

types/canBeSerialized.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1+
import type ParseObject from './ParseObject';
12
export default function canBeSerialized(obj: ParseObject): boolean;
2-
import ParseObject from './ParseObject';

types/encode.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default function _default(value: mixed, disallowObjects?: boolean, forcePointers?: boolean, seen?: Array<mixed>, offline?: boolean): any;
1+
export default function (value: any, disallowObjects?: boolean, forcePointers?: boolean, seen?: Array<any>, offline?: boolean): any;

types/isRevocableSession.d.ts

-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1 @@
1-
/**
2-
* @flow
3-
*/
41
export default function isRevocableSession(token: string): boolean;

types/parseDate.d.ts

-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1 @@
1-
/**
2-
* @flow
3-
*/
41
export default function parseDate(iso8601: string): Date | null;

types/promiseUtils.d.ts

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1-
export function resolvingPromise(): Promise<any>;
2-
export function when(promises: any, ...args: any[]): any;
3-
export function continueWhile(test: any, emitter: any): any;
1+
export declare function resolvingPromise<T = any>(): Promise<T> & {
2+
resolve: (res: T) => void;
3+
reject: (err: any) => void;
4+
};
5+
export declare function when(promises: any): Promise<any[]> | (Promise<any> & {
6+
resolve: (res: any) => void;
7+
reject: (err: any) => void;
8+
});
9+
export declare function continueWhile(test: () => any, emitter: () => Promise<any>): any;

types/unique.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default function unique<T>(arr: T[]): T[];
1+
export default function unique<T>(arr: Array<T>): Array<T>;

types/unsavedChildren.d.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import ParseFile from './ParseFile';
2+
import type ParseObject from './ParseObject';
13
/**
24
* Return an array of unsaved children, which are either Parse Objects or Files.
35
* If it encounters any dirty Objects without Ids, it will throw an exception.
@@ -7,5 +9,3 @@
79
* @returns {Array}
810
*/
911
export default function unsavedChildren(obj: ParseObject, allowDeepUnsaved?: boolean): Array<ParseFile | ParseObject>;
10-
import ParseObject from './ParseObject';
11-
import ParseFile from './ParseFile';

0 commit comments

Comments
 (0)