UNPKG

17.4 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/react/optimizing.js"],"names":["applyWriteEffectsForOptimizedComponent","realm","componentType","_effects","componentTreeState","evaluatedNode","writeEffects","environmentRecordIdAfterGlobalCode","effects","additionalFunctionEffects","ReconcilerFatalError","name","value","result","intrinsics","undefined","status","set","prototype","ObjectValue","renderMethod","ECMAScriptSourceFunctionValue","contextTypes","size","ObjectPrototype","noOpFunc","key","Properties","Set","optimizeReactComponentTreeBranches","reconciler","logger","react","verbose","branchedComponentTrees","length","logInformation","rootValue","branchRootValue","branchComponentType","hasEvaluatedRootNode","clearComponentTreeState","branchEffects","resolveReactComponentTree","branchComponentTreeState","optimizeReactNestedClosures","nestedOptimizedClosures","func","nestedEffects","context","hasEvaluatedNestedClosure","closureEffects","resolveNestedOptimizedClosure","BoundFunctionValue","$BoundTargetFunction","optimizeReactComponentTreeRoot","componentRoot","config","statistics","Reconciler","evaluatedRootNode","evaluatedRootNodes","push","componentTreeEffects","startingComponentTreeBranches","optimizeNestedFunctions","applyOptimizedReactComponents","optimizedNestedClosuresToWrite"],"mappings":"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","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow strict-local */\n\nimport { type Effects, Realm } from \"../realm.js\";\nimport { AbstractValue, ECMAScriptSourceFunctionValue, BoundFunctionValue, ObjectValue } from \"../values/index.js\";\nimport { createAdditionalEffects } from \"../serializer/utils.js\";\nimport {\n convertFunctionalComponentToComplexClassComponent,\n convertSimpleClassComponentToFunctionalComponent,\n createNoopFunction,\n createReactEvaluatedNode,\n getComponentName,\n getComponentTypeFromRootValue,\n normalizeFunctionalComponentParamaters,\n valueIsClassComponent,\n} from \"./utils.js\";\nimport { type WriteEffects, type ReactEvaluatedNode, ReactStatistics } from \"../serializer/types.js\";\nimport { Reconciler, type ComponentTreeState } from \"./reconcilation.js\";\nimport { ReconcilerFatalError } from \"./errors.js\";\nimport { Properties } from \"../singletons.js\";\nimport { Get } from \"../methods/index.js\";\nimport invariant from \"../invariant.js\";\nimport type { ReactComponentTreeConfig } from \"../types.js\";\nimport { Logger } from \"../utils/logger.js\";\n\nfunction applyWriteEffectsForOptimizedComponent(\n realm: Realm,\n componentType: ECMAScriptSourceFunctionValue,\n _effects: Effects,\n componentTreeState: ComponentTreeState,\n evaluatedNode: ReactEvaluatedNode,\n writeEffects: WriteEffects,\n environmentRecordIdAfterGlobalCode: number\n): void {\n let effects = _effects;\n let additionalFunctionEffects = createAdditionalEffects(\n realm,\n effects,\n false,\n \"ReactAdditionalFunctionEffects\",\n environmentRecordIdAfterGlobalCode\n );\n if (additionalFunctionEffects === null) {\n throw new ReconcilerFatalError(\n `Failed to optimize React component tree for \"${evaluatedNode.name}\" due to an unsupported completion`,\n evaluatedNode\n );\n }\n effects = additionalFunctionEffects.effects;\n let value = effects.result;\n\n if (value === realm.intrinsics.undefined) {\n // if we get undefined, then this component tree failed and a message was already logged\n // in the reconciler\n return;\n }\n if (valueIsClassComponent(realm, componentType)) {\n if (componentTreeState.status === \"SIMPLE\") {\n // if the root component was a class and is now simple, we can convert it from a class\n // component to a functional component\n convertSimpleClassComponentToFunctionalComponent(realm, componentType, additionalFunctionEffects);\n normalizeFunctionalComponentParamaters(componentType);\n writeEffects.set(componentType, additionalFunctionEffects);\n } else {\n let prototype = Get(realm, componentType, \"prototype\");\n invariant(prototype instanceof ObjectValue);\n let renderMethod = Get(realm, prototype, \"render\");\n invariant(renderMethod instanceof ECMAScriptSourceFunctionValue);\n writeEffects.set(renderMethod, additionalFunctionEffects);\n }\n } else {\n if (componentTreeState.status === \"COMPLEX\") {\n convertFunctionalComponentToComplexClassComponent(\n realm,\n componentType,\n componentTreeState.componentType,\n additionalFunctionEffects\n );\n let prototype = Get(realm, componentType, \"prototype\");\n invariant(prototype instanceof ObjectValue);\n let renderMethod = Get(realm, prototype, \"render\");\n invariant(renderMethod instanceof ECMAScriptSourceFunctionValue);\n writeEffects.set(renderMethod, additionalFunctionEffects);\n } else {\n normalizeFunctionalComponentParamaters(componentType);\n writeEffects.set(componentType, additionalFunctionEffects);\n }\n }\n // apply contextTypes for legacy context\n if (componentTreeState.contextTypes.size > 0) {\n let contextTypes = new ObjectValue(realm, realm.intrinsics.ObjectPrototype);\n let noOpFunc = createNoopFunction(realm);\n for (let key of componentTreeState.contextTypes) {\n Properties.Set(realm, contextTypes, key, noOpFunc, true);\n }\n Properties.Set(realm, componentType, \"contextTypes\", contextTypes, true);\n }\n}\n\nfunction optimizeReactComponentTreeBranches(\n realm: Realm,\n reconciler: Reconciler,\n writeEffects: WriteEffects,\n environmentRecordIdAfterGlobalCode: number,\n logger: Logger\n): void {\n if (realm.react.verbose && reconciler.branchedComponentTrees.length > 0) {\n logger.logInformation(` Evaluating React component tree branches...`);\n }\n // for now we just use abstract props/context, in the future we'll create a new branch with a new component\n // that used the props/context. It will extend the original component and only have a render method\n for (let { rootValue: branchRootValue, evaluatedNode } of reconciler.branchedComponentTrees) {\n let branchComponentType = getComponentTypeFromRootValue(realm, branchRootValue);\n if (branchComponentType === null) {\n evaluatedNode.status = \"UNKNOWN_TYPE\";\n continue;\n }\n // so we don't process the same component multiple times (we might change this logic later)\n if (reconciler.hasEvaluatedRootNode(branchComponentType, evaluatedNode)) {\n continue;\n }\n reconciler.clearComponentTreeState();\n if (realm.react.verbose) {\n logger.logInformation(` Evaluating ${evaluatedNode.name} (branch)`);\n }\n let branchEffects = reconciler.resolveReactComponentTree(branchComponentType, null, null, evaluatedNode);\n if (realm.react.verbose) {\n logger.logInformation(` ✔ ${evaluatedNode.name} (branch)`);\n }\n let branchComponentTreeState = reconciler.componentTreeState;\n applyWriteEffectsForOptimizedComponent(\n realm,\n branchComponentType,\n branchEffects,\n branchComponentTreeState,\n evaluatedNode,\n writeEffects,\n environmentRecordIdAfterGlobalCode\n );\n }\n}\n\nfunction optimizeReactNestedClosures(\n realm: Realm,\n reconciler: Reconciler,\n writeEffects: WriteEffects,\n environmentRecordIdAfterGlobalCode: number,\n logger: Logger\n): void {\n if (realm.react.verbose && reconciler.nestedOptimizedClosures.length > 0) {\n logger.logInformation(` Evaluating nested closures...`);\n }\n for (let { func, evaluatedNode, nestedEffects, componentType, context } of reconciler.nestedOptimizedClosures) {\n if (reconciler.hasEvaluatedNestedClosure(func)) {\n continue;\n }\n if (func instanceof ECMAScriptSourceFunctionValue && reconciler.hasEvaluatedRootNode(func, evaluatedNode)) {\n continue;\n }\n if (realm.react.verbose) {\n logger.logInformation(` Evaluating function \"${getComponentName(realm, func)}\"`);\n }\n let closureEffects = reconciler.resolveNestedOptimizedClosure(\n func,\n nestedEffects,\n componentType,\n context,\n evaluatedNode\n );\n if (realm.react.verbose) {\n logger.logInformation(` ✔ function \"${getComponentName(realm, func)}\"`);\n }\n let additionalFunctionEffects = createAdditionalEffects(\n realm,\n closureEffects,\n true,\n \"ReactNestedAdditionalFunctionEffects\",\n environmentRecordIdAfterGlobalCode\n );\n invariant(additionalFunctionEffects);\n if (func instanceof BoundFunctionValue) {\n invariant(func.$BoundTargetFunction instanceof ECMAScriptSourceFunctionValue);\n writeEffects.set(func.$BoundTargetFunction, additionalFunctionEffects);\n } else {\n writeEffects.set(func, additionalFunctionEffects);\n }\n }\n}\n\nexport function optimizeReactComponentTreeRoot(\n realm: Realm,\n componentRoot: ECMAScriptSourceFunctionValue | AbstractValue,\n config: ReactComponentTreeConfig,\n writeEffects: WriteEffects,\n environmentRecordIdAfterGlobalCode: number,\n logger: Logger,\n statistics: ReactStatistics\n): void {\n let reconciler = new Reconciler(realm, config, statistics, logger);\n let componentType = getComponentTypeFromRootValue(realm, componentRoot);\n if (componentType === null) {\n return;\n }\n let evaluatedRootNode = createReactEvaluatedNode(\"ROOT\", getComponentName(realm, componentType));\n statistics.evaluatedRootNodes.push(evaluatedRootNode);\n if (reconciler.hasEvaluatedRootNode(componentType, evaluatedRootNode)) {\n return;\n }\n if (realm.react.verbose) {\n logger.logInformation(` Evaluating ${evaluatedRootNode.name} (root)`);\n }\n let componentTreeEffects = reconciler.resolveReactComponentTree(componentType, null, null, evaluatedRootNode);\n if (realm.react.verbose) {\n logger.logInformation(` ✔ ${evaluatedRootNode.name} (root)`);\n }\n\n applyWriteEffectsForOptimizedComponent(\n realm,\n componentType,\n componentTreeEffects,\n reconciler.componentTreeState,\n evaluatedRootNode,\n writeEffects,\n environmentRecordIdAfterGlobalCode\n );\n\n let startingComponentTreeBranches = 0;\n do {\n startingComponentTreeBranches = reconciler.branchedComponentTrees.length;\n optimizeReactComponentTreeBranches(realm, reconciler, writeEffects, environmentRecordIdAfterGlobalCode, logger);\n if (realm.react.optimizeNestedFunctions) {\n optimizeReactNestedClosures(realm, reconciler, writeEffects, environmentRecordIdAfterGlobalCode, logger);\n }\n } while (startingComponentTreeBranches !== reconciler.branchedComponentTrees.length);\n}\n\nexport function applyOptimizedReactComponents(\n realm: Realm,\n writeEffects: WriteEffects,\n environmentRecordIdAfterGlobalCode: number\n): void {\n for (let { effects, func } of realm.react.optimizedNestedClosuresToWrite) {\n let additionalFunctionEffects = createAdditionalEffects(\n realm,\n effects,\n true,\n \"ReactNestedAdditionalFunctionEffects\",\n environmentRecordIdAfterGlobalCode\n );\n invariant(additionalFunctionEffects);\n if (func instanceof BoundFunctionValue) {\n invariant(func.$BoundTargetFunction instanceof ECMAScriptSourceFunctionValue);\n writeEffects.set(func.$BoundTargetFunction, additionalFunctionEffects);\n } else {\n writeEffects.set(func, additionalFunctionEffects);\n }\n }\n}\n"],"file":"optimizing.js"}
\No newline at end of file