🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@react-native/codegen

Package Overview
Dependencies
Maintainers
2
Versions
1099
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@react-native/codegen - npm Package Compare versions

Comparing version
0.84.0-nightly-20251211-80e384a80
to
0.84.0-nightly-20251212-dd390dbbe
+84
-5
lib/generators/components/GeneratePropsCpp.js

@@ -62,2 +62,3 @@ /**

includeGetDebugPropsImplementation = false,
generateOptionalProperties = false,
) {

@@ -72,12 +73,44 @@ const diffProps = component.props

case 'MixedTypeAnnotation':
return `
if (
prop.optional &&
prop.typeAnnotation.default == null &&
generateOptionalProperties
) {
return `
if (${prop.name} != oldProps->${prop.name}) {
if (${prop.name}.has_value()) {
result["${prop.name}"] = ${prop.name}.value();
} else {
result["${prop.name}"] = folly::dynamic(nullptr);
}
}`;
} else {
return `
if (${prop.name} != oldProps->${prop.name}) {
result["${prop.name}"] = ${prop.name};
}`;
}
case 'DoubleTypeAnnotation':
case 'FloatTypeAnnotation':
return `
if (
prop.optional &&
prop.typeAnnotation.default == null &&
generateOptionalProperties
) {
return `
if ((${prop.name} != oldProps->${prop.name})) {
if (${prop.name}.has_value()) {
if (!oldProps->${prop.name}.has_value() || !(std::isnan(${prop.name}.value()) && std::isnan(oldProps->${prop.name}.value()))) {
result["${prop.name}"] = ${prop.name}.value();
}
} else {
result["${prop.name}"] = folly::dynamic(nullptr);
}
}`;
} else {
return `
if ((${prop.name} != oldProps->${prop.name}) && !(std::isnan(${prop.name}) && std::isnan(oldProps->${prop.name}))) {
result["${prop.name}"] = ${prop.name};
}`;
}
case 'ArrayTypeAnnotation':

@@ -87,13 +120,43 @@ case 'ObjectTypeAnnotation':

case 'Int32EnumTypeAnnotation':
return `
if (
prop.optional &&
prop.typeAnnotation.default == null &&
generateOptionalProperties
) {
return `
if (${prop.name} != oldProps->${prop.name}) {
if (${prop.name}.has_value()) {
result["${prop.name}"] = toDynamic(${prop.name}.value());
} else {
result["${prop.name}"] = folly::dynamic(nullptr);
}
}`;
} else {
return `
if (${prop.name} != oldProps->${prop.name}) {
result["${prop.name}"] = toDynamic(${prop.name});
}`;
}
case 'ReservedPropTypeAnnotation':
switch (typeAnnotation.name) {
case 'ColorPrimitive':
return `
if (
prop.optional &&
prop.typeAnnotation.default == null &&
generateOptionalProperties
) {
return `
if (${prop.name} != oldProps->${prop.name}) {
if (${prop.name}.has_value()) {
result["${prop.name}"] = *${prop.name}.value();
} else {
result["${prop.name}"] = folly::dynamic(nullptr);
}
}`;
} else {
return `
if (${prop.name} != oldProps->${prop.name}) {
result["${prop.name}"] = *${prop.name};
}`;
}
case 'ImageSourcePrimitive':

@@ -103,6 +166,21 @@ case 'PointPrimitive':

case 'DimensionPrimitive':
return `
if (
prop.optional &&
prop.typeAnnotation.default == null &&
generateOptionalProperties
) {
return `
if (${prop.name} != oldProps->${prop.name}) {
if (${prop.name}.has_value()) {
result["${prop.name}"] = toDynamic(${prop.name}.value());
} else {
result["${prop.name}"] = folly::dynamic(nullptr);
}
}`;
} else {
return `
if (${prop.name} != oldProps->${prop.name}) {
result["${prop.name}"] = toDynamic(${prop.name});
}`;
}
case 'ImageRequestPrimitive':

@@ -246,2 +324,3 @@ // Shouldn't be used in props

includeGetDebugPropsImplementation,
component.generateOptionalProperties,
);

@@ -248,0 +327,0 @@ const imports = getImports(component.props);

@@ -405,3 +405,8 @@ /**

}
function generatePropsString(componentName, props, nameParts) {
function generatePropsString(
componentName,
props,
nameParts,
generateOptionalProperties = false,
) {
return props

@@ -418,2 +423,9 @@ .map(prop => {

);
if (
prop.optional &&
prop.typeAnnotation.default == null &&
generateOptionalProperties
) {
return `std::optional<${nativeType}> ${prop.name}${defaultInitializer};`;
}
return `${nativeType} ${prop.name}${defaultInitializer};`;

@@ -448,3 +460,8 @@ })

function generateStructsForComponent(componentName, component) {
const structs = generateStructs(componentName, component.props, []);
const structs = generateStructs(
componentName,
component.props,
[],
component.generateOptionalObjectProperties,
);
const structArray = Array.from(structs.values());

@@ -456,3 +473,8 @@ if (structArray.length < 1) {

}
function generateStructs(componentName, properties, nameParts) {
function generateStructs(
componentName,
properties,
nameParts,
generateOptionalObjectProperties = false,
) {
const structs = new Map();

@@ -469,2 +491,3 @@ properties.forEach(prop => {

nameParts.concat([prop.name]),
generateOptionalObjectProperties,
);

@@ -479,2 +502,3 @@ nestedStructs.forEach(function (value, key) {

typeAnnotation.properties,
generateOptionalObjectProperties,
);

@@ -493,2 +517,3 @@ }

nameParts.concat([prop.name]),
generateOptionalObjectProperties,
);

@@ -505,2 +530,3 @@ nestedStructs.forEach(function (value, key) {

elementProperties,
generateOptionalObjectProperties,
);

@@ -534,2 +560,3 @@

nameParts.concat([prop.name]),
generateOptionalObjectProperties,
);

@@ -546,2 +573,3 @@ nestedStructs.forEach(function (value, key) {

elementProperties,
generateOptionalObjectProperties,
);

@@ -564,3 +592,9 @@

}
function generateStruct(structs, componentName, nameParts, properties) {
function generateStruct(
structs,
componentName,
nameParts,
properties,
generateOptionalObjectProperties = false,
) {
const structNameParts = nameParts;

@@ -572,2 +606,3 @@ const structName = generateStructName(componentName, structNameParts);

structNameParts,
generateOptionalObjectProperties,
);

@@ -602,3 +637,9 @@ properties.forEach(property => {

}
generateStruct(structs, componentName, nameParts.concat([name]), props);
generateStruct(
structs,
componentName,
nameParts.concat([name]),
props,
generateOptionalObjectProperties,
);
return;

@@ -633,5 +674,25 @@ case 'MixedTypeAnnotation':

case 'MixedTypeAnnotation':
return `result["${name}"] = ${name};`;
if (
property.optional &&
property.typeAnnotation.default == null &&
generateOptionalObjectProperties
) {
return `if (${name}.has_value()) {
result["${name}"] = ${name}.value();
}`;
} else {
return `result["${name}"] = ${name};`;
}
default:
return `result["${name}"] = ::facebook::react::toDynamic(${name});`;
if (
property.optional &&
property.typeAnnotation.default == null &&
generateOptionalObjectProperties
) {
return `if (${name}.has_value()) {
result["${name}"] = ::facebook::react::toDynamic(${name}.value());
}`;
} else {
return `result["${name}"] = ::facebook::react::toDynamic(${name});`;
}
}

@@ -685,2 +746,3 @@ })

[],
component.generateOptionalProperties,
);

@@ -687,0 +749,0 @@ const extendString = getClassExtendString(component);

+1
-1
{
"name": "@react-native/codegen",
"version": "0.84.0-nightly-20251211-80e384a80",
"version": "0.84.0-nightly-20251212-dd390dbbe",
"description": "Code generation tools for React Native",

@@ -5,0 +5,0 @@ "license": "MIT",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet