diff --git a/packages/react-native-codegen/e2e/__tests__/components/GenerateComponentDescriptorH-test.js b/packages/react-native-codegen/e2e/__tests__/components/GenerateComponentDescriptorH-test.js index 977871af7d21..8d35cca3843e 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GenerateComponentDescriptorH-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GenerateComponentDescriptorH-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GenerateComponentDescriptorH'); const fs = require('fs'); @@ -22,7 +23,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GenerateComponentDescriptorH can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GenerateComponentHObjCpp-test.js b/packages/react-native-codegen/e2e/__tests__/components/GenerateComponentHObjCpp-test.js index 14bc1d2d6b4b..89d14fc74a63 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GenerateComponentHObjCpp-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GenerateComponentHObjCpp-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GenerateComponentHObjCpp'); const fs = require('fs'); @@ -22,7 +23,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GenerateComponentHObjCpp can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GenerateEventEmitterCpp-test.js b/packages/react-native-codegen/e2e/__tests__/components/GenerateEventEmitterCpp-test.js index 1923aa581ba3..603c77b56607 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GenerateEventEmitterCpp-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GenerateEventEmitterCpp-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GenerateEventEmitterCpp'); const fs = require('fs'); @@ -22,7 +23,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GenerateEventEmitterCpp can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GenerateEventEmitterH-test.js b/packages/react-native-codegen/e2e/__tests__/components/GenerateEventEmitterH-test.js index 8a66234e36da..05b1082297cc 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GenerateEventEmitterH-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GenerateEventEmitterH-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GenerateEventEmitterH'); const fs = require('fs'); @@ -22,7 +23,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GenerateEventEmitterH can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsCpp-test.js b/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsCpp-test.js index 7e16b7338c3f..131d4f4fd668 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsCpp-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsCpp-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GeneratePropsCpp'); const fs = require('fs'); @@ -22,7 +23,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GeneratePropsCpp can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsH-test.js b/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsH-test.js index aa406b757acf..0600f6bb70d1 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsH-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsH-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GeneratePropsH'); const fs = require('fs'); @@ -22,7 +23,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GeneratePropsH can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsJavaDelegate-test.js b/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsJavaDelegate-test.js index fd4b1f4f9803..3f87386c4a0e 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsJavaDelegate-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsJavaDelegate-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GeneratePropsJavaDelegate'); const fs = require('fs'); @@ -22,7 +23,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GeneratePropsJavaDelegate can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsJavaInterface-test.js b/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsJavaInterface-test.js index e77f96018204..40fcfe3d9d02 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsJavaInterface-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsJavaInterface-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GeneratePropsJavaInterface'); const fs = require('fs'); @@ -21,7 +22,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GeneratePropsJavaInterface can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema, undefined, false); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GenerateShadowNodeCpp-test.js b/packages/react-native-codegen/e2e/__tests__/components/GenerateShadowNodeCpp-test.js index b0e6af9515bf..a4fa38bddab7 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GenerateShadowNodeCpp-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GenerateShadowNodeCpp-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GenerateShadowNodeCpp'); const fs = require('fs'); @@ -21,7 +22,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GenerateShadowNodeCpp can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema, undefined, false); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GenerateShadowNodeH-test.js b/packages/react-native-codegen/e2e/__tests__/components/GenerateShadowNodeH-test.js index 1d2339dffc4a..0af0ba44f4b2 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GenerateShadowNodeH-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GenerateShadowNodeH-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GenerateShadowNodeH'); const fs = require('fs'); @@ -21,7 +22,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GenerateShadowNodeH can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema, undefined, false); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GenerateViewConfigJs-test.js b/packages/react-native-codegen/e2e/__tests__/components/GenerateViewConfigJs-test.js index 947a2464d58d..fa4d90797ba4 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GenerateViewConfigJs-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GenerateViewConfigJs-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GenerateViewConfigJs'); const fs = require('fs'); @@ -22,7 +23,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GenerateViewConfigJs can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema); expect(output).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/modules/GenerateModuleObjCpp-test.js b/packages/react-native-codegen/e2e/__tests__/modules/GenerateModuleObjCpp-test.js index 822f21330762..a6bb549d056a 100644 --- a/packages/react-native-codegen/e2e/__tests__/modules/GenerateModuleObjCpp-test.js +++ b/packages/react-native-codegen/e2e/__tests__/modules/GenerateModuleObjCpp-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/modules/GenerateModuleObjCpp'); const fs = require('fs'); @@ -23,7 +24,10 @@ function getModules(): SchemaType { const filenames: Array = fs.readdirSync(FIXTURE_DIR); return filenames.reduce( (accumulator, file) => { - const schema = parser.parseFile(`${FIXTURE_DIR}/${file}`); + const schema = parseFile( + `${FIXTURE_DIR}/${file}`, + FlowParser.buildSchema, + ); return { modules: { ...accumulator.modules, diff --git a/packages/react-native-codegen/src/cli/combine/combine-js-to-schema.js b/packages/react-native-codegen/src/cli/combine/combine-js-to-schema.js index 71550527915e..e4bc8780db67 100644 --- a/packages/react-native-codegen/src/cli/combine/combine-js-to-schema.js +++ b/packages/react-native-codegen/src/cli/combine/combine-js-to-schema.js @@ -11,6 +11,7 @@ 'use strict'; import type {SchemaType} from '../../CodegenSchema.js'; +const {parseFile} = require('../../parsers/utils'); const FlowParser = require('../../parsers/flow'); const TypeScriptParser = require('../../parsers/typescript'); const fs = require('fs'); @@ -29,9 +30,10 @@ function combineSchemas(files: Array): SchemaType { const isTypeScript = path.extname(filename) === '.ts' || path.extname(filename) === '.tsx'; - const schema = isTypeScript - ? TypeScriptParser.parseFile(filename) - : FlowParser.parseFile(filename); + const schema = parseFile( + filename, + isTypeScript ? TypeScriptParser.buildSchema : FlowParser.buildSchema, + ); if (schema && schema.modules) { merged.modules = {...merged.modules, ...schema.modules}; diff --git a/packages/react-native-codegen/src/cli/parser/parser.js b/packages/react-native-codegen/src/cli/parser/parser.js index af0dbb17f783..1afc70035bc0 100644 --- a/packages/react-native-codegen/src/cli/parser/parser.js +++ b/packages/react-native-codegen/src/cli/parser/parser.js @@ -11,6 +11,7 @@ 'use strict'; const path = require('path'); +const {parseFile} = require('../../parsers/utils'); const FlowParser = require('../../parsers/flow'); const TypeScriptParser = require('../../parsers/typescript'); @@ -22,9 +23,10 @@ function parseFiles(files: Array) { console.log( filename, JSON.stringify( - isTypeScript - ? TypeScriptParser.parseFile(filename) - : FlowParser.parseFile(filename), + parseFile( + filename, + isTypeScript ? TypeScriptParser.buildSchema : FlowParser.buildSchema, + ), null, 2, ), diff --git a/packages/react-native-codegen/src/parsers/flow/components/__tests__/component-parser-test.js b/packages/react-native-codegen/src/parsers/flow/components/__tests__/component-parser-test.js index 445fb0961939..384b0af5b2c8 100644 --- a/packages/react-native-codegen/src/parsers/flow/components/__tests__/component-parser-test.js +++ b/packages/react-native-codegen/src/parsers/flow/components/__tests__/component-parser-test.js @@ -12,6 +12,7 @@ 'use strict'; const FlowParser = require('../../index.js'); +const {parseFile} = require('../../../utils.js'); const fixtures = require('../__test_fixtures__/fixtures.js'); const failureFixtures = require('../__test_fixtures__/failures.js'); jest.mock('fs', () => ({ @@ -30,7 +31,7 @@ describe('RN Codegen Flow Parser', () => { .sort() .forEach(fixtureName => { it(`can generate fixture ${fixtureName}`, () => { - const schema = FlowParser.parseFile(fixtureName); + const schema = parseFile(fixtureName, FlowParser.buildSchema); const serializedSchema = JSON.stringify(schema, null, 2).replace( /"/g, "'", @@ -44,7 +45,7 @@ describe('RN Codegen Flow Parser', () => { .forEach(fixtureName => { it(`Fails with error message ${fixtureName}`, () => { expect(() => { - FlowParser.parseFile(fixtureName); + parseFile(fixtureName, FlowParser.buildSchema); }).toThrowErrorMatchingSnapshot(); }); }); diff --git a/packages/react-native-codegen/src/parsers/flow/index.js b/packages/react-native-codegen/src/parsers/flow/index.js index 60d6486f0c9e..f75577691b93 100644 --- a/packages/react-native-codegen/src/parsers/flow/index.js +++ b/packages/react-native-codegen/src/parsers/flow/index.js @@ -119,12 +119,6 @@ function buildSchema(contents: string, filename: ?string): SchemaType { } } -function parseFile(filename: string): SchemaType { - const contents = fs.readFileSync(filename, 'utf8'); - - return buildSchema(contents, filename); -} - function parseModuleFixture(filename: string): SchemaType { const contents = fs.readFileSync(filename, 'utf8'); @@ -136,7 +130,7 @@ function parseString(contents: string, filename: ?string): SchemaType { } module.exports = { - parseFile, + buildSchema, parseModuleFixture, parseString, }; diff --git a/packages/react-native-codegen/src/parsers/typescript/components/__tests__/typescript-component-parser-test.js b/packages/react-native-codegen/src/parsers/typescript/components/__tests__/typescript-component-parser-test.js index 4efe01af0b7b..19a49a6b8ad2 100644 --- a/packages/react-native-codegen/src/parsers/typescript/components/__tests__/typescript-component-parser-test.js +++ b/packages/react-native-codegen/src/parsers/typescript/components/__tests__/typescript-component-parser-test.js @@ -12,6 +12,7 @@ 'use strict'; const TypeScriptParser = require('../../index.js'); +const {parseFile} = require('../../../utils.js'); const fixtures = require('../__test_fixtures__/fixtures.js'); const failureFixtures = require('../__test_fixtures__/failures.js'); jest.mock('fs', () => ({ @@ -30,7 +31,7 @@ describe('RN Codegen TypeScript Parser', () => { .sort() .forEach(fixtureName => { it(`can generate fixture ${fixtureName}`, () => { - const schema = TypeScriptParser.parseFile(fixtureName); + const schema = parseFile(fixtureName, TypeScriptParser.buildSchema); const serializedSchema = JSON.stringify(schema, null, 2).replace( /"/g, "'", @@ -44,7 +45,7 @@ describe('RN Codegen TypeScript Parser', () => { .forEach(fixtureName => { it(`Fails with error message ${fixtureName}`, () => { expect(() => { - TypeScriptParser.parseFile(fixtureName); + parseFile(fixtureName, TypeScriptParser.buildSchema); }).toThrowErrorMatchingSnapshot(); }); }); diff --git a/packages/react-native-codegen/src/parsers/typescript/index.js b/packages/react-native-codegen/src/parsers/typescript/index.js index 2210442026cb..2dcbc01cdd37 100644 --- a/packages/react-native-codegen/src/parsers/typescript/index.js +++ b/packages/react-native-codegen/src/parsers/typescript/index.js @@ -130,12 +130,6 @@ function buildSchema(contents: string, filename: ?string): SchemaType { } } -function parseFile(filename: string): SchemaType { - const contents = fs.readFileSync(filename, 'utf8'); - - return buildSchema(contents, filename); -} - function parseModuleFixture(filename: string): SchemaType { const contents = fs.readFileSync(filename, 'utf8'); @@ -147,7 +141,7 @@ function parseString(contents: string, filename: ?string): SchemaType { } module.exports = { - parseFile, + buildSchema, parseModuleFixture, parseString, }; diff --git a/packages/react-native-codegen/src/parsers/utils.js b/packages/react-native-codegen/src/parsers/utils.js index 151c30fb91b1..72ead5d7e2c8 100644 --- a/packages/react-native-codegen/src/parsers/utils.js +++ b/packages/react-native-codegen/src/parsers/utils.js @@ -10,8 +10,11 @@ 'use strict'; +import type {SchemaType} from '../CodegenSchema'; + const {ParserError} = require('./errors'); +const fs = require('fs'); const path = require('path'); export type TypeDeclarationMap = {[declarationName: string]: $FlowFixMe}; @@ -54,6 +57,15 @@ function createParserErrorCapturer(): [ return [errors, guard]; } +function parseFile( + filename: string, + callback: (contents: string, filename: string) => SchemaType, +): SchemaType { + const contents = fs.readFileSync(filename, 'utf8'); + + return callback(contents, filename); +} + function verifyPlatforms( hasteModuleName: string, moduleNames: string[], @@ -122,6 +134,7 @@ function visit( module.exports = { extractNativeModuleName, createParserErrorCapturer, + parseFile, verifyPlatforms, visit, };