def METHOD_NAME(
    node: Node, handle: NodeHandle, resolved_run_config: ResolvedRunConfig, asset_layer: AssetLayer
) -> Sequence[StepOutput]:
    check.inst_param(node, "node", Node)
    check.inst_param(handle, "handle", NodeHandle)
    # the run config has the node output name configured
    config_output_names: Set[str] = set()
    current_handle = handle
    while current_handle:
        op_config = resolved_run_config.ops[current_handle.to_string()]
        current_handle = current_handle.parent
        config_output_names = config_output_names.union(op_config.outputs.output_names)
    step_outputs: List[StepOutput] = []
    for name, output_def in node.definition.output_dict.items():
        asset_info = asset_layer.asset_info_for_output(handle, name)
        step_outputs.append(
            StepOutput(
                node_handle=handle,
                name=output_def.name,
                dagster_type_key=output_def.dagster_type.key,
                properties=StepOutputProperties(
                    is_required=output_def.is_required,
                    is_dynamic=output_def.is_dynamic,
                    is_asset=asset_info is not None,
                    should_materialize=output_def.name in config_output_names,
                    asset_key=asset_info.key if asset_info and asset_info.is_required else None,
                    is_asset_partitioned=bool(asset_info.partitions_def) if asset_info else False,
                    asset_check_handle=asset_layer.asset_check_handle_for_output(handle, name),
                ),
            )
        )
    return step_outputs