Revision bbc9fae4
Added by koszko over 1 year ago
| html/repo_query.js | ||
|---|---|---|
| 49 | 49 |
#FROM html/install.js IMPORT InstallView |
| 50 | 50 |
#FROM common/jsonschema.js IMPORT haketilo_validator, haketilo_schemas |
| 51 | 51 |
|
| 52 |
#FROM html/repo_query_cacher_client.js IMPORT indirect_fetch |
|
| 53 |
|
|
| 52 | 54 |
const coll = new Intl.Collator(); |
| 53 | 55 |
|
| 54 | 56 |
function ResultEntry(repo_entry, mapping_ref) {
|
| ... | ... | |
| 76 | 78 |
|
| 77 | 79 |
this.repo_url_label.innerText = repo_url; |
| 78 | 80 |
|
| 79 |
const query_results = async () => {
|
|
| 80 |
const msg = [ |
|
| 81 |
"repo_query", |
|
| 82 |
`${repo_url}query?url=${encodeURIComponent(query_view.url)}`
|
|
| 83 |
]; |
|
| 84 |
const response = await browser.tabs.sendMessage(query_view.tab_id, msg); |
|
| 81 |
const encoded_queried_url = encodeURIComponent(query_view.url); |
|
| 82 |
const query_url = `${repo_url}query?url=${encoded_queried_url}`;
|
|
| 85 | 83 |
|
| 86 |
if ("error" in response)
|
|
| 84 |
const query_results = async () => {
|
|
| 85 |
try {
|
|
| 86 |
var response = await indirect_fetch(query_view.tab_id, query_url); |
|
| 87 |
} catch(e) {
|
|
| 88 |
console.error("Haketilo:", e);
|
|
| 87 | 89 |
throw "Failure to communicate with repository :(";
|
| 90 |
} |
|
| 88 | 91 |
|
| 89 | 92 |
if (!response.ok) |
| 90 | 93 |
throw `Repository sent HTTP code ${response.status} :(`;
|
| 91 |
if ("error_json" in response)
|
|
| 94 |
|
|
| 95 |
try {
|
|
| 96 |
var json = await response.json(); |
|
| 97 |
} catch(e) {
|
|
| 98 |
console.error("Haketilo:", e);
|
|
| 92 | 99 |
throw "Repository's response is not valid JSON :(";
|
| 100 |
} |
|
| 93 | 101 |
|
| 94 | 102 |
const $id = |
| 95 | 103 |
`https://hydrilla.koszko.org/schemas/api_query_result-1.0.1.schema.json`; |
| 96 | 104 |
const schema = haketilo_schemas[$id]; |
| 97 |
const result = haketilo_validator.validate(response.json, schema);
|
|
| 105 |
const result = haketilo_validator.validate(json, schema); |
|
| 98 | 106 |
if (result.errors.length > 0) {
|
| 99 | 107 |
console.error("Haketilo:", result.errors);
|
| 100 | 108 |
|
| 101 | 109 |
const reg = new RegExp(schema.properties.$schema.pattern); |
| 102 |
if (response.json.$schema && !reg.test(response.json.$schema))
|
|
| 110 |
if (json.$schema && !reg.test(json.$schema))
|
|
| 103 | 111 |
throw "Results were served using unsupported Hydrilla API version. You might need to update Haketilo."; |
| 104 | 112 |
|
| 105 | 113 |
throw "Results were served using a nonconforming response format."; |
| 106 | 114 |
} |
| 107 | 115 |
|
| 108 |
return response.json.mappings;
|
|
| 116 |
return json.mappings; |
|
| 109 | 117 |
} |
| 110 | 118 |
|
| 111 | 119 |
const populate_results = async () => {
|
Also available in: Unified diff
serialize and deserialize entire Response object when relaying fetch() calls to other contexts using sendMessage