mirror of
https://github.com/react/react-native.git
synced 2026-09-28 13:23:09 +08:00
Simplify type source file resolution logic (#49785)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/49785 Changelog: [Internal] Reviewed By: cipolleschi, iwoplaza Differential Revision: D70487265 fbshipit-source-id: ed4654e975f5fec0fe76f8d5f156fef611e24d14
This commit is contained in:
committed by
Facebook GitHub Bot
parent
3132cc88dd
commit
ec851ccf4f
@@ -11,7 +11,6 @@
|
||||
|
||||
const {PACKAGES_DIR, REPO_ROOT} = require('../../consts');
|
||||
const getRequireStack = require('./resolution/getRequireStack');
|
||||
const resolveTypeInputFile = require('./resolution/resolveTypeInputFile');
|
||||
const translatedModuleTemplate = require('./templates/translatedModule.d.ts-template');
|
||||
const translateSourceFile = require('./translateSourceFile');
|
||||
const {promises: fs} = require('fs');
|
||||
@@ -103,14 +102,6 @@ async function buildTypes(): Promise<void> {
|
||||
const dependencyEdges: DependencyEdges = [];
|
||||
|
||||
while (files.size > 0) {
|
||||
for (const file of files) {
|
||||
const interfaceFile = resolveTypeInputFile(file);
|
||||
if (interfaceFile) {
|
||||
files.delete(file);
|
||||
translatedFiles.add(file);
|
||||
files.add(interfaceFile);
|
||||
}
|
||||
}
|
||||
const dependencies = await translateSourceFiles(dependencyEdges, files);
|
||||
dependencyEdges.push(...dependencies);
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
import type {DependencyContext} from './simpleResolve';
|
||||
import type {ParseResult} from 'hermes-transform/dist/transform/parse';
|
||||
|
||||
const resolveTypeInputFile = require('./resolveTypeInputFile');
|
||||
const simpleResolve = require('./simpleResolve');
|
||||
const debug = require('debug')('build-types:resolution');
|
||||
const {traverse} = require('hermes-transform/dist/traverse/traverse');
|
||||
@@ -82,7 +83,7 @@ async function getDependencies(
|
||||
);
|
||||
|
||||
if (resolved != null) {
|
||||
dependencies.add(resolved);
|
||||
dependencies.add(resolveTypeInputFile(resolved) ?? resolved);
|
||||
}
|
||||
}),
|
||||
);
|
||||
|
||||
@@ -20,18 +20,25 @@ const TYPEDEF_MAPPING: Record<string, $ReadOnlyArray<string>> = {
|
||||
'.js': ['.js.flow'],
|
||||
};
|
||||
|
||||
const cached = new Map<string, ?string>();
|
||||
|
||||
/**
|
||||
* Resolve the Flow file defining the type interface for a given source file.
|
||||
*
|
||||
* Ensures common interface file (js.flow) or base implementation (.js) exists for
|
||||
* platform-specific files (.android.js or .ios.js).
|
||||
*/
|
||||
function resolveTypeInputFile(file: string): string | null {
|
||||
function resolveTypeInputFile(file: string): ?string {
|
||||
if (cached.has(file)) {
|
||||
return cached.get(file);
|
||||
}
|
||||
|
||||
const [pathWithoutExt, extension] = splitPathAndExtension(file);
|
||||
|
||||
const extsToCheck = TYPEDEF_MAPPING[extension];
|
||||
|
||||
if (!extsToCheck) {
|
||||
cached.set(file, null);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -44,12 +51,14 @@ function resolveTypeInputFile(file: string): string | null {
|
||||
path.relative(REPO_ROOT, file),
|
||||
path.relative(REPO_ROOT, interfaceFile),
|
||||
);
|
||||
cached.set(file, interfaceFile);
|
||||
return interfaceFile;
|
||||
}
|
||||
}
|
||||
|
||||
if (extension === '.js') {
|
||||
// .js files do not require a common interface
|
||||
cached.set(file, null);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user