Skip to content

Commit 83e2126

Browse files
Antoine Doubovetzkyfacebook-github-bot
authored andcommitted
Extract isModuleRegistryCall function in parsers/utils (facebook#35139)
Summary: This PR is a task from facebook#34872: > Extract the function isModuleRegistryCall ([Flow](https://github.com/facebook/react-native/blob/main/packages/react-native-codegen/src/parsers/flow/utils.js#L175-L211) [TypeScript](https://github.com/facebook/react-native/blob/main/packages/react-native-codegen/src/parsers/typescript/utils.js#L167-L203)) into a single function in the parsers/utils.js file and replace its invocation with this new function. ## Changelog <!-- Help reviewers and the release process by writing your own changelog entry. For an example, see: https://reactnative.dev/contributing/changelogs-in-pull-requests --> [Internal] [Changed] - Extract the function isModuleRegistryCall in parsers/utils Pull Request resolved: facebook#35139 Test Plan: I tested using Jest and Flow commands. Reviewed By: rshest Differential Revision: D40850471 Pulled By: cipolleschi fbshipit-source-id: 34ec8ea4d7175e205315d60f200df093f1204b7b
1 parent 56d7a87 commit 83e2126

File tree

8 files changed

+200
-97
lines changed

8 files changed

+200
-97
lines changed

packages/react-native-codegen/src/parsers/__tests__/utils-test.js

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const {
1717
verifyPlatforms,
1818
visit,
1919
buildSchemaFromConfigType,
20+
isModuleRegistryCall,
2021
} = require('../utils.js');
2122
const {ParserError} = require('../errors');
2223

@@ -435,4 +436,149 @@ describe('buildSchemaFromConfigType', () => {
435436
});
436437
});
437438
});
439+
440+
describe('isModuleRegistryCall', () => {
441+
describe('when node is not of CallExpression type', () => {
442+
it('returns false', () => {
443+
const node = {
444+
type: 'NotCallExpression',
445+
};
446+
expect(isModuleRegistryCall(node)).toBe(false);
447+
});
448+
});
449+
450+
describe('when node is of CallExpressionType', () => {
451+
describe('when callee type is not of MemberExpression type', () => {
452+
it('returns false', () => {
453+
const node = {
454+
type: 'CallExpression',
455+
callee: {
456+
type: 'NotMemberExpression',
457+
},
458+
};
459+
expect(isModuleRegistryCall(node)).toBe(false);
460+
});
461+
});
462+
463+
describe('when callee type is of MemberExpression type', () => {
464+
describe('when memberExpression has an object of type different than "Identifier"', () => {
465+
it('returns false', () => {
466+
const node = {
467+
type: 'CallExpression',
468+
callee: {
469+
type: 'MemberExpression',
470+
object: {
471+
type: 'NotIdentifier',
472+
name: 'TurboModuleRegistry',
473+
},
474+
},
475+
};
476+
expect(isModuleRegistryCall(node)).toBe(false);
477+
});
478+
});
479+
480+
describe('when memberExpression has an object of name different than "TurboModuleRegistry"', () => {
481+
it('returns false', () => {
482+
const node = {
483+
type: 'CallExpression',
484+
callee: {
485+
type: 'MemberExpression',
486+
object: {
487+
type: 'Identifier',
488+
name: 'NotTurboModuleRegistry',
489+
},
490+
},
491+
};
492+
expect(isModuleRegistryCall(node)).toBe(false);
493+
});
494+
});
495+
496+
describe('when memberExpression has an object of type "Identifier" and name "TurboModuleRegistry', () => {
497+
describe('when memberExpression has a property of type different than "Identifier"', () => {
498+
it('returns false', () => {
499+
const node = {
500+
type: 'CallExpression',
501+
callee: {
502+
type: 'MemberExpression',
503+
object: {
504+
type: 'Identifier',
505+
name: 'TurboModuleRegistry',
506+
},
507+
property: {
508+
type: 'NotIdentifier',
509+
name: 'get',
510+
},
511+
},
512+
};
513+
expect(isModuleRegistryCall(node)).toBe(false);
514+
});
515+
});
516+
517+
describe('when memberExpression has a property of name different than "get" or "getEnforcing', () => {
518+
it('returns false', () => {
519+
const node = {
520+
type: 'CallExpression',
521+
callee: {
522+
type: 'MemberExpression',
523+
object: {
524+
type: 'Identifier',
525+
name: 'TurboModuleRegistry',
526+
},
527+
property: {
528+
type: 'Identifier',
529+
name: 'NotGet',
530+
},
531+
},
532+
};
533+
expect(isModuleRegistryCall(node)).toBe(false);
534+
});
535+
});
536+
537+
describe('when memberExpression has a property of type "Identifier" and of name "get" or "getEnforcing', () => {
538+
describe('when memberExpression is computed', () => {
539+
it('returns false', () => {
540+
const node = {
541+
type: 'CallExpression',
542+
callee: {
543+
type: 'MemberExpression',
544+
object: {
545+
type: 'Identifier',
546+
name: 'TurboModuleRegistry',
547+
},
548+
property: {
549+
type: 'Identifier',
550+
name: 'get',
551+
},
552+
computed: true,
553+
},
554+
};
555+
expect(isModuleRegistryCall(node)).toBe(false);
556+
});
557+
});
558+
559+
describe('when memberExpression is not computed', () => {
560+
it('returns true', () => {
561+
const node = {
562+
type: 'CallExpression',
563+
callee: {
564+
type: 'MemberExpression',
565+
object: {
566+
type: 'Identifier',
567+
name: 'TurboModuleRegistry',
568+
},
569+
property: {
570+
type: 'Identifier',
571+
name: 'get',
572+
},
573+
computed: false,
574+
},
575+
};
576+
expect(isModuleRegistryCall(node)).toBe(true);
577+
});
578+
});
579+
});
580+
});
581+
});
582+
});
583+
});
438584
});

