in compiler/crates/relay-compiler/src/build_project/artifact_content.rs [592:692]
fn generate_read_only_fragment(
config: &Config,
project_config: &ProjectConfig,
printer: &mut Printer<'_>,
schema: &SDLSchema,
reader_fragment: &FragmentDefinition,
typegen_fragment: &FragmentDefinition,
source_hash: &str,
skip_types: bool,
) -> Result<Vec<u8>, FmtError> {
let mut content = get_content_start(config)?;
writeln!(content, " * {}", SIGNING_TOKEN)?;
if project_config.typegen_config.language == TypegenLanguage::Flow {
writeln!(content, " * @flow")?;
}
writeln!(
content,
" * @lightSyntaxTransform
* @nogrep"
)?;
if let Some(codegen_command) = &config.codegen_command {
writeln!(content, " * @codegen-command: {}", codegen_command)?;
}
writeln!(content, " */\n")?;
write_disable_lint_header(&project_config.typegen_config.language, &mut content)?;
if project_config.typegen_config.language == TypegenLanguage::Flow {
writeln!(content, "'use strict';\n")?;
}
let data_driven_dependency_metadata = reader_fragment
.directives
.named(*DATA_DRIVEN_DEPENDENCY_METADATA_KEY);
if let Some(data_driven_dependency_metadata) = data_driven_dependency_metadata {
write_data_driven_dependency_annotation(&mut content, data_driven_dependency_metadata)?;
writeln!(content)?;
}
if let Some(flight_metadata) =
ReactFlightLocalComponentsMetadata::find(&reader_fragment.directives)
{
write_react_flight_server_annotation(&mut content, flight_metadata)?;
}
let relay_client_component_metadata =
RelayClientComponentMetadata::find(&reader_fragment.directives);
if let Some(relay_client_component_metadata) = relay_client_component_metadata {
write_react_flight_client_annotation(&mut content, relay_client_component_metadata)?;
}
let generated_types = ArtifactGeneratedTypes::from_fragment(typegen_fragment, skip_types);
if project_config.typegen_config.language == TypegenLanguage::Flow {
writeln!(content, "/*::")?;
}
write_import_type_from(
&project_config.typegen_config.language,
&mut content,
generated_types.imported_types,
"relay-runtime",
)?;
if !skip_types {
write!(
content,
"{}",
generate_fragment_type_exports_section(typegen_fragment, schema, project_config)
)?;
}
match project_config.typegen_config.language {
TypegenLanguage::Flow => writeln!(content, "*/\n")?,
TypegenLanguage::TypeScript | TypegenLanguage::JavaScript => writeln!(content)?,
}
let mut top_level_statements = Default::default();
let fragment = printer.print_fragment(schema, reader_fragment, &mut top_level_statements);
write!(content, "{}", &top_level_statements)?;
write_variable_value_with_type(
&project_config.typegen_config.language,
&mut content,
"node",
generated_types.ast_type,
&fragment,
)?;
write_source_hash(
config,
&project_config.typegen_config.language,
&mut content,
source_hash,
)?;
write_export_generated_node(
&project_config.typegen_config,
&mut content,
"node",
generated_types.exported_type,
)?;
Ok(sign_file(&content).into_bytes())
}