mirror of
https://github.com/zebrajr/react.git
synced 2025-12-06 12:20:20 +01:00
This implements 'usePress' in user-space as a combination of 'useKeyboard' and 'useTap'. The existing 'usePress' API is preserved for now. The previous 'usePress' implementation is moved to 'PressLegacy'.
93 lines
2.8 KiB
JavaScript
93 lines
2.8 KiB
JavaScript
'use strict';
|
|
|
|
const forks = require('./forks');
|
|
const bundleTypes = require('./bundles').bundleTypes;
|
|
|
|
const UMD_DEV = bundleTypes.UMD_DEV;
|
|
const UMD_PROD = bundleTypes.UMD_PROD;
|
|
const UMD_PROFILING = bundleTypes.UMD_PROFILING;
|
|
|
|
// For any external that is used in a DEV-only condition, explicitly
|
|
// specify whether it has side effects during import or not. This lets
|
|
// us know whether we can safely omit them when they are unused.
|
|
const HAS_NO_SIDE_EFFECTS_ON_IMPORT = false;
|
|
// const HAS_SIDE_EFFECTS_ON_IMPORT = true;
|
|
const importSideEffects = Object.freeze({
|
|
'prop-types/checkPropTypes': HAS_NO_SIDE_EFFECTS_ON_IMPORT,
|
|
'react-native/Libraries/ReactPrivate/ReactNativePrivateInterface': HAS_NO_SIDE_EFFECTS_ON_IMPORT,
|
|
scheduler: HAS_NO_SIDE_EFFECTS_ON_IMPORT,
|
|
'scheduler/tracing': HAS_NO_SIDE_EFFECTS_ON_IMPORT,
|
|
});
|
|
|
|
// Bundles exporting globals that other modules rely on.
|
|
const knownGlobals = Object.freeze({
|
|
react: 'React',
|
|
'react-dom': 'ReactDOM',
|
|
'react-ui/events/keyboard': 'ReactEventsKeyboard',
|
|
'react-ui/events/tap': 'ReactEventsTap',
|
|
scheduler: 'Scheduler',
|
|
'scheduler/tracing': 'SchedulerTracing',
|
|
'scheduler/unstable_mock': 'SchedulerMock',
|
|
});
|
|
|
|
// Given ['react'] in bundle externals, returns { 'react': 'React' }.
|
|
function getPeerGlobals(externals, bundleType) {
|
|
const peerGlobals = {};
|
|
externals.forEach(name => {
|
|
if (
|
|
!knownGlobals[name] &&
|
|
(bundleType === UMD_DEV ||
|
|
bundleType === UMD_PROD ||
|
|
bundleType === UMD_PROFILING)
|
|
) {
|
|
throw new Error('Cannot build UMD without a global name for: ' + name);
|
|
}
|
|
peerGlobals[name] = knownGlobals[name];
|
|
});
|
|
return peerGlobals;
|
|
}
|
|
|
|
// Determines node_modules packages that are safe to assume will exist.
|
|
function getDependencies(bundleType, entry) {
|
|
// Replaces any part of the entry that follow the package name (like
|
|
// "/server" in "react-dom/server") by the path to the package settings
|
|
const packageJson = require(entry.replace(/(\/.*)?$/, '/package.json'));
|
|
// Both deps and peerDeps are assumed as accessible.
|
|
return Array.from(
|
|
new Set([
|
|
...Object.keys(packageJson.dependencies || {}),
|
|
...Object.keys(packageJson.peerDependencies || {}),
|
|
])
|
|
);
|
|
}
|
|
|
|
// Hijacks some modules for optimization and integration reasons.
|
|
function getForks(bundleType, entry, moduleType) {
|
|
const forksForBundle = {};
|
|
Object.keys(forks).forEach(srcModule => {
|
|
const dependencies = getDependencies(bundleType, entry);
|
|
const targetModule = forks[srcModule](
|
|
bundleType,
|
|
entry,
|
|
dependencies,
|
|
moduleType
|
|
);
|
|
if (targetModule === null) {
|
|
return;
|
|
}
|
|
forksForBundle[srcModule] = targetModule;
|
|
});
|
|
return forksForBundle;
|
|
}
|
|
|
|
function getImportSideEffects() {
|
|
return importSideEffects;
|
|
}
|
|
|
|
module.exports = {
|
|
getImportSideEffects,
|
|
getPeerGlobals,
|
|
getDependencies,
|
|
getForks,
|
|
};
|