MCPcopy
hub / github.com/webpack/webpack / applyObjectDefine

Method applyObjectDefine

lib/DefinePlugin.js:712–847  ·  lib/DefinePlugin.js::DefinePlugin.applyObjectDefine
(key, obj)

Source from the content-addressed store, hash-verified

710 * @returns {void}
711 */
712 const applyObjectDefine = (key, obj) => {
713 parser.hooks.canRename.for(key).tap(PLUGIN_NAME, () => {
714 addValueDependency(key);
715 return true;
716 });
717 parser.hooks.evaluateIdentifier
718 .for(key)
719 .tap(PLUGIN_NAME, (expr) => {
720 addValueDependency(key);
721 return new BasicEvaluatedExpression()
722 .setTruthy()
723 .setSideEffects(false)
724 .setRange(/** @type {Range} */ (expr.range));
725 });
726 parser.hooks.evaluateTypeof
727 .for(key)
728 .tap(
729 PLUGIN_NAME,
730 withValueDependency(key, evaluateToString(class="st">"object"))
731 );
732 parser.hooks.collectDestructuringAssignmentProperties.tap(
733 PLUGIN_NAME,
734 (expr) => {
735 const nameInfo = parser.getNameForExpression(expr);
736 if (nameInfo && nameInfo.name === key) return true;
737 }
738 );
739 parser.hooks.expression.for(key).tap(PLUGIN_NAME, (expr) => {
740 addValueDependency(key);
741 let strCode = stringifyObj(
742 obj,
743 parser,
744 compilation.valueCacheVersions,
745 key,
746 runtimeTemplate,
747 logger,
748 !parser.isAsiPosition(/** @type {Range} */ (expr.range)[0]),
749 getObjKeys(parser.destructuringAssignmentPropertiesFor(expr))
750 );
751
752 if (parser.scope.inShorthand) {
753 strCode = `${parser.scope.inShorthand}:${strCode}`;
754 }
755
756 if (WEBPACK_REQUIRE_FUNCTION_REGEXP.test(strCode)) {
757 return toConstantDependency(parser, strCode, [
758 RuntimeGlobals.require
759 ])(expr);
760 } else if (WEBPACK_REQUIRE_IDENTIFIER_REGEXP.test(strCode)) {
761 return toConstantDependency(parser, strCode, [
762 RuntimeGlobals.requireScope
763 ])(expr);
764 }
765 return toConstantDependency(parser, strCode)(expr);
766 });
767 class="cm">// A property access not defined on the object resolves to `undefined`
768 class="cm">// and the whole object is never inlined (issue #15559). Keyed by the
769 class="cm">// chain root so dotted object keys (e.g. `a.b`) are also covered.

Callers

nothing calls this directly

Calls 13

stringifyObjFunction · 0.85
getObjKeysFunction · 0.85
tapMethod · 0.80
setRangeMethod · 0.80
setSideEffectsMethod · 0.80
setTruthyMethod · 0.80
getNameForExpressionMethod · 0.80
isAsiPositionMethod · 0.80
splitMethod · 0.80
sliceMethod · 0.80
walkExpressionsMethod · 0.80

Tested by

no test coverage detected