Found the way, For anyone looking for a method in the future I’ll mention how I made it work.
add_action( 'parse_request', function($query){
$post_type = $post_name = NULL;
if (isset($query->query_vars['post_type']) && in_array($query->query_vars['post_type'], ['colors', 'shapes'])) {
$post_type = $query->query_vars['post_type'];
$post_name = $query->query_vars['name'];
} elseif (isset($query->query_vars['pagename']) && isset($query->request) && isset(explode("https://wordpress.stackexchange.com/", $query->request)[0]) && in_array(explode("https://wordpress.stackexchange.com/", $query->request)[0], ['slug-with-no-post-type', 'another-slug-with-no-post-type'])) {
$division = explode("https://wordpress.stackexchange.com/", $query->request)[0];
if (isset(explode("https://wordpress.stackexchange.com/", $query->request)[1])) $post_type = explode("https://wordpress.stackexchange.com/", $query->request)[1];
unset($query->query_vars['pagename']);
}
if($post_type && $post_name){
if ($post = get_page_by_path($post_name, 'OBJECT', ['colors', 'shapes'])) {
if (isset($post->post_type) && $post->post_type != $post_type) {
$query->query_vars['post_type'] = $post->post_type;
$query->query_vars['post_type_template'] = $post_type;
$query->query_vars['name'] = $post_name;
}
}
}
});