@samitouri / QOS-React-2 / commits / edfedf3ae9

Fork ReactSharedInternals for UMD builds (#15617)

Andrew Clark committed May 10, 2019 at 13:51 UTC edfedf3ae9453c646afe5e77c75bd2a53159e262
5 files changed +60 -17
packages/react/src/ReactSharedInternals.js
-14
@@ -6,8 +6,6 @@
6 */
7
8 import assign from 'object-assign';
9 -import * as Scheduler from 'scheduler';
10 -import * as SchedulerTracing from 'scheduler/tracing';
9 import ReactCurrentDispatcher from './ReactCurrentDispatcher';
10 import ReactCurrentOwner from './ReactCurrentOwner';
11 import ReactDebugCurrentFrame from './ReactDebugCurrentFrame';
@@ -21,18 +19,6 @@ const ReactSharedInternals = {
19 assign,
20 };
21
24 -if (__UMD__) {
25 - // Re-export the schedule API(s) for UMD bundles.
26 - // This avoids introducing a dependency on a new UMD global in a minor update,
27 - // Since that would be a breaking change (e.g. for all existing CodeSandboxes).
28 - // This re-export is only required for UMD bundles;
29 - // CJS bundles use the shared NPM package.
30 - Object.assign(ReactSharedInternals, {
31 - Scheduler,
32 - SchedulerTracing,
33 - });
34 -}
35 -
22 if (__DEV__) {
23 Object.assign(ReactSharedInternals, {
24 // These should not be included in production.
packages/react/src/forks/ReactSharedInternals.umd.js new
+44
@@ -0,0 +1,44 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import assign from 'object-assign';
9 +import * as Scheduler from 'scheduler';
10 +import * as SchedulerTracing from 'scheduler/tracing';
11 +import ReactCurrentDispatcher from '../ReactCurrentDispatcher';
12 +import ReactCurrentOwner from '../ReactCurrentOwner';
13 +import ReactDebugCurrentFrame from '../ReactDebugCurrentFrame';
14 +
15 +const ReactSharedInternals = {
16 + ReactCurrentDispatcher,
17 + ReactCurrentOwner,
18 + // used by act()
19 + ReactShouldWarnActingUpdates: {current: false},
20 + // Used by renderers to avoid bundling object-assign twice in UMD bundles:
21 + assign,
22 +};
23 +
24 +if (__DEV__) {
25 + Object.assign(ReactSharedInternals, {
26 + // These should not be included in production.
27 + ReactDebugCurrentFrame,
28 + // Shim for React DOM 16.0.0 which still destructured (but not used) this.
29 + // TODO: remove in React 17.0.
30 + ReactComponentTreeHook: {},
31 + });
32 +}
33 +
34 +// Re-export the schedule API(s) for UMD bundles.
35 +// This avoids introducing a dependency on a new UMD global in a minor update,
36 +// Since that would be a breaking change (e.g. for all existing CodeSandboxes).
37 +// This re-export is only required for UMD bundles;
38 +// CJS bundles use the shared NPM package.
39 +Object.assign(ReactSharedInternals, {
40 + Scheduler,
41 + SchedulerTracing,
42 +});
43 +
44 +export default ReactSharedInternals;
packages/scheduler/src/__tests__/SchedulerUMDBundle-test.internal.js
+4 -2
@@ -55,7 +55,8 @@ describe('Scheduling UMD bundle', () => {
55 const umdAPIDev = require('../../npm/umd/scheduler.development');
56 const umdAPIProd = require('../../npm/umd/scheduler.production.min');
57 const umdAPIProfiling = require('../../npm/umd/scheduler.profiling.min');
58 - const secretAPI = require('react/src/ReactSharedInternals').default;
58 + const secretAPI = require('react/src/forks/ReactSharedInternals.umd')
59 + .default;
60 validateForwardedAPIs(api, [
61 umdAPIDev,
62 umdAPIProd,
@@ -69,7 +70,8 @@ describe('Scheduling UMD bundle', () => {
70 const umdAPIDev = require('../../npm/umd/scheduler-tracing.development');
71 const umdAPIProd = require('../../npm/umd/scheduler-tracing.production.min');
72 const umdAPIProfiling = require('../../npm/umd/scheduler-tracing.profiling.min');
72 - const secretAPI = require('react/src/ReactSharedInternals').default;
73 + const secretAPI = require('react/src/forks/ReactSharedInternals.umd')
74 + .default;
75 validateForwardedAPIs(api, [
76 umdAPIDev,
77 umdAPIProd,
packages/shared/__tests__/ReactDOMFrameScheduling-test.js
+1 -1
@@ -35,7 +35,7 @@ describe('ReactDOMFrameScheduling', () => {
35 };
36 spyOnDevAndProd(console, 'error');
37 require('react-dom');
38 - expect(console.error.calls.count()).toEqual(2);
38 + expect(console.error.calls.count()).toEqual(1);
39 expect(console.error.calls.argsFor(0)[0]).toMatch(
40 "This browser doesn't support requestAnimationFrame.",
41 );
scripts/rollup/forks.js
+11
@@ -230,6 +230,17 @@ const forks = Object.freeze({
230 }
231 },
232
233 + 'react/src/ReactSharedInternals.js': (bundleType, entry) => {
234 + switch (bundleType) {
235 + case UMD_DEV:
236 + case UMD_PROD:
237 + case UMD_PROFILING:
238 + return 'react/src/forks/ReactSharedInternals.umd.js';
239 + default:
240 + return null;
241 + }
242 + },
243 +
244 // Different wrapping/reporting for caught errors.
245 'shared/invokeGuardedCallbackImpl': (bundleType, entry) => {
246 switch (bundleType) {