|
66 | 66 | const allowed_objects = ref({}) |
67 | 67 | const toggle_loading = useToggle(loading) |
68 | 68 |
|
69 | | - async function get_allowed_objects() { |
70 | | - toggle_loading() |
71 | | - allowed_objects.value = {} |
72 | | - const promise_array = [] |
73 | | - for (const filename of filenames) { |
74 | | - const params = { filename, supported_feature } |
75 | | - const promise = api_fetch({ schema, params }) |
76 | | - promise_array.push(promise) |
77 | | - } |
78 | | - const api_responses = await Promise.all(promise_array) |
79 | | - const allowed_objects_list = [] |
80 | | - for (const api_response of api_responses) { |
81 | | - allowed_objects_list.push(api_response.data.value.allowed_objects) |
82 | | - } |
83 | | - const all_keys = [ |
84 | | - ...new Set( |
85 | | - allowed_objects_list.flatMap((allowed_object_map) => |
86 | | - Object.keys(allowed_object_map), |
87 | | - ), |
88 | | - ), |
89 | | - ] |
90 | | - const common_keys = all_keys.filter( |
91 | | - (candidate_key) => |
92 | | - !allowed_objects_list.some( |
93 | | - (allowed_object_map) => |
94 | | - !Object.prototype.hasOwnProperty.call(allowed_object_map, candidate_key), |
95 | | - ), |
96 | | - ) |
97 | | - const final_object = {} |
98 | | - for (const key of common_keys) { |
99 | | - const load_score_list = allowed_objects_list.map( |
100 | | - (allowed_object_map) => allowed_object_map[key].is_loadable, |
101 | | - ) |
102 | | - const priority_list = allowed_objects_list |
103 | | - .map((allowed_object_map) => allowed_object_map[key].object_priority) |
104 | | - .filter((priority_value) => priority_value !== undefined && priority_value !== null) |
105 | | - final_object[key] = { is_loadable: Math.min(...load_score_list) } |
106 | | - if (priority_list.length) { |
107 | | - final_object[key].object_priority = Math.max(...priority_list) |
108 | | - } |
109 | | - } |
110 | | - allowed_objects.value = final_object |
111 | | - let already_selected = false |
112 | | - const object_keys = Object.keys(final_object) |
113 | | - if (object_keys.length) { |
114 | | - const highest_load_score = Math.max( |
115 | | - ...object_keys.map((k) => final_object[k].is_loadable), |
116 | | - ) |
117 | | - if (highest_load_score > 0) { |
118 | | - const best_score_objects = object_keys.filter( |
119 | | - (k) => final_object[k].is_loadable === highest_load_score, |
120 | | - ) |
121 | | - if (best_score_objects.length === 1) { |
122 | | - set_geode_object(best_score_objects[0]) |
123 | | - already_selected = true |
124 | | - } else { |
125 | | - const highest_priority = Math.max( |
126 | | - ...best_score_objects.map( |
127 | | - (k) => final_object[k].object_priority ?? -Infinity, |
128 | | - ), |
129 | | - ) |
130 | | - const best_priority_objects = best_score_objects.filter( |
131 | | - (k) => final_object[k].object_priority === highest_priority, |
132 | | - ) |
133 | | - if (highest_priority !== -Infinity && best_priority_objects.length === 1) { |
134 | | - set_geode_object(best_priority_objects[0]) |
135 | | - already_selected = true |
136 | | - } |
137 | | - } |
138 | | - } |
139 | | - } |
140 | | - if (!already_selected && object_keys.length === 1) { |
141 | | - set_geode_object(object_keys[0]) |
| 69 | + |
| 70 | + function select_geode_object(object_map) { |
| 71 | + const object_keys = Object.keys(object_map) |
| 72 | + if (!object_keys.length) { |
| 73 | + return null |
| 74 | + } |
| 75 | + const highest_load_score = Math.max( |
| 76 | + ...object_keys.map((key) => object_map[key].is_loadable), |
| 77 | + ) |
| 78 | + if (highest_load_score <= 0) { |
| 79 | + return null |
| 80 | + } |
| 81 | + const best_score_objects = object_keys.filter( |
| 82 | + (key) => object_map[key].is_loadable === highest_load_score, |
| 83 | + ) |
| 84 | + if (best_score_objects.length === 1) { |
| 85 | + return best_score_objects[0] |
| 86 | + } |
| 87 | + const highest_priority = Math.max( |
| 88 | + ...best_score_objects.map( |
| 89 | + (key) => object_map[key].object_priority ?? -Infinity, |
| 90 | + ), |
| 91 | + ) |
| 92 | + const best_priority_objects = best_score_objects.filter( |
| 93 | + (key) => object_map[key].object_priority === highest_priority, |
| 94 | + ) |
| 95 | + if (highest_priority !== -Infinity && best_priority_objects.length === 1) { |
| 96 | + return best_priority_objects[0] |
| 97 | + } |
| 98 | + return null |
| 99 | +} |
| 100 | +
|
| 101 | +
|
| 102 | +async function get_allowed_objects() { |
| 103 | + toggle_loading() |
| 104 | + allowed_objects.value = {} |
| 105 | + const promise_array = filenames.map((filename) => { |
| 106 | + const params = { filename, supported_feature } |
| 107 | + return api_fetch({ schema, params }) |
| 108 | + }) |
| 109 | + const responses = await Promise.all(promise_array) |
| 110 | + const allowed_objects_list = responses.map( |
| 111 | + (response) => response.data.value.allowed_objects, |
| 112 | + ) |
| 113 | + const all_keys = [...new Set(allowed_objects_list.flatMap(Object.keys))] |
| 114 | + const common_keys = all_keys.filter((key) => |
| 115 | + allowed_objects_list.every((obj) => key in obj), |
| 116 | + ) |
| 117 | + const final_object = {} |
| 118 | + for (const key of common_keys) { |
| 119 | + const load_scores = allowed_objects_list.map((obj) => obj[key].is_loadable) |
| 120 | + const priorities = allowed_objects_list |
| 121 | + .map((obj) => obj[key].object_priority) |
| 122 | + .filter((p) => p !== undefined && p !== null) |
| 123 | + final_object[key] = { is_loadable: Math.min(...load_scores) } |
| 124 | + if (priorities.length) { |
| 125 | + final_object[key].object_priority = Math.max(...priorities) |
142 | 126 | } |
143 | | - toggle_loading() |
144 | 127 | } |
| 128 | + allowed_objects.value = final_object |
| 129 | + let already_selected = false |
| 130 | + const selected_object = select_geode_object(final_object) |
| 131 | + if (selected_object) { |
| 132 | + set_geode_object(selected_object) |
| 133 | + already_selected = true |
| 134 | + } |
| 135 | + if (!already_selected && Object.keys(final_object).length === 1) { |
| 136 | + set_geode_object(Object.keys(final_object)[0]) |
| 137 | + } |
| 138 | + toggle_loading() |
| 139 | +} |
145 | 140 |
|
146 | 141 |
|
147 | 142 | function set_geode_object(input_geode_object) { |
|
0 commit comments