Skip to content

Commit 1672d29

Browse files
committed
refactor: move buildSchema into utils file
It avoid circular dependencies and it is temporary It will be moved again in #35158
1 parent f510934 commit 1672d29

File tree

6 files changed

+139
-135
lines changed

6 files changed

+139
-135
lines changed

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

Lines changed: 1 addition & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -11,72 +11,13 @@
1111
'use strict';
1212

1313
import type {SchemaType} from '../../CodegenSchema.js';
14-
import type {Parser} from '../parser';
1514

16-
// $FlowFixMe[untyped-import] there's no flowtype flow-parser
17-
const flowParser = require('flow-parser');
1815
const fs = require('fs');
19-
const {
20-
buildSchemaFromConfigType,
21-
getConfigType,
22-
isModuleRegistryCall,
23-
} = require('../utils');
24-
const {buildComponentSchema} = require('./components');
25-
const {wrapComponentSchema} = require('./components/schema');
26-
const {buildModuleSchema} = require('./modules');
16+
const {buildSchema} = require('./utils');
2717
const {FlowParser} = require('./parser');
2818

2919
const parser = new FlowParser();
3020

31-
function Visitor(infoMap: {isComponent: boolean, isModule: boolean}) {
32-
return {
33-
CallExpression(node: $FlowFixMe) {
34-
if (
35-
node.callee.type === 'Identifier' &&
36-
node.callee.name === 'codegenNativeComponent'
37-
) {
38-
infoMap.isComponent = true;
39-
}
40-
41-
if (isModuleRegistryCall(node)) {
42-
infoMap.isModule = true;
43-
}
44-
},
45-
InterfaceExtends(node: $FlowFixMe) {
46-
if (node.id.name === 'TurboModule') {
47-
infoMap.isModule = true;
48-
}
49-
},
50-
};
51-
}
52-
53-
function buildSchema(
54-
contents: string,
55-
filename: ?string,
56-
parser: Parser,
57-
): SchemaType {
58-
// Early return for non-Spec JavaScript files
59-
if (
60-
!contents.includes('codegenNativeComponent') &&
61-
!contents.includes('TurboModule')
62-
) {
63-
return {modules: {}};
64-
}
65-
66-
const ast = flowParser.parse(contents, {enums: true});
67-
const configType = getConfigType(ast, Visitor);
68-
69-
return buildSchemaFromConfigType(
70-
configType,
71-
filename,
72-
ast,
73-
wrapComponentSchema,
74-
buildComponentSchema,
75-
buildModuleSchema,
76-
parser,
77-
);
78-
}
79-
8021
function parseModuleFixture(filename: string): SchemaType {
8122
const contents = fs.readFileSync(filename, 'utf8');
8223

@@ -88,7 +29,6 @@ function parseString(contents: string, filename: ?string): SchemaType {
8829
}
8930

9031
module.exports = {
91-
buildSchema,
9232
parseModuleFixture,
9333
parseString,
9434
};

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import type {
1717
import type {ParserType} from '../errors';
1818
import type {Parser} from '../parser';
1919

20-
const {buildSchema} = require('.');
20+
const {buildSchema} = require('./utils');
2121

2222
const fs = require('fs');
2323

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

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,69 @@
1010

1111
'use strict';
1212

13+
import type {SchemaType} from '../../CodegenSchema';
14+
import type {Parser} from '../parser';
1315
import type {TypeAliasResolutionStatus, TypeDeclarationMap} from '../utils';
16+
const {buildComponentSchema} = require('./components');
17+
const {wrapComponentSchema} = require('./components/schema');
18+
const {buildModuleSchema} = require('./modules');
19+
20+
// $FlowFixMe[untyped-import] there's no flowtype flow-parser
21+
const flowParser = require('flow-parser');
22+
const {
23+
getConfigType,
24+
buildSchemaFromConfigType,
25+
isModuleRegistryCall,
26+
} = require('../utils');
27+
28+
function Visitor(infoMap: {isComponent: boolean, isModule: boolean}) {
29+
return {
30+
CallExpression(node: $FlowFixMe) {
31+
if (
32+
node.callee.type === 'Identifier' &&
33+
node.callee.name === 'codegenNativeComponent'
34+
) {
35+
infoMap.isComponent = true;
36+
}
37+
38+
if (isModuleRegistryCall(node)) {
39+
infoMap.isModule = true;
40+
}
41+
},
42+
InterfaceExtends(node: $FlowFixMe) {
43+
if (node.id.name === 'TurboModule') {
44+
infoMap.isModule = true;
45+
}
46+
},
47+
};
48+
}
49+
50+
function buildSchema(
51+
contents: string,
52+
filename: ?string,
53+
parser: Parser,
54+
): SchemaType {
55+
// Early return for non-Spec JavaScript files
56+
if (
57+
!contents.includes('codegenNativeComponent') &&
58+
!contents.includes('TurboModule')
59+
) {
60+
return {modules: {}};
61+
}
62+
63+
const ast = flowParser.parse(contents, {enums: true});
64+
const configType = getConfigType(ast, Visitor);
65+
66+
return buildSchemaFromConfigType(
67+
configType,
68+
filename,
69+
ast,
70+
wrapComponentSchema,
71+
buildComponentSchema,
72+
buildModuleSchema,
73+
parser,
74+
);
75+
}
1476

1577
/**
1678
* This FlowFixMe is supposed to refer to an InterfaceDeclaration or TypeAlias
@@ -117,6 +179,7 @@ function getValueFromTypes(value: ASTNode, types: TypeDeclarationMap): ASTNode {
117179
}
118180

119181
module.exports = {
182+
buildSchema,
120183
getValueFromTypes,
121184
resolveTypeAnnotation,
122185
getTypes,

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

Lines changed: 1 addition & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -11,82 +11,13 @@
1111
'use strict';
1212

1313
import type {SchemaType} from '../../CodegenSchema.js';
14-
import type {Parser} from '../parser';
1514

16-
// $FlowFixMe[untyped-import] Use flow-types for @babel/parser
17-
const babelParser = require('@babel/parser');
1815
const fs = require('fs');
19-
const {
20-
buildSchemaFromConfigType,
21-
getConfigType,
22-
isModuleRegistryCall,
23-
} = require('../utils');
24-
const {buildComponentSchema} = require('./components');
25-
const {wrapComponentSchema} = require('./components/schema');
26-
const {buildModuleSchema} = require('./modules');
16+
const {buildSchema} = require('./utils');
2717
const {TypeScriptParser} = require('./parser');
2818

2919
const parser = new TypeScriptParser();
3020

31-
function Visitor(infoMap: {isComponent: boolean, isModule: boolean}) {
32-
return {
33-
CallExpression(node: $FlowFixMe) {
34-
if (
35-
node.callee.type === 'Identifier' &&
36-
node.callee.name === 'codegenNativeComponent'
37-
) {
38-
infoMap.isComponent = true;
39-
}
40-
41-
if (isModuleRegistryCall(node)) {
42-
infoMap.isModule = true;
43-
}
44-
},
45-
46-
TSInterfaceDeclaration(node: $FlowFixMe) {
47-
if (
48-
Array.isArray(node.extends) &&
49-
node.extends.some(
50-
extension => extension.expression.name === 'TurboModule',
51-
)
52-
) {
53-
infoMap.isModule = true;
54-
}
55-
},
56-
};
57-
}
58-
59-
function buildSchema(
60-
contents: string,
61-
filename: ?string,
62-
parser: Parser,
63-
): SchemaType {
64-
// Early return for non-Spec JavaScript files
65-
if (
66-
!contents.includes('codegenNativeComponent') &&
67-
!contents.includes('TurboModule')
68-
) {
69-
return {modules: {}};
70-
}
71-
72-
const ast = babelParser.parse(contents, {
73-
sourceType: 'module',
74-
plugins: ['typescript'],
75-
}).program;
76-
77-
const configType = getConfigType(ast, Visitor);
78-
79-
return buildSchemaFromConfigType(
80-
configType,
81-
filename,
82-
ast,
83-
wrapComponentSchema,
84-
buildComponentSchema,
85-
buildModuleSchema,
86-
parser,
87-
);
88-
}
89-
9021
function parseModuleFixture(filename: string): SchemaType {
9122
const contents = fs.readFileSync(filename, 'utf8');
9223

@@ -98,7 +29,6 @@ function parseString(contents: string, filename: ?string): SchemaType {
9829
}
9930

10031
module.exports = {
101-
buildSchema,
10232
parseModuleFixture,
10333
parseString,
10434
};

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import type {
1717
import type {ParserType} from '../errors';
1818
import type {Parser} from '../parser';
1919

20-
const {buildSchema} = require('.');
20+
const {buildSchema} = require('./utils');
2121

2222
const fs = require('fs');
2323

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

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,83 @@
1111
'use strict';
1212

1313
import type {TypeAliasResolutionStatus, TypeDeclarationMap} from '../utils';
14+
import type {Parser} from '../parser';
1415

16+
// $FlowFixMe[untyped-import] Use flow-types for @babel/parser
17+
const babelParser = require('@babel/parser');
18+
const {
19+
buildSchemaFromConfigType,
20+
getConfigType,
21+
isModuleRegistryCall,
22+
} = require('../utils');
23+
const {buildComponentSchema} = require('./components');
24+
const {wrapComponentSchema} = require('./components/schema');
25+
const {buildModuleSchema} = require('./modules');
1526
const {parseTopLevelType} = require('./parseTopLevelType');
27+
import type {SchemaType} from '../../CodegenSchema';
28+
29+
function Visitor(infoMap: {isComponent: boolean, isModule: boolean}) {
30+
return {
31+
CallExpression(node: $FlowFixMe) {
32+
if (
33+
node.callee.type === 'Identifier' &&
34+
node.callee.name === 'codegenNativeComponent'
35+
) {
36+
infoMap.isComponent = true;
37+
}
38+
39+
if (isModuleRegistryCall(node)) {
40+
infoMap.isModule = true;
41+
}
42+
},
43+
44+
TSInterfaceDeclaration(node: $FlowFixMe) {
45+
if (
46+
Array.isArray(node.extends) &&
47+
node.extends.some(
48+
extension => extension.expression.name === 'TurboModule',
49+
)
50+
) {
51+
infoMap.isModule = true;
52+
}
53+
},
54+
};
55+
}
56+
57+
function buildSchema(
58+
contents: string,
59+
filename: ?string,
60+
parser: Parser,
61+
): SchemaType {
62+
// Early return for non-Spec JavaScript files
63+
if (
64+
!contents.includes('codegenNativeComponent') &&
65+
!contents.includes('TurboModule')
66+
) {
67+
return {modules: {}};
68+
}
69+
70+
const ast = babelParser.parse(contents, {
71+
sourceType: 'module',
72+
plugins: ['typescript'],
73+
}).program;
74+
75+
const configType = getConfigType(ast, Visitor);
76+
77+
return buildSchemaFromConfigType(
78+
configType,
79+
filename,
80+
ast,
81+
wrapComponentSchema,
82+
buildComponentSchema,
83+
buildModuleSchema,
84+
parser,
85+
);
86+
}
1687

1788
/**
1889
* TODO(T108222691): Use flow-types for @babel/parser
1990
*/
20-
2191
function getTypes(ast: $FlowFixMe): TypeDeclarationMap {
2292
return ast.body.reduce((types, node) => {
2393
switch (node.type) {
@@ -110,6 +180,7 @@ function resolveTypeAnnotation(
110180
}
111181

112182
module.exports = {
183+
buildSchema,
113184
resolveTypeAnnotation,
114185
getTypes,
115186
};

0 commit comments

Comments
 (0)