packages/react-native-codegen/src/parsers/flow/index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,14 @@ import type {SchemaType} from '../../CodegenSchema.js';
1515
// $FlowFixMe[untyped-import] there's no flowtype flow-parser
1616
const flowParser = require('flow-parser');
1717
const fs = require('fs');
18-
const {buildSchemaFromConfigType, getConfigType} = require('../utils');
18+
const {
19+
buildSchemaFromConfigType,
20+
getConfigType,
21+
isModuleRegistryCall,
22+
} = require('../utils');
1923
const {buildComponentSchema} = require('./components');
2024
const {wrapComponentSchema} = require('./components/schema');
2125
const {buildModuleSchema} = require('./modules');
22-
const {isModuleRegistryCall} = require('./utils');
2326

2427
function Visitor(infoMap: {isComponent: boolean, isModule: boolean}) {
2528
return {

packages/react-native-codegen/src/parsers/flow/modules/index.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,8 @@ import type {NativeModuleTypeAnnotation} from '../../../CodegenSchema.js';
2727
const {nullGuard} = require('../../parsers-utils');
2828

2929
const {throwIfMoreThanOneModuleRegistryCalls} = require('../../error-utils');
30-
const {visit} = require('../../utils');
31-
const {
32-
resolveTypeAnnotation,
33-
getTypes,
34-
isModuleRegistryCall,
35-
} = require('../utils.js');
30+
const {visit, isModuleRegistryCall} = require('../../utils');
31+
const {resolveTypeAnnotation, getTypes} = require('../utils.js');
3632
const {
3733
unwrapNullable,
3834
wrapNullable,

packages/react-native-codegen/src/parsers/flow/utils.js

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -116,48 +116,8 @@ function getValueFromTypes(value: ASTNode, types: TypeDeclarationMap): ASTNode {
116116
return value;
117117
}
118118

119-
// TODO(T71778680): Flow-type ASTNodes.
120-
function isModuleRegistryCall(node: $FlowFixMe): boolean {
121-
if (node.type !== 'CallExpression') {
122-
return false;
123-
}
124-
125-
const callExpression = node;
126-
127-
if (callExpression.callee.type !== 'MemberExpression') {
128-
return false;
129-
}
130-
131-
const memberExpression = callExpression.callee;
132-
if (
133-
!(
134-
memberExpression.object.type === 'Identifier' &&
135-
memberExpression.object.name === 'TurboModuleRegistry'
136-
)
137-
) {
138-
return false;
139-
}
140-
141-
if (
142-
!(
143-
memberExpression.property.type === 'Identifier' &&
144-
(memberExpression.property.name === 'get' ||
145-
memberExpression.property.name === 'getEnforcing')
146-
)
147-
) {
148-
return false;
149-
}
150-
151-
if (memberExpression.computed) {
152-
return false;
153-
}
154-
155-
return true;
156-
}
157-
158119
module.exports = {
159120
getValueFromTypes,
160121
resolveTypeAnnotation,
161122
getTypes,
162-
isModuleRegistryCall,
163123
};

packages/react-native-codegen/src/parsers/typescript/index.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@ import type {SchemaType} from '../../CodegenSchema.js';
1414

1515
const babelParser = require('@babel/parser');
1616
const fs = require('fs');
17-
const {buildSchemaFromConfigType, getConfigType} = require('../utils');
17+
const {
18+
buildSchemaFromConfigType,
19+
getConfigType,
20+
isModuleRegistryCall,
21+
} = require('../utils');
1822
const {buildComponentSchema} = require('./components');
1923
const {wrapComponentSchema} = require('./components/schema');
2024
const {buildModuleSchema} = require('./modules');
2125

22-
const {isModuleRegistryCall} = require('./utils');
23-
2426
function Visitor(infoMap: {isComponent: boolean, isModule: boolean}) {
2527
return {
2628
CallExpression(node: $FlowFixMe) {

packages/react-native-codegen/src/parsers/typescript/modules/index.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,8 @@ const {
3030
throwIfMoreThanOneModuleRegistryCalls,
3131
throwIfUnsupportedFunctionParamTypeAnnotationParserError,
3232
} = require('../../error-utils');
33-
const {visit} = require('../../utils');
34-
const {
35-
resolveTypeAnnotation,
36-
getTypes,
37-
isModuleRegistryCall,
38-
} = require('../utils.js');
33+
const {visit, isModuleRegistryCall} = require('../../utils');
34+
const {resolveTypeAnnotation, getTypes} = require('../utils.js');
3935
const {
4036
unwrapNullable,
4137
wrapNullable,

packages/react-native-codegen/src/parsers/typescript/utils.js

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -109,47 +109,7 @@ function resolveTypeAnnotation(
109109
};
110110
}
111111

112-
// TODO(T108222691): Use flow-types for @babel/parser
113-
function isModuleRegistryCall(node: $FlowFixMe): boolean {
114-
if (node.type !== 'CallExpression') {
115-
return false;
116-
}
117-
118-
const callExpression = node;
119-
120-
if (callExpression.callee.type !== 'MemberExpression') {
121-
return false;
122-
}
123-
124-
const memberExpression = callExpression.callee;
125-
if (
126-
!(
127-
memberExpression.object.type === 'Identifier' &&
128-
memberExpression.object.name === 'TurboModuleRegistry'
129-
)
130-
) {
131-
return false;
132-
}
133-
134-
if (
135-
!(
136-
memberExpression.property.type === 'Identifier' &&
137-
(memberExpression.property.name === 'get' ||
138-
memberExpression.property.name === 'getEnforcing')
139-
)
140-
) {
141-
return false;
142-
}
143-
144-
if (memberExpression.computed) {
145-
return false;
146-
}
147-
148-
return true;
149-
}
150-
151112
module.exports = {
152113
resolveTypeAnnotation,
153114
getTypes,
154-
isModuleRegistryCall,
155115
};

packages/react-native-codegen/src/parsers/utils.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,45 @@ function getConfigType(
215215
}
216216
}
217217

218+
// TODO(T71778680): Flow-type ASTNodes.
219+
function isModuleRegistryCall(node: $FlowFixMe): boolean {
220+
if (node.type !== 'CallExpression') {
221+
return false;
222+
}
223+
224+
const callExpression = node;
225+
226+
if (callExpression.callee.type !== 'MemberExpression') {
227+
return false;
228+
}
229+
230+
const memberExpression = callExpression.callee;
231+
if (
232+
!(
233+
memberExpression.object.type === 'Identifier' &&
234+
memberExpression.object.name === 'TurboModuleRegistry'
235+
)
236+
) {
237+
return false;
238+
}
239+
240+
if (
241+
!(
242+
memberExpression.property.type === 'Identifier' &&
243+
(memberExpression.property.name === 'get' ||
244+
memberExpression.property.name === 'getEnforcing')
245+
)
246+
) {
247+
return false;
248+
}
249+
250+
if (memberExpression.computed) {
251+
return false;
252+
}
253+
254+
return true;
255+
}
256+
218257
module.exports = {
219258
getConfigType,
220259
extractNativeModuleName,
@@ -223,4 +262,5 @@ module.exports = {
223262
parseFile,
224263
visit,
225264
buildSchemaFromConfigType,
265+
isModuleRegistryCall,
226266
};

0 commit comments

Comments
 (0)