Move isModuleInterface function (Flow, TypeScript) to the Flow and TypeScript parsers. (#36268)
Summary: Task from https://github.com/facebook/react-native/issues/34872 > [Codegen 82] Move isModuleInterface function (Flow, TypeScript) to the Flow and TypeScript parsers. ## Changelog [INTERNAL] [CHANGED] - Moved isModuleInterface function to to the Flow and TypeScript parsers. Pull Request resolved: https://github.com/facebook/react-native/pull/36268 Test Plan: ` yarn test react-native-codegen` Reviewed By: christophpurrer Differential Revision: D43535948 Pulled By: rshest fbshipit-source-id: 7a2db05008783499168b0ce3fa58fedbac2b4e79
This commit is contained in:
Родитель
d528fe28a6
Коммит
85245af880
|
@ -67,6 +67,28 @@ describe('FlowParser', () => {
|
|||
]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('isModuleInterface', () => {
|
||||
it('returns true if it is a valid node', () => {
|
||||
const node = {
|
||||
type: 'InterfaceDeclaration',
|
||||
extends: [
|
||||
{
|
||||
type: 'InterfaceExtends',
|
||||
id: {
|
||||
name: 'TurboModule',
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
expect(parser.isModuleInterface(node)).toBe(true);
|
||||
});
|
||||
|
||||
it('returns false if it is a invalid node', () => {
|
||||
const node = {};
|
||||
expect(parser.isModuleInterface(node)).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('TypeScriptParser', () => {
|
||||
|
@ -116,4 +138,26 @@ describe('TypeScriptParser', () => {
|
|||
]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('isModuleInterface', () => {
|
||||
it('returns true if it is a valid node', () => {
|
||||
const node = {
|
||||
type: 'TSInterfaceDeclaration',
|
||||
extends: [
|
||||
{
|
||||
type: 'TSExpressionWithTypeArguments',
|
||||
expression: {
|
||||
name: 'TurboModule',
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
expect(parser.isModuleInterface(node)).toBe(true);
|
||||
});
|
||||
|
||||
it('returns false if it is a invalid node', () => {
|
||||
const node = {};
|
||||
expect(parser.isModuleInterface(node)).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -330,15 +330,6 @@ function translateTypeAnnotation(
|
|||
}
|
||||
}
|
||||
|
||||
function isModuleInterface(node: $FlowFixMe) {
|
||||
return (
|
||||
node.type === 'InterfaceDeclaration' &&
|
||||
node.extends.length === 1 &&
|
||||
node.extends[0].type === 'InterfaceExtends' &&
|
||||
node.extends[0].id.name === 'TurboModule'
|
||||
);
|
||||
}
|
||||
|
||||
function buildModuleSchema(
|
||||
hasteModuleName: string,
|
||||
/**
|
||||
|
@ -350,7 +341,7 @@ function buildModuleSchema(
|
|||
): NativeModuleSchema {
|
||||
const types = getTypes(ast);
|
||||
const moduleSpecs = (Object.values(types): $ReadOnlyArray<$FlowFixMe>).filter(
|
||||
isModuleInterface,
|
||||
t => parser.isModuleInterface(t),
|
||||
);
|
||||
|
||||
throwIfModuleInterfaceNotFound(
|
||||
|
|
|
@ -196,6 +196,15 @@ class FlowParser implements Parser {
|
|||
value: member.init?.value ?? member.id.name,
|
||||
}));
|
||||
}
|
||||
|
||||
isModuleInterface(node: $FlowFixMe): boolean {
|
||||
return (
|
||||
node.type === 'InterfaceDeclaration' &&
|
||||
node.extends.length === 1 &&
|
||||
node.extends[0].type === 'InterfaceExtends' &&
|
||||
node.extends[0].id.name === 'TurboModule'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
|
|
@ -152,4 +152,9 @@ export interface Parser {
|
|||
* Calculates enum's members
|
||||
*/
|
||||
parseEnumMembers(typeAnnotation: $FlowFixMe): NativeModuleEnumMembers;
|
||||
|
||||
/**
|
||||
* Given a node, it returns true if it is a module interface
|
||||
*/
|
||||
isModuleInterface(node: $FlowFixMe): boolean;
|
||||
}
|
||||
|
|
|
@ -159,4 +159,13 @@ export class MockedParser implements Parser {
|
|||
},
|
||||
];
|
||||
}
|
||||
|
||||
isModuleInterface(node: $FlowFixMe): boolean {
|
||||
return (
|
||||
node.type === 'InterfaceDeclaration' &&
|
||||
node.extends.length === 1 &&
|
||||
node.extends[0].type === 'InterfaceExtends' &&
|
||||
node.extends[0].id.name === 'TurboModule'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -436,15 +436,6 @@ function translateTypeAnnotation(
|
|||
}
|
||||
}
|
||||
|
||||
function isModuleInterface(node: $FlowFixMe) {
|
||||
return (
|
||||
node.type === 'TSInterfaceDeclaration' &&
|
||||
node.extends?.length === 1 &&
|
||||
node.extends[0].type === 'TSExpressionWithTypeArguments' &&
|
||||
node.extends[0].expression.name === 'TurboModule'
|
||||
);
|
||||
}
|
||||
|
||||
function buildModuleSchema(
|
||||
hasteModuleName: string,
|
||||
/**
|
||||
|
@ -456,7 +447,7 @@ function buildModuleSchema(
|
|||
): NativeModuleSchema {
|
||||
const types = getTypes(ast);
|
||||
const moduleSpecs = (Object.values(types): $ReadOnlyArray<$FlowFixMe>).filter(
|
||||
isModuleInterface,
|
||||
t => parser.isModuleInterface(t),
|
||||
);
|
||||
|
||||
throwIfModuleInterfaceNotFound(
|
||||
|
|
|
@ -192,6 +192,15 @@ class TypeScriptParser implements Parser {
|
|||
value: member.initializer?.value ?? member.id.name,
|
||||
}));
|
||||
}
|
||||
|
||||
isModuleInterface(node: $FlowFixMe): boolean {
|
||||
return (
|
||||
node.type === 'TSInterfaceDeclaration' &&
|
||||
node.extends?.length === 1 &&
|
||||
node.extends[0].type === 'TSExpressionWithTypeArguments' &&
|
||||
node.extends[0].expression.name === 'TurboModule'
|
||||
);
|
||||
}
|
||||
}
|
||||
module.exports = {
|
||||
TypeScriptParser,
|
||||
|
|
Загрузка…
Ссылка в новой задаче