@digitalculture/ochre-sdk 0.7.13 → 0.7.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +50 -50
- package/dist/index.d.cts +1 -986
- package/dist/index.d.ts +1 -986
- package/dist/index.js +62 -62
- package/package.json +6 -6
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const c=s(require(`zod`)),l=
|
|
1
|
+
"use strict";var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const c=s(require(`zod`)),l=c.z.string().uuid({message:`Invalid UUID provided`}),u=c.z.object({type:c.z.enum([`traditional`,`digital-collection`,`plum`,`cedar`,`elm`,`maple`,`oak`,`palm`],{message:`Invalid website type`}),status:c.z.enum([`development`,`preview`,`production`],{message:`Invalid website status`}),privacy:c.z.enum([`public`,`password`,`private`],{message:`Invalid website privacy`})}),d=c.z.enum([`annotated-document`,`annotated-image`,`bibliography`,`button`,`collection`,`empty-space`,`entries`,`filter-categories`,`iframe`,`iiif-viewer`,`image`,`image-gallery`,`n-columns`,`n-rows`,`network-graph`,`search-bar`,`table`,`text`,`timeline`,`video`],{message:`Invalid component`}),f=c.z.enum([`resource`,`spatialUnit`,`concept`,`period`,`bibliography`,`person`,`propertyValue`,`set`,`tree`]),p=c.z.enum([`string`,`integer`,`decimal`,`boolean`,`date`,`dateTime`,`time`,`coordinate`,`IDREF`]),m=c.z.object({uuid:c.z.string().uuid({message:`Invalid UUID`}),filter:c.z.string().optional(),page:c.z.number().positive({message:`Page must be positive`}),perPage:c.z.number().positive({message:`Per page must be positive`})}).strict(),h=c.z.string().transform(e=>e.split(` `)).pipe(c.z.array(c.z.enum([`bold`,`italic`,`underline`]))),g=c.z.string().transform(e=>e.split(` `)).pipe(c.z.array(c.z.enum([`newline`,`trailing`,`leading`]))),_=c.z.string().email({message:`Invalid email`}),v={includeNestedProperties:!1};
|
|
2
2
|
/**
|
|
3
3
|
* Finds a property by its label in an array of properties
|
|
4
4
|
*
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* }
|
|
16
16
|
* ```
|
|
17
17
|
*/
|
|
18
|
-
function
|
|
18
|
+
function y(e,t,n=v){let{includeNestedProperties:r}=n,i=e.find(e=>e.label===t);if(i)return i;if(r){for(let n of e)if(n.properties.length>0){let e=y(n.properties,t,{includeNestedProperties:r});if(e)return e}}return null}
|
|
19
19
|
/**
|
|
20
20
|
* Retrieves all values for a property with the given label
|
|
21
21
|
*
|
|
@@ -34,7 +34,7 @@ function b(e,t,n=y){let{includeNestedProperties:r}=n,i=e.find(e=>e.label===t);if
|
|
|
34
34
|
* }
|
|
35
35
|
* ```
|
|
36
36
|
*/
|
|
37
|
-
function
|
|
37
|
+
function b(e,t,n=v){let{includeNestedProperties:r}=n,i=e.find(e=>e.label===t);if(i)return i.values.map(e=>e.content);if(r){for(let n of e)if(n.properties.length>0){let e=b(n.properties,t,{includeNestedProperties:r});if(e)return e}}return null}
|
|
38
38
|
/**
|
|
39
39
|
* Gets the first value of a property with the given label
|
|
40
40
|
*
|
|
@@ -51,7 +51,7 @@ function x(e,t,n=y){let{includeNestedProperties:r}=n,i=e.find(e=>e.label===t);if
|
|
|
51
51
|
* }
|
|
52
52
|
* ```
|
|
53
53
|
*/
|
|
54
|
-
function
|
|
54
|
+
function x(e,t,n=v){let{includeNestedProperties:r}=n,i=b(e,t,{includeNestedProperties:r});if(i!==null&&i.length>0)return i[0];if(r){for(let n of e)if(n.properties.length>0){let e=x(n.properties,t,{includeNestedProperties:r});if(e!==null)return e}}return null}
|
|
55
55
|
/**
|
|
56
56
|
* Gets all unique properties from an array of properties
|
|
57
57
|
*
|
|
@@ -65,7 +65,7 @@ function S(e,t,n=y){let{includeNestedProperties:r}=n,i=x(e,t,{includeNestedPrope
|
|
|
65
65
|
* console.log(`Available properties: ${properties.map((p) => p.label).join(", ")}`);
|
|
66
66
|
* ```
|
|
67
67
|
*/
|
|
68
|
-
function
|
|
68
|
+
function S(e,t=v){let{includeNestedProperties:n}=t,r=[];for(let t of e){if(r.some(e=>e.uuid===t.uuid))continue;if(r.push(t),t.properties.length>0&&n){let e=S(t.properties,{includeNestedProperties:!0});for(let t of e){if(r.some(e=>e.uuid===t.uuid))continue;r.push(t)}}}return r}
|
|
69
69
|
/**
|
|
70
70
|
* Filters a property based on a label and value criteria
|
|
71
71
|
*
|
|
@@ -87,7 +87,7 @@ function C(e,t=y){let{includeNestedProperties:n}=t,r=[];for(let t of e){if(r.som
|
|
|
87
87
|
* }
|
|
88
88
|
* ```
|
|
89
89
|
*/
|
|
90
|
-
function
|
|
90
|
+
function C(e,t,n=v){let{includeNestedProperties:r}=n,i=t.label.toLocaleLowerCase(`en-US`)===`all fields`;if(i||e.label.toLocaleLowerCase(`en-US`)===t.label.toLocaleLowerCase(`en-US`)){let n=e.values.some(e=>e.content===null?!1:typeof e.content==`string`?typeof t.value==`string`?e.content.toLocaleLowerCase(`en-US`).includes(t.value.toLocaleLowerCase(`en-US`)):!1:typeof e.content==`number`?typeof t.value==`number`?e.content===t.value:!1:typeof e.content==`boolean`?typeof t.value==`boolean`?e.booleanValue===t.value:!1:e.content instanceof Date&&t.value instanceof Date?e.content.getTime()===t.value.getTime():!1);return!n&&r&&(n=e.properties.some(e=>C(e,t,{includeNestedProperties:!0}))),n}return!1}
|
|
91
91
|
/**
|
|
92
92
|
* Finds a string item in an array by language code
|
|
93
93
|
*
|
|
@@ -96,7 +96,7 @@ function w(e,t,n=y){let{includeNestedProperties:r}=n,i=t.label.toLocaleLowerCase
|
|
|
96
96
|
* @returns Matching string item or null if not found
|
|
97
97
|
* @internal
|
|
98
98
|
*/
|
|
99
|
-
function
|
|
99
|
+
function w(e,t){let n=e.find(e=>e.lang===t);return n??null}
|
|
100
100
|
/**
|
|
101
101
|
* Parses email addresses in a string into HTML links
|
|
102
102
|
*
|
|
@@ -109,7 +109,7 @@ function ee(e,t){let n=e.find(e=>e.lang===t);return n??null}
|
|
|
109
109
|
* // Returns: "Contact us at <ExternalLink href="mailto:info@example.com">info@example.com</ExternalLink>"
|
|
110
110
|
* ```
|
|
111
111
|
*/
|
|
112
|
-
function T(e){let t=e.split(` `),n=[];for(let e of t){let t=e.replaceAll(/(?<=\s|^)[([{]+|[)\]}]+(?=\s|$)/g,``).replace(/[!),.:;?\]]$/,``),r=e.indexOf(t),i=e.slice(0,r),a=e.slice(r+t.length),o=
|
|
112
|
+
function T(e){let t=e.split(` `),n=[];for(let e of t){let t=e.replaceAll(/(?<=\s|^)[([{]+|[)\]}]+(?=\s|$)/g,``).replace(/[!),.:;?\]]$/,``),r=e.indexOf(t),i=e.slice(0,r),a=e.slice(r+t.length),o=_.safeParse(t).success;if(o){n.push(i,`${i}<ExternalLink href="mailto:${t}">${t}</ExternalLink>${a}`);continue}n.push(e)}return n.join(` `)}
|
|
113
113
|
/**
|
|
114
114
|
* Applies text rendering options (bold, italic, underline) to a string
|
|
115
115
|
*
|
|
@@ -118,7 +118,7 @@ function T(e){let t=e.split(` `),n=[];for(let e of t){let t=e.replaceAll(/(?<=\s
|
|
|
118
118
|
* @returns String with markdown formatting applied
|
|
119
119
|
* @internal
|
|
120
120
|
*/
|
|
121
|
-
function E(e,t){let n=e,r=
|
|
121
|
+
function E(e,t){let n=e,r=h.safeParse(t);if(!r.success)return console.warn(`Invalid render options string provided: “${t}”`),e;for(let e of r.data)switch(e){case`bold`:n=`**${n}**`;break;case`italic`:n=`*${n}*`;break;case`underline`:n=`_${n}_`;break}return n.replaceAll(`'`,`'`)}
|
|
122
122
|
/**
|
|
123
123
|
* Applies whitespace options to a string (newline, trailing, leading)
|
|
124
124
|
*
|
|
@@ -127,7 +127,7 @@ function E(e,t){let n=e,r=g.safeParse(t);if(!r.success)return console.warn(`Inva
|
|
|
127
127
|
* @returns String with whitespace modifications applied
|
|
128
128
|
* @internal
|
|
129
129
|
*/
|
|
130
|
-
function D(e,t){let n=e,r=
|
|
130
|
+
function D(e,t){let n=e,r=g.safeParse(t);if(!r.success)return console.warn(`Invalid whitespace string provided: “${t}”`),e;for(let e of r.data)switch(e){case`newline`:n=`<br />\n${n}`;break;case`trailing`:n=`${n} `;break;case`leading`:n=` ${n}`;break}return n.replaceAll(`'`,`'`)}
|
|
131
131
|
/**
|
|
132
132
|
* Converts a FakeString (string|number|boolean) to a proper string
|
|
133
133
|
*
|
|
@@ -141,14 +141,14 @@ function D(e,t){let n=e,r=_.safeParse(t);if(!r.success)return console.warn(`Inva
|
|
|
141
141
|
* parseFakeString("test"); // Returns "test"
|
|
142
142
|
* ```
|
|
143
143
|
*/
|
|
144
|
-
function O(e){
|
|
144
|
+
function O(e){return String(e).replaceAll(`'`,`'`)}
|
|
145
145
|
/**
|
|
146
146
|
* Parses an OchreStringItem into a formatted string
|
|
147
147
|
*
|
|
148
148
|
* @param item - OchreStringItem to parse
|
|
149
149
|
* @returns Formatted string with applied rendering and whitespace
|
|
150
150
|
*/
|
|
151
|
-
function k(e){let t=``;switch(typeof e.string){case`string`:
|
|
151
|
+
function k(e){let t=``;switch(typeof e.string){case`string`:case`number`:case`boolean`:t=O(e.string);break;case`object`:{let n=Array.isArray(e.string)?e.string:[e.string];for(let e of n)if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)t+=O(e);else{let n=e.rend==null?O(e.content):E(O(e.content),e.rend),r=e.whitespace==null?n:D(n,e.whitespace);t+=r}break}default:t=``;break}return t}
|
|
152
152
|
/**
|
|
153
153
|
* Parses rich text content into a formatted string with links and annotations
|
|
154
154
|
*
|
|
@@ -157,7 +157,7 @@ function k(e){let t=``;switch(typeof e.string){case`string`:t=e.string;break;cas
|
|
|
157
157
|
* @returns Formatted string with HTML/markdown elements
|
|
158
158
|
*/
|
|
159
159
|
function A(e,t){if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return T(O(e));if(`whitespace`in e&&!(`content`in e)&&!(`string`in e))return e.whitespace===`newline`?`
|
|
160
|
-
`:``;if(`links`in e){let n=``;n=typeof e.string==`object`?j(e.string):O(e.string).replaceAll(`<`,String.raw`\<`).replaceAll(`{`,String.raw`\{`);let r=Array.isArray(e.links)?e.links:[e.links];for(let e of r)if(`resource`in e){let r=Array.isArray(e.resource)?e.resource[0]:e.resource,i=null;switch(r.content!=null&&(i=O(r.content).replaceAll(`<`,String.raw`\<`).replaceAll(`{`,String.raw`\{`)),r.type){case`image`:return r.rend===`inline`?`<InlineImage uuid="${r.uuid}" ${i===null?``:`content="${i}"`} height={${r.height?.toString()??`null`}} width={${r.width?.toString()??`null`}} />`:r.publicationDateTime==null?`<TooltipSpan type="image" ${i===null?``:`content="${i}"`}>${n}</TooltipSpan>`:`<ExternalLink href="https:\\/\\/ochre.lib.uchicago.edu/ochre?uuid=${r.uuid}" type="image"${i===null?``:` content="${i}"`}>${n}</ExternalLink>`;case`internalDocument`:{let e=i?.toLocaleLowerCase(`en-US`).includes(`footnote`);return e?(t&&t.push({uuid:r.uuid,label:n,content:``}),` <Footnote uuid="${r.uuid}"${n?` label="${n}"`:``}${i===null?``:` content="${i}"`} />`):`<ExternalLink href="https:\\/\\/ochre.lib.uchicago.edu/ochre?uuid=${r.uuid}" type="internalDocument" ${i===null?``:`content="${i}"`}>${n}</ExternalLink>`}case`externalDocument`:return r.publicationDateTime==null?`<TooltipSpan type="externalDocument" ${i===null?``:`content="${i}"`}>${n}</TooltipSpan>`:`<ExternalLink href="https:\\/\\/ochre.lib.uchicago.edu/ochre?uuid=${r.uuid}" type="externalDocument" ${i===null?``:`content="${i}"`}>${n}</ExternalLink>`;case`webpage`:return`<ExternalLink href="${r.href}" type="webpage" ${i===null?``:`content="${i}"`}>${n}</ExternalLink>`;default:return``}}else if(`concept`in e){let t=Array.isArray(e.concept)?e.concept[0]:e.concept;return t.publicationDateTime==null?`<TooltipSpan type="concept">${n}</TooltipSpan>`:`<ExternalLink href="https:\\/\\/ochre.lib.uchicago.edu/ochre?uuid=${t.uuid}" type="concept">${n}</ExternalLink>`}else if(`set`in e){let t=Array.isArray(e.set)?e.set[0]:e.set;return t.publicationDateTime==null?`<TooltipSpan type="set">${n}</TooltipSpan>`:`<ExternalLink href="https:\\/\\/ochre.lib.uchicago.edu/ochre?uuid=${t.uuid}" type="set">${n}</ExternalLink>`}else if(`person`in e){let t=Array.isArray(e.person)?e.person[0]:e.person,r=t.identification?[`string`,`number`,`boolean`].includes(typeof t.identification.label)?O(t.identification.label):j(t.identification.label):null;return t.publicationDateTime==null?`<TooltipSpan type="${t.type??`person`}" ${r===null?``:`content="${r}"`}>${n}</TooltipSpan>`:`<ExternalLink href="https:\\/\\/ochre.lib.uchicago.edu/ochre?uuid=${t.uuid}" type="${t.type??`person`}" ${r===null?``:`content="${r}"`}>${n}</ExternalLink>`}else if(`bibliography`in e){let t=Array.isArray(e.bibliography)?e.bibliography[0]:e.bibliography;return t.publicationDateTime==null?`<TooltipSpan type="bibliography">${n}</TooltipSpan>`:`<ExternalLink href="https:\\/\\/ochre.lib.uchicago.edu/ochre?uuid=${t.uuid}" type="${t.type??`bibliography`}">${n}</ExternalLink>`}}let n=``;if(`string`in e){let r=Array.isArray(e.string)?e.string:[e.string];for(let e of r)n+=A(e,t);return`whitespace`in e&&e.whitespace!=null&&(n=D(T(n),e.whitespace)),n.replaceAll(`'`,`'`)
|
|
160
|
+
`:``;if(`links`in e){let n=``;n=typeof e.string==`object`?j(e.string):O(e.string).replaceAll(`<`,String.raw`\<`).replaceAll(`{`,String.raw`\{`);let r=Array.isArray(e.links)?e.links:[e.links];for(let e of r)if(`resource`in e){let r=Array.isArray(e.resource)?e.resource[0]:e.resource,i=null;switch(r.content!=null&&(i=O(r.content).replaceAll(`<`,String.raw`\<`).replaceAll(`{`,String.raw`\{`)),r.type){case`image`:return r.rend===`inline`?`<InlineImage uuid="${r.uuid}" ${i===null?``:`content="${i}"`} height={${r.height?.toString()??`null`}} width={${r.width?.toString()??`null`}} />`:r.publicationDateTime==null?`<TooltipSpan type="image" ${i===null?``:`content="${i}"`}>${n}</TooltipSpan>`:`<ExternalLink href="https:\\/\\/ochre.lib.uchicago.edu/ochre?uuid=${r.uuid}" type="image"${i===null?``:` content="${i}"`}>${n}</ExternalLink>`;case`internalDocument`:{let e=i?.toLocaleLowerCase(`en-US`).includes(`footnote`);return e?(t&&t.push({uuid:r.uuid,label:n,content:``}),` <Footnote uuid="${r.uuid}"${n?` label="${n}"`:``}${i===null?``:` content="${i}"`} />`):`<ExternalLink href="https:\\/\\/ochre.lib.uchicago.edu/ochre?uuid=${r.uuid}" type="internalDocument" ${i===null?``:`content="${i}"`}>${n}</ExternalLink>`}case`externalDocument`:return r.publicationDateTime==null?`<TooltipSpan type="externalDocument" ${i===null?``:`content="${i}"`}>${n}</TooltipSpan>`:`<ExternalLink href="https:\\/\\/ochre.lib.uchicago.edu/ochre?uuid=${r.uuid}" type="externalDocument" ${i===null?``:`content="${i}"`}>${n}</ExternalLink>`;case`webpage`:return`<ExternalLink href="${r.href}" type="webpage" ${i===null?``:`content="${i}"`}>${n}</ExternalLink>`;default:return``}}else if(`concept`in e){let t=Array.isArray(e.concept)?e.concept[0]:e.concept;return t.publicationDateTime==null?`<TooltipSpan type="concept">${n}</TooltipSpan>`:`<ExternalLink href="https:\\/\\/ochre.lib.uchicago.edu/ochre?uuid=${t.uuid}" type="concept">${n}</ExternalLink>`}else if(`set`in e){let t=Array.isArray(e.set)?e.set[0]:e.set;return t.publicationDateTime==null?`<TooltipSpan type="set">${n}</TooltipSpan>`:`<ExternalLink href="https:\\/\\/ochre.lib.uchicago.edu/ochre?uuid=${t.uuid}" type="set">${n}</ExternalLink>`}else if(`person`in e){let t=Array.isArray(e.person)?e.person[0]:e.person,r=t.identification?[`string`,`number`,`boolean`].includes(typeof t.identification.label)?O(t.identification.label):j(t.identification.label):null;return t.publicationDateTime==null?`<TooltipSpan type="${t.type??`person`}" ${r===null?``:`content="${r}"`}>${n}</TooltipSpan>`:`<ExternalLink href="https:\\/\\/ochre.lib.uchicago.edu/ochre?uuid=${t.uuid}" type="${t.type??`person`}" ${r===null?``:`content="${r}"`}>${n}</ExternalLink>`}else if(`bibliography`in e){let t=Array.isArray(e.bibliography)?e.bibliography[0]:e.bibliography;return t.publicationDateTime==null?`<TooltipSpan type="bibliography">${n}</TooltipSpan>`:`<ExternalLink href="https:\\/\\/ochre.lib.uchicago.edu/ochre?uuid=${t.uuid}" type="${t.type??`bibliography`}">${n}</ExternalLink>`}}let n=``;if(`string`in e){let r=Array.isArray(e.string)?e.string:[e.string];for(let e of r)n+=A(e,t);return`whitespace`in e&&e.whitespace!=null&&(n=D(T(n),e.whitespace)),n.replaceAll(`'`,`'`)}else n=O(e.content),e.rend!=null&&(n=E(T(n),e.rend)),e.whitespace!=null&&(n=D(T(n),e.whitespace));return n}
|
|
161
161
|
/**
|
|
162
162
|
* Parses raw string content into a formatted string
|
|
163
163
|
*
|
|
@@ -165,14 +165,14 @@ function A(e,t){if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)r
|
|
|
165
165
|
* @param language - Optional language code for content selection (defaults to "eng")
|
|
166
166
|
* @returns Parsed and formatted string
|
|
167
167
|
*/
|
|
168
|
-
function j(e,t=`eng`){switch(typeof e.content){case`string`:case`number`:case`boolean`:return O(e.content);case`object`:if(Array.isArray(e.content)){let n=
|
|
168
|
+
function j(e,t=`eng`){switch(typeof e.content){case`string`:case`number`:case`boolean`:return O(e.content);case`object`:if(Array.isArray(e.content)){let n=w(e.content,t);if(n)return k(n);{let n=e.content[0];if(!n)throw Error(`No string item found for language “${t}” in the following content:\n${JSON.stringify(e.content)}.`);return k(n)}}else return k(e.content);default:return String(e.content)}}
|
|
169
169
|
/**
|
|
170
170
|
* Get the category of an item from the OCHRE API response
|
|
171
171
|
* @param keys - The keys of the OCHRE API response
|
|
172
172
|
* @returns The category of the item
|
|
173
173
|
* @internal
|
|
174
174
|
*/
|
|
175
|
-
function
|
|
175
|
+
function ee(e){let t=e.find(e=>f.safeParse(e).success);if(!t){let t=e.find(e=>![`uuid`,`uuidBelongsTo`,`belongsTo`,`publicationDateTime`,`metadata`,`languages`].includes(e));throw Error(`Invalid OCHRE data; found unexpected "${t}" key`)}let n=f.parse(t);return n}
|
|
176
176
|
/**
|
|
177
177
|
* Fetches raw OCHRE data by UUID from the OCHRE API
|
|
178
178
|
*
|
|
@@ -191,7 +191,7 @@ function te(e){let t=e.find(e=>p.safeParse(e).success);if(!t){let t=e.find(e=>![
|
|
|
191
191
|
*
|
|
192
192
|
* @internal
|
|
193
193
|
*/
|
|
194
|
-
async function
|
|
194
|
+
async function te(e){try{let t=l.parse(e),n=await fetch(`https://ochre.lib.uchicago.edu/ochre?uuid=${t}&format=json&lang="*"`);if(!n.ok)throw Error(`Failed to fetch OCHRE data`);let r=await n.json();if(!(`ochre`in r))throw Error(`Invalid OCHRE data: API response missing 'ochre' key`);return[null,r]}catch(e){return[e instanceof Error?e.message:`Unknown error`,null]}}
|
|
195
195
|
/**
|
|
196
196
|
* Fetches and parses an OCHRE item from the OCHRE API
|
|
197
197
|
*
|
|
@@ -225,7 +225,7 @@ async function ne(e){try{let t=u.parse(e),n=await fetch(`https://ochre.lib.uchic
|
|
|
225
225
|
*
|
|
226
226
|
* If the fetch/parse fails, the returned object will have an `error` property.
|
|
227
227
|
*/
|
|
228
|
-
async function
|
|
228
|
+
async function ne(e,t,n){try{let[r,i]=await te(e);if(r!==null)throw Error(r);let a=ee(Object.keys(i.ochre)),o;switch(a){case`resource`:if(!(`resource`in i.ochre))throw Error(`Invalid OCHRE data: API response missing 'resource' key`);o=me(i.ochre.resource);break;case`spatialUnit`:if(!(`spatialUnit`in i.ochre))throw Error(`Invalid OCHRE data: API response missing 'spatialUnit' key`);o=he(i.ochre.spatialUnit);break;case`concept`:if(!(`concept`in i.ochre))throw Error(`Invalid OCHRE data: API response missing 'concept' key`);o=_e(i.ochre.concept);break;case`period`:if(!(`period`in i.ochre))throw Error(`Invalid OCHRE data: API response missing 'period' key`);o=G(i.ochre.period);break;case`bibliography`:if(!(`bibliography`in i.ochre))throw Error(`Invalid OCHRE data: API response missing 'bibliography' key`);o=q(i.ochre.bibliography);break;case`person`:if(!(`person`in i.ochre))throw Error(`Invalid OCHRE data: API response missing 'person' key`);o=ae(i.ochre.person);break;case`propertyValue`:if(!(`propertyValue`in i.ochre))throw Error(`Invalid OCHRE data: API response missing 'propertyValue' key`);o=Y(i.ochre.propertyValue);break;case`set`:if(!(`set`in i.ochre))throw Error(`Invalid OCHRE data: API response missing 'set' key`);o=pe(i.ochre.set,n);break;case`tree`:if(!(`tree`in i.ochre))throw Error(`Invalid OCHRE data: API response missing 'tree' key`);o=fe(i.ochre.tree);break;default:throw Error(`Invalid category`)}let s=ie(i.ochre.metadata),c={uuid:i.ochre.uuidBelongsTo,abbreviation:O(i.ochre.belongsTo)};return{error:null,metadata:s,belongsTo:c,item:o,category:t}}catch(e){return{error:e instanceof Error?e.message:`Unknown error`,metadata:void 0,belongsTo:void 0,item:void 0,category:void 0}}}
|
|
229
229
|
/**
|
|
230
230
|
* Parses raw identification data into the standardized Identification type
|
|
231
231
|
*
|
|
@@ -239,14 +239,14 @@ function M(e){try{let t={label:[`string`,`number`,`boolean`].includes(typeof e.l
|
|
|
239
239
|
* @param language - Raw language data, either single or array
|
|
240
240
|
* @returns Array of language codes as strings
|
|
241
241
|
*/
|
|
242
|
-
function
|
|
242
|
+
function re(e){return e==null?[`eng`]:Array.isArray(e)?e.map(e=>j(e)):[j(e)]}
|
|
243
243
|
/**
|
|
244
244
|
* Parses raw metadata into the standardized Metadata type
|
|
245
245
|
*
|
|
246
246
|
* @param metadata - Raw metadata from OCHRE format
|
|
247
247
|
* @returns Parsed Metadata object
|
|
248
248
|
*/
|
|
249
|
-
function
|
|
249
|
+
function ie(e){let t={label:``,abbreviation:``};if(e.item)if(e.item.label||e.item.abbreviation){let n=``,r=``;e.item.label&&(n=j(e.item.label)),e.item.abbreviation&&(r=j(e.item.abbreviation)),t={label:n,abbreviation:r}}else t=M(e.item.identification);let n=null,r=e.project?.identification?M(e.project.identification):null;return r&&(n={...r,website:e.project?.identification.website??null}),{project:n?{identification:n}:null,item:e.item?{identification:t,category:e.item.category,type:e.item.type,maxLength:e.item.maxLength??null}:null,dataset:j(e.dataset),publisher:j(e.publisher),languages:re(e.language),identifier:j(e.identifier),description:j(e.description)}}
|
|
250
250
|
/**
|
|
251
251
|
* Parses raw context item data into the standardized ContextItem type
|
|
252
252
|
*
|
|
@@ -274,28 +274,28 @@ function F(e){return typeof e.license==`string`?null:{content:e.license.content,
|
|
|
274
274
|
* @param person - Raw person data from OCHRE format
|
|
275
275
|
* @returns Parsed Person object
|
|
276
276
|
*/
|
|
277
|
-
function
|
|
277
|
+
function ae(e){return{uuid:e.uuid,category:`person`,publicationDateTime:e.publicationDateTime==null?null:new Date(e.publicationDateTime),type:e.type??null,number:e.n??null,context:e.context?P(e.context):null,date:e.date==null?null:new Date(e.date),identification:e.identification?M(e.identification):null,availability:e.availability?F(e.availability):null,address:e.address?{country:e.address.country??null,city:e.address.city??null,state:e.address.state??null}:null,coordinates:e.coordinates?V(e.coordinates):null,content:e.content==null?null:O(e.content),events:e.events?U(Array.isArray(e.events.event)?e.events.event:[e.events.event]):[],properties:e.properties?W(Array.isArray(e.properties.property)?e.properties.property:[e.properties.property]):[]}}
|
|
278
278
|
/**
|
|
279
279
|
* Parses raw person data into the standardized Person type
|
|
280
280
|
*
|
|
281
281
|
* @param persons - Array of raw person data from OCHRE format
|
|
282
282
|
* @returns Array of parsed Person objects
|
|
283
283
|
*/
|
|
284
|
-
function I(e){let t=[];for(let n of e)t.push(
|
|
284
|
+
function I(e){let t=[];for(let n of e)t.push(ae(n));return t}
|
|
285
285
|
/**
|
|
286
286
|
* Parses an array of raw links into standardized Link objects
|
|
287
287
|
*
|
|
288
288
|
* @param linkRaw - Raw OCHRE link
|
|
289
289
|
* @returns Parsed Link object
|
|
290
290
|
*/
|
|
291
|
-
function
|
|
291
|
+
function oe(e){let t=`resource`in e?e.resource:`spatialUnit`in e?e.spatialUnit:`concept`in e?e.concept:`set`in e?e.set:`tree`in e?e.tree:`person`in e?e.person:`bibliography`in e?e.bibliography:`epigraphicUnit`in e?e.epigraphicUnit:`propertyValue`in e?e.propertyValue:null;if(!t)throw Error(`Invalid link provided: ${JSON.stringify(e,null,2)}`);let n=Array.isArray(t)?t:[t],r=[];for(let t of n){let n={category:`resource`in e?`resource`:`spatialUnit`in e?`spatialUnit`:`concept`in e?`concept`:`set`in e?`set`:`person`in e?`person`:`tree`in e?`tree`:`bibliography`in e?`bibliography`:`epigraphicUnit`in e?`epigraphicUnit`:`propertyValue`in e?`propertyValue`:null,content:`content`in t?t.content==null?null:O(t.content):null,href:`href`in t&&t.href!=null?t.href:null,uuid:t.uuid,type:t.type??null,identification:t.identification?M(t.identification):null,image:null,bibliographies:`bibliography`in e?J(Array.isArray(e.bibliography)?e.bibliography:[e.bibliography]):null,publicationDateTime:t.publicationDateTime==null?null:new Date(t.publicationDateTime)};`height`in t&&t.height!=null&&t.width!=null&&t.heightPreview!=null&&t.widthPreview!=null&&(n.image={isInline:t.rend===`inline`,isPrimary:t.isPrimary??!1,heightPreview:t.heightPreview,widthPreview:t.widthPreview,height:t.height,width:t.width}),r.push(n)}return r}
|
|
292
292
|
/**
|
|
293
293
|
* Parses an array of raw links into standardized Link objects
|
|
294
294
|
*
|
|
295
295
|
* @param links - Array of raw OCHRE links
|
|
296
296
|
* @returns Array of parsed Link objects
|
|
297
297
|
*/
|
|
298
|
-
function L(e){let t=[];for(let n of e)t.push(...
|
|
298
|
+
function L(e){let t=[];for(let n of e)t.push(...oe(n));return t}
|
|
299
299
|
/**
|
|
300
300
|
* Parses raw document content into a standardized Document structure
|
|
301
301
|
*
|
|
@@ -325,7 +325,7 @@ function B(e,t=`eng`){let n=[];for(let r of e){if(typeof r==`string`){if(r===``)
|
|
|
325
325
|
* @param coordinates - Raw coordinates data in OCHRE format
|
|
326
326
|
* @returns Parsed Coordinates object
|
|
327
327
|
*/
|
|
328
|
-
function V(e){if(typeof e==`string`){let[t,n]=e.split(`, `);return{latitude:Number(t),longitude:Number(n),type:null,label:null}}return{latitude:e.
|
|
328
|
+
function V(e){if(typeof e==`string`){let[t,n]=e.split(`, `);return{latitude:Number(t),longitude:Number(n),type:null,label:null}}return e.coord==null?null:{latitude:e.coord.coordLatitude,longitude:e.coord.coordLongitude,type:e.coord.coordType,label:O(e.coord.coordLabel)}}
|
|
329
329
|
/**
|
|
330
330
|
* Parses a raw observation into a standardized Observation structure
|
|
331
331
|
*
|
|
@@ -339,14 +339,14 @@ function H(e){return{number:e.observationNo,date:e.date==null?null:new Date(e.da
|
|
|
339
339
|
* @param observations - Array of raw observations in OCHRE format
|
|
340
340
|
* @returns Array of parsed Observation objects
|
|
341
341
|
*/
|
|
342
|
-
function
|
|
342
|
+
function se(e){let t=[];for(let n of e)t.push(H(n));return t}
|
|
343
343
|
/**
|
|
344
344
|
* Parses an array of raw events into standardized Event objects
|
|
345
345
|
*
|
|
346
346
|
* @param events - Array of raw events in OCHRE format
|
|
347
347
|
* @returns Array of parsed Event objects
|
|
348
348
|
*/
|
|
349
|
-
function U(e){let t=[];for(let n of e)t.push({date:n.dateTime==null?null:new Date(n.dateTime),label:j(n.label),agent:n.agent?{uuid:n.agent.uuid,content:O(n.agent.content)}:null});return t}function
|
|
349
|
+
function U(e){let t=[];for(let n of e)t.push({date:n.dateTime==null?null:new Date(n.dateTime),label:j(n.label),agent:n.agent?{uuid:n.agent.uuid,content:O(n.agent.content)}:null});return t}function ce(e,t=`eng`){let n=`value`in e&&e.value?Array.isArray(e.value)?e.value:[e.value]:[],r=n.map(e=>{let t=null,n=null;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`){t=O(e);let r={content:t,booleanValue:n,isUncertain:!1,type:`string`,category:`value`,uuid:null,publicationDateTime:null,unit:null};return r}else{switch(e.type){case`integer`:case`decimal`:t=Number(e.content);break;case`dateTime`:t=e.content?typeof e.content==`string`?new Date(e.content):new Date(j({content:e.content})):null;break;default:`slug`in e&&e.slug!=null?t=O(e.slug):e.content!=null&&(t=j({content:e.content})),e.type===`boolean`&&(n=e.booleanValue??null);break}let r=`string`;if(e.type!=null){let{data:t,error:n}=p.safeParse(e.type);if(n)throw Error(`Invalid property value content type: "${e.type}"`);r=t}let i={content:t,booleanValue:n,isUncertain:e.isUncertain??!1,type:r,category:e.category??`value`,uuid:e.uuid??null,publicationDateTime:e.publicationDateTime==null?null:new Date(e.publicationDateTime),unit:e.unit??null};return i}});return{uuid:e.label.uuid,label:j(e.label,t).replace(/\s*\.{3}$/,``).trim(),values:r,comment:e.comment==null?null:O(e.comment),properties:e.property?W(Array.isArray(e.property)?e.property:[e.property]):[]}}
|
|
350
350
|
/**
|
|
351
351
|
* Parses raw properties into standardized Property objects
|
|
352
352
|
*
|
|
@@ -354,21 +354,21 @@ function U(e){let t=[];for(let n of e)t.push({date:n.dateTime==null?null:new Dat
|
|
|
354
354
|
* @param language - Language code for content selection (defaults to "eng")
|
|
355
355
|
* @returns Array of parsed Property objects
|
|
356
356
|
*/
|
|
357
|
-
function W(e,t=`eng`){let n=[];for(let r of e)n.push(
|
|
357
|
+
function W(e,t=`eng`){let n=[];for(let r of e)n.push(ce(r,t));return n}
|
|
358
358
|
/**
|
|
359
359
|
* Parses raw interpretations into standardized Interpretation objects
|
|
360
360
|
*
|
|
361
361
|
* @param interpretations - Array of raw interpretations in OCHRE format
|
|
362
362
|
* @returns Array of parsed Interpretation objects
|
|
363
363
|
*/
|
|
364
|
-
function
|
|
364
|
+
function le(e){let t=[];for(let n of e)t.push({date:new Date(n.date),number:n.interpretationNo,properties:n.properties?W(Array.isArray(n.properties.property)?n.properties.property:[n.properties.property]):[]});return t}
|
|
365
365
|
/**
|
|
366
366
|
* Parses raw image map data into a standardized ImageMap structure
|
|
367
367
|
*
|
|
368
368
|
* @param imageMap - Raw image map data in OCHRE format
|
|
369
369
|
* @returns Parsed ImageMap object
|
|
370
370
|
*/
|
|
371
|
-
function
|
|
371
|
+
function ue(e){let t={area:[],width:e.width,height:e.height},n=Array.isArray(e.area)?e.area:[e.area];for(let e of n)t.area.push({uuid:e.uuid,publicationDateTime:e.publicationDateTime==null?null:new Date(e.publicationDateTime),type:e.type,title:O(e.title),shape:e.shape===`rect`?`rectangle`:`polygon`,coords:e.coords.split(`,`).map(e=>Number.parseInt(e))});return t}
|
|
372
372
|
/**
|
|
373
373
|
* Parses raw period data into a standardized Period structure
|
|
374
374
|
*
|
|
@@ -389,63 +389,63 @@ function K(e){let t=[];for(let n of e)t.push(G(n));return t}
|
|
|
389
389
|
* @param bibliography - Raw bibliography data in OCHRE format
|
|
390
390
|
* @returns Parsed Bibliography object
|
|
391
391
|
*/
|
|
392
|
-
function
|
|
392
|
+
function q(e){let t=null;return e.source?.resource&&(t={uuid:e.source.resource.uuid,publicationDateTime:e.source.resource.publicationDateTime?new Date(e.source.resource.publicationDateTime):null,type:e.source.resource.type,identification:M(e.source.resource.identification)}),{uuid:e.uuid,category:`bibliography`,publicationDateTime:e.publicationDateTime==null?null:new Date(e.publicationDateTime),type:e.type??null,number:e.n??null,identification:e.identification?M(e.identification):null,projectIdentification:e.project?.identification?M(e.project.identification):null,context:e.context?P(e.context):null,citation:{format:e.citationFormat??null,short:e.citationFormatSpan?O(`default:span`in e.citationFormatSpan?e.citationFormatSpan[`default:span`].content:e.citationFormatSpan.span.content):null,long:e.referenceFormatDiv?O(`default:div`in e.referenceFormatDiv?e.referenceFormatDiv[`default:div`][`default:div`].content:e.referenceFormatDiv.div.div.content):null},publicationInfo:{publishers:e.publicationInfo?.publishers?I(Array.isArray(e.publicationInfo.publishers.publishers.person)?e.publicationInfo.publishers.publishers.person:[e.publicationInfo.publishers.publishers.person]):[],startDate:e.publicationInfo?.startDate?new Date(e.publicationInfo.startDate.year,e.publicationInfo.startDate.month,e.publicationInfo.startDate.day):null},entryInfo:e.entryInfo?{startIssue:O(e.entryInfo.startIssue),startVolume:O(e.entryInfo.startVolume)}:null,source:{resource:t,documentUrl:e.sourceDocument?`https://ochre.lib.uchicago.edu/ochre?uuid=${e.sourceDocument.uuid}&load`:null},periods:e.periods?K(Array.isArray(e.periods.period)?e.periods.period:[e.periods.period]):[],authors:e.authors?I(Array.isArray(e.authors.person)?e.authors.person:[e.authors.person]):[],properties:e.properties?W(Array.isArray(e.properties.property)?e.properties.property:[e.properties.property]):[]}}
|
|
393
393
|
/**
|
|
394
394
|
* Parses an array of raw bibliographies into standardized Bibliography objects
|
|
395
395
|
*
|
|
396
396
|
* @param bibliographies - Array of raw bibliographies in OCHRE format
|
|
397
397
|
* @returns Array of parsed Bibliography objects
|
|
398
398
|
*/
|
|
399
|
-
function
|
|
399
|
+
function J(e){let t=[];for(let n of e)t.push(q(n));return t}
|
|
400
400
|
/**
|
|
401
401
|
* Parses raw property value data into a standardized PropertyValue structure
|
|
402
402
|
*
|
|
403
403
|
* @param propertyValue - Raw property value data in OCHRE format
|
|
404
404
|
* @returns Parsed PropertyValue object
|
|
405
405
|
*/
|
|
406
|
-
function
|
|
406
|
+
function Y(e){return{uuid:e.uuid,category:`propertyValue`,number:e.n,publicationDateTime:e.publicationDateTime?new Date(e.publicationDateTime):null,context:e.context?P(e.context):null,availability:e.availability?F(e.availability):null,identification:M(e.identification),date:e.date?new Date(e.date):null,creators:e.creators?I(Array.isArray(e.creators.creator)?e.creators.creator:[e.creators.creator]):[],description:e.description?[`string`,`number`,`boolean`].includes(typeof e.description)?O(e.description):j(e.description):``,notes:e.notes?B(Array.isArray(e.notes.note)?e.notes.note:[e.notes.note]):[],links:e.links?L(Array.isArray(e.links)?e.links:[e.links]):[]}}
|
|
407
407
|
/**
|
|
408
408
|
* Parses an array of raw property values into standardized PropertyValue objects
|
|
409
409
|
*
|
|
410
410
|
* @param propertyValues - Array of raw property values in OCHRE format
|
|
411
411
|
* @returns Array of parsed PropertyValue objects
|
|
412
412
|
*/
|
|
413
|
-
function
|
|
413
|
+
function de(e){let t=[];for(let n of e)t.push(Y(n));return t}
|
|
414
414
|
/**
|
|
415
415
|
* Parses a raw tree structure into a standardized Tree object
|
|
416
416
|
*
|
|
417
417
|
* @param tree - Raw tree data in OCHRE format
|
|
418
418
|
* @returns Parsed Tree object or null if invalid
|
|
419
419
|
*/
|
|
420
|
-
function
|
|
420
|
+
function fe(e){let t=[];e.creators&&(t=I(Array.isArray(e.creators.creator)?e.creators.creator:[e.creators.creator]));let n=null;e.date!=null&&(n=new Date(e.date));let r=[],i=[],a=[],o=[],s=[],c=[],l=[];typeof e.items!=`string`&&`resource`in e.items&&(r=X(Array.isArray(e.items.resource)?e.items.resource:[e.items.resource])),typeof e.items!=`string`&&`spatialUnit`in e.items&&(i=ge(Array.isArray(e.items.spatialUnit)?e.items.spatialUnit:[e.items.spatialUnit])),typeof e.items!=`string`&&`concept`in e.items&&(a=ve(Array.isArray(e.items.concept)?e.items.concept:[e.items.concept])),typeof e.items!=`string`&&`period`in e.items&&(o=K(Array.isArray(e.items.period)?e.items.period:[e.items.period])),typeof e.items!=`string`&&`bibliography`in e.items&&(s=J(Array.isArray(e.items.bibliography)?e.items.bibliography:[e.items.bibliography])),typeof e.items!=`string`&&`person`in e.items&&(c=I(Array.isArray(e.items.person)?e.items.person:[e.items.person])),typeof e.items!=`string`&&`propertyValue`in e.items&&(l=de(Array.isArray(e.items.propertyValue)?e.items.propertyValue:[e.items.propertyValue]));let u={uuid:e.uuid,category:`tree`,publicationDateTime:new Date(e.publicationDateTime),identification:M(e.identification),creators:t,license:F(e.availability),date:n,type:e.type,number:e.n,items:{resources:r,spatialUnits:i,concepts:a,periods:o,bibliographies:s,persons:c,propertyValues:l},properties:e.properties?W(Array.isArray(e.properties.property)?e.properties.property:[e.properties.property]):[]};return u}
|
|
421
421
|
/**
|
|
422
422
|
* Parses raw set data into a standardized Set structure
|
|
423
423
|
*
|
|
424
424
|
* @param set - Raw set data in OCHRE format
|
|
425
425
|
* @returns Parsed Set object
|
|
426
426
|
*/
|
|
427
|
-
function
|
|
427
|
+
function pe(e,t){if(typeof e.items==`string`)throw TypeError(`Invalid OCHRE data: Set has no items`);let n=t??ee(Object.keys(e.items)),r=[];switch(n){case`resource`:if(!(`resource`in e.items))throw Error(`Invalid OCHRE data: Set has no resources`);r=X(Array.isArray(e.items.resource)?e.items.resource:[e.items.resource]);break;case`spatialUnit`:if(!(`spatialUnit`in e.items))throw Error(`Invalid OCHRE data: Set has no spatial units`);r=ge(Array.isArray(e.items.spatialUnit)?e.items.spatialUnit:[e.items.spatialUnit]);break;case`concept`:if(!(`concept`in e.items))throw Error(`Invalid OCHRE data: Set has no concepts`);r=ve(Array.isArray(e.items.concept)?e.items.concept:[e.items.concept]);break;case`period`:if(!(`period`in e.items))throw Error(`Invalid OCHRE data: Set has no periods`);r=K(Array.isArray(e.items.period)?e.items.period:[e.items.period]);break;case`bibliography`:if(!(`bibliography`in e.items))throw Error(`Invalid OCHRE data: Set has no bibliographies`);r=J(Array.isArray(e.items.bibliography)?e.items.bibliography:[e.items.bibliography]);break;case`person`:if(!(`person`in e.items))throw Error(`Invalid OCHRE data: Set has no persons`);r=I(Array.isArray(e.items.person)?e.items.person:[e.items.person]);break;case`propertyValue`:if(!(`propertyValue`in e.items))throw Error(`Invalid OCHRE data: Set has no property values`);r=de(Array.isArray(e.items.propertyValue)?e.items.propertyValue:[e.items.propertyValue]);break;default:throw Error(`Invalid OCHRE data: Set has no items or is malformed`)}return{uuid:e.uuid,category:`set`,itemCategory:t,publicationDateTime:e.publicationDateTime?new Date(e.publicationDateTime):null,date:e.date==null?null:new Date(e.date),license:F(e.availability),identification:M(e.identification),isSuppressingBlanks:e.suppressBlanks??!1,description:e.description?[`string`,`number`,`boolean`].includes(typeof e.description)?O(e.description):j(e.description):``,creators:e.creators?I(Array.isArray(e.creators.creator)?e.creators.creator:[e.creators.creator]):[],type:e.type,number:e.n,items:r}}
|
|
428
428
|
/**
|
|
429
429
|
* Parses raw resource data into a standardized Resource structure
|
|
430
430
|
*
|
|
431
431
|
* @param resource - Raw resource data in OCHRE format
|
|
432
432
|
* @returns Parsed Resource object
|
|
433
433
|
*/
|
|
434
|
-
function
|
|
434
|
+
function me(e){let t={uuid:e.uuid,category:`resource`,publicationDateTime:e.publicationDateTime?new Date(e.publicationDateTime):null,type:e.type,number:e.n,format:e.format??null,context:`context`in e&&e.context?P(e.context):null,license:`availability`in e&&e.availability?F(e.availability):null,copyright:`copyright`in e&&e.copyright!=null?O(e.copyright):null,identification:M(e.identification),date:e.date==null?null:new Date(e.date),image:e.image?z(e.image):null,creators:e.creators?I(Array.isArray(e.creators.creator)?e.creators.creator:[e.creators.creator]):[],notes:e.notes?B(Array.isArray(e.notes.note)?e.notes.note:[e.notes.note]):[],description:e.description?[`string`,`number`,`boolean`].includes(typeof e.description)?O(e.description):j(e.description):``,document:e.document&&`content`in e.document?R(e.document.content):null,href:e.href??null,imageMap:e.imagemap?ue(e.imagemap):null,periods:e.periods?K(Array.isArray(e.periods.period)?e.periods.period:[e.periods.period]):[],links:e.links?L(Array.isArray(e.links)?e.links:[e.links]):[],reverseLinks:e.reverseLinks?L(Array.isArray(e.reverseLinks)?e.reverseLinks:[e.reverseLinks]):[],properties:e.properties?W(Array.isArray(e.properties.property)?e.properties.property:[e.properties.property]):[],citedBibliographies:e.citedBibliography?J(Array.isArray(e.citedBibliography.reference)?e.citedBibliography.reference:[e.citedBibliography.reference]):[],resources:e.resource?X(Array.isArray(e.resource)?e.resource:[e.resource]):[]};return t}
|
|
435
435
|
/**
|
|
436
436
|
* Parses raw resource data into a standardized Resource structure
|
|
437
437
|
*
|
|
438
438
|
* @param resources - Raw resource data in OCHRE format
|
|
439
439
|
* @returns Parsed Resource object
|
|
440
440
|
*/
|
|
441
|
-
function
|
|
441
|
+
function X(e){let t=[],n=Array.isArray(e)?e:[e];for(let e of n)t.push(me(e));return t}
|
|
442
442
|
/**
|
|
443
443
|
* Parses raw spatial units into standardized SpatialUnit objects
|
|
444
444
|
*
|
|
445
445
|
* @param spatialUnit - Raw spatial unit in OCHRE format
|
|
446
446
|
* @returns Parsed SpatialUnit object
|
|
447
447
|
*/
|
|
448
|
-
function he(e){let t={uuid:e.uuid,category:`spatialUnit`,publicationDateTime:e.publicationDateTime==null?null:new Date(e.publicationDateTime),
|
|
448
|
+
function he(e){let t={uuid:e.uuid,category:`spatialUnit`,publicationDateTime:e.publicationDateTime==null?null:new Date(e.publicationDateTime),number:e.n,context:`context`in e&&e.context?P(e.context):null,license:`availability`in e&&e.availability?F(e.availability):null,identification:M(e.identification),image:e.image?z(e.image):null,description:e.description?[`string`,`number`,`boolean`].includes(typeof e.description)?O(e.description):j(e.description):``,coordinates:e.coordinates?V(e.coordinates):e.coordinate?V(e.coordinate):null,observations:`observations`in e&&e.observations?se(Array.isArray(e.observations.observation)?e.observations.observation:[e.observations.observation]):e.observation?[H(e.observation)]:[],events:`events`in e&&e.events?U(Array.isArray(e.events.event)?e.events.event:[e.events.event]):[],properties:`properties`in e&&e.properties?W(Array.isArray(e.properties.property)?e.properties.property:[e.properties.property]):[]};return t}
|
|
449
449
|
/**
|
|
450
450
|
* Parses an array of raw spatial units into standardized SpatialUnit objects
|
|
451
451
|
*
|
|
@@ -459,7 +459,7 @@ function ge(e){let t=[],n=Array.isArray(e)?e:[e];for(let e of n)t.push(he(e));re
|
|
|
459
459
|
* @param concept - Raw concept data in OCHRE format
|
|
460
460
|
* @returns Parsed Concept object
|
|
461
461
|
*/
|
|
462
|
-
function _e(e){let t={uuid:e.uuid,category:`concept`,publicationDateTime:e.publicationDateTime?new Date(e.publicationDateTime):null,number:e.n,license:`availability`in e&&e.availability?F(e.availability):null,context:`context`in e&&e.context?P(e.context):null,identification:M(e.identification),interpretations:
|
|
462
|
+
function _e(e){let t={uuid:e.uuid,category:`concept`,publicationDateTime:e.publicationDateTime?new Date(e.publicationDateTime):null,number:e.n,license:`availability`in e&&e.availability?F(e.availability):null,context:`context`in e&&e.context?P(e.context):null,identification:M(e.identification),interpretations:le(Array.isArray(e.interpretations.interpretation)?e.interpretations.interpretation:[e.interpretations.interpretation])};return t}
|
|
463
463
|
/**
|
|
464
464
|
* Parses raw webpage resources into standardized WebElement or Webpage objects
|
|
465
465
|
*
|
|
@@ -467,14 +467,14 @@ function _e(e){let t={uuid:e.uuid,category:`concept`,publicationDateTime:e.publi
|
|
|
467
467
|
* @param type - Type of resource to parse ("element" or "page")
|
|
468
468
|
* @returns Array of parsed WebElement or Webpage objects
|
|
469
469
|
*/
|
|
470
|
-
const
|
|
470
|
+
const Z=async(e,t)=>{let n=[];for(let r of e){let e=r.properties?W(Array.isArray(r.properties.property)?r.properties.property:[r.properties.property]):[],i=e.find(e=>e.label===`presentation`&&e.values[0].content===t);if(!i)continue;switch(t){case`element`:{let e=await Q(r);n.push(e);break}case`page`:{let e=await be(r);e&&n.push(e);break}case`block`:{let e=await $(r);e&&n.push(e);break}}}return n};
|
|
471
471
|
/**
|
|
472
472
|
* Parses raw concept data into standardized Concept objects
|
|
473
473
|
*
|
|
474
474
|
* @param concepts - Array of raw concept data in OCHRE format
|
|
475
475
|
* @returns Array of parsed Concept objects
|
|
476
476
|
*/
|
|
477
|
-
function
|
|
477
|
+
function ve(e){let t=[],n=Array.isArray(e)?e:[e];for(let e of n)t.push(_e(e));return t}
|
|
478
478
|
/**
|
|
479
479
|
* Parses raw web element properties into a standardized WebElementComponent structure
|
|
480
480
|
*
|
|
@@ -482,42 +482,42 @@ function ye(e){let t=[],n=Array.isArray(e)?e:[e];for(let e of n)t.push(_e(e));re
|
|
|
482
482
|
* @param elementResource - Raw element resource data in OCHRE format
|
|
483
483
|
* @returns Parsed WebElementComponent object
|
|
484
484
|
*/
|
|
485
|
-
async function
|
|
485
|
+
async function ye(e,t){let n=d.parse(e.values[0].content),r={component:n},i=t.links?L(Array.isArray(t.links)?t.links:[t.links]):[],a=i.filter(e=>e.type===`image`||e.type===`IIIF`),o=t.document&&`content`in t.document?R(t.document.content):null;if(o===null){let e=i.find(e=>e.type===`internalDocument`);if(e){let{item:t,error:n}=await ne(e.uuid,`resource`);if(n!==null)throw Error(`Failed to fetch OCHRE data`);o=t.document}}switch(n){case`annotated-document`:if(!o)throw Error(`Document not found for the following component: “${n}”`);r.document=o;break;case`annotated-image`:{if(a.length===0)throw Error(`Image link not found for the following component: “${n}”`);let t=x(e.properties,`is-searchable`)===`Yes`;r.imageUuid=a[0].uuid,r.isSearchable=t;break}case`bibliography`:{let t=i.find(e=>e.category===`bibliography`);if(!t)throw Error(`Bibliography link not found for the following component: “${n}”`);if(!t.bibliographies)throw Error(`Bibliography not found for the following component: “${n}”`);let a=x(e.properties,`layout`);a??=`long`,r.bibliographies=t.bibliographies,r.layout=a;break}case`button`:{let i=x(e.properties,`variant`);i??=`default`;let a=!1,o=x(e.properties,`navigate-to`);if(o===null){if(o=x(e.properties,`link-to`),o===null)throw Error(`Properties “navigate-to” or “link-to” not found for the following component: “${n}”`);a=!0}let s=null,c=x(e.properties,`icon`);c!==null&&(s=c),r.variant=i,r.href=o,r.isExternal=a,r.label=[`string`,`number`,`boolean`].includes(typeof t.identification.label)?O(t.identification.label):j(t.identification.label),r.icon=s;break}case`collection`:{let t=i.find(e=>e.category===`set`);if(!t)throw Error(`Collection link not found for the following component: “${n}”`);let a=x(e.properties,`variant`);a??=`full`;let o=x(e.properties,`item-variant`);o??=`default`;let s=!1,c=x(e.properties,`show-count`);c!==null&&(s=c===`Yes`);let l=!1,u=x(e.properties,`is-searchable`);u!==null&&(l=u===`Yes`);let d=x(e.properties,`layout`);d??=`image-start`,r.collectionId=t.uuid,r.variant=a,r.itemVariant=o,r.isSearchable=l,r.showCount=s,r.layout=d;break}case`empty-space`:{let t=x(e.properties,`height`),n=x(e.properties,`width`);r.height=t,r.width=n;break}case`entries`:{let t=i.find(e=>e.category===`tree`);if(!t)throw Error(`Entries link not found for the following component: “${n}”`);let a=x(e.properties,`variant`);a??=`entry`;let o=!1,s=x(e.properties,`is-searchable`);s!==null&&(o=s===`Yes`),r.entriesId=t.uuid,r.variant=a,r.isSearchable=o;break}case`filter-categories`:{let e=i.find(e=>e.category===`set`);if(!e)throw Error(`Filter link not found for the following component: “${n}”`);r.filterId=e.uuid;break}case`iframe`:{let t=i.find(e=>e.type===`webpage`)?.href;if(!t)throw Error(`URL not found for the following component: “${n}”`);let a=x(e.properties,`height`),o=x(e.properties,`width`);r.href=t,r.height=a,r.width=o;break}case`iiif-viewer`:{let e=i.find(e=>e.type===`IIIF`);if(!e)throw Error(`Manifest link not found for the following component: “${n}”`);r.IIIFId=e.uuid;break}case`image`:{if(a.length===0)throw Error(`Image link not found for the following component: “${n}”`);let t=[];for(let e of a)t.push({url:`https://ochre.lib.uchicago.edu/ochre?uuid=${e.uuid}&load`,label:e.identification?.label??null,width:e.image?.width??0,height:e.image?.height??0});let i=x(e.properties,`variant`);i??=`default`;let o=x(e.properties,`layout-caption`);o??=`bottom`;let s=null,c=x(e.properties,`width`);c!==null&&(typeof c==`number`?s=c:typeof c==`string`&&(s=Number.parseFloat(c)));let l=null,u=x(e.properties,`height`);u!==null&&(typeof u==`number`?l=u:typeof u==`string`&&(l=Number.parseFloat(u)));let d=!0,f=x(e.properties,`is-full-width`);f!==null&&(d=f===`Yes`);let p=!0,m=x(e.properties,`is-full-height`);m!==null&&(p=m===`Yes`);let h=x(e.properties,`image-quality`);h??=`high`;let g=x(e.properties,`caption-source`);g??=`name`;let _=x(e.properties,`alt-text-source`);_??=`name`;let v=!1,b=x(e.properties,`is-transparent`);b!==null&&(v=b===`Yes`);let S=!1,C=x(e.properties,`is-cover`);C!==null&&(S=C===`Yes`);let w=null;if(t.length>1){let t=y(e.properties,`variant`),n=5;if(t&&t.values[0].content===`carousel`){let e=x(t.properties,`seconds-per-image`);e!==null&&(typeof e==`number`?n=e:typeof e==`string`&&(n=Number.parseFloat(e)))}w={secondsPerImage:n}}r.images=t,r.variant=i,r.width=s,r.height=l,r.isFullWidth=d,r.isFullHeight=p,r.imageQuality=h,r.captionLayout=o,r.captionSource=g,r.altTextSource=_,r.isTransparentBackground=v,r.isCover=S,r.carouselOptions=w;break}case`image-gallery`:{let t=i.find(e=>e.category===`tree`||e.category===`set`);if(!t)throw Error(`Image gallery link not found for the following component: “${n}”`);let a=x(e.properties,`is-searchable`)===`Yes`;r.galleryId=t.uuid,r.isSearchable=a;break}case`n-columns`:{let e=t.resource?await Z(Array.isArray(t.resource)?t.resource:[t.resource],`element`):[];r.columns=e;break}case`n-rows`:{let e=t.resource?await Z(Array.isArray(t.resource)?t.resource:[t.resource],`element`):[];r.rows=e;break}case`network-graph`:break;case`table`:{let e=i.find(e=>e.category===`set`);if(!e)throw Error(`Table link not found for the following component: “${n}”`);r.tableId=e.uuid;break}case`search-bar`:{let t=x(e.properties,`variant`);t??=`default`,r.variant=t;break}case`text`:{if(!o)throw Error(`Document not found for the following component: “${n}”`);let t=x(e.properties,`variant`);t??=`block`;let i=x(e.properties,`heading`);r.variant=t,r.heading=i,r.content=o.content;break}case`timeline`:{let e=i.find(e=>e.category===`tree`);if(!e)throw Error(`Timeline link not found for the following component: “${n}”`);r.timelineId=e.uuid;break}case`video`:{let t=i.find(e=>e.type===`video`);if(!t)throw Error(`Video link not found for the following component: “${n}”`);let a=x(e.properties,`chapters-displayed`);a??=`Yes`,r.videoId=t.uuid,r.isChaptersDislayed=a===`Yes`;break}default:console.warn(`Invalid or non-implemented component name “${n}” for the following element: “${j(t.identification.label)}”`);break}return r}
|
|
486
486
|
/**
|
|
487
487
|
* Parses raw web element data into a standardized WebElement structure
|
|
488
488
|
*
|
|
489
489
|
* @param elementResource - Raw element resource data in OCHRE format
|
|
490
490
|
* @returns Parsed WebElement object
|
|
491
491
|
*/
|
|
492
|
-
async function Q(e){let t=M(e.identification),n=e.properties?.property?W(Array.isArray(e.properties.property)?e.properties.property:[e.properties.property]):[],r=n.find(e=>e.label===`presentation`);if(!r)throw Error(`Presentation property not found for element “${t.label}”`);let i=r.properties.find(e=>e.label===`component`);if(!i)throw Error(`Component for element “${t.label}” not found`);let a=await
|
|
492
|
+
async function Q(e){let t=M(e.identification),n=e.properties?.property?W(Array.isArray(e.properties.property)?e.properties.property:[e.properties.property]):[],r=n.find(e=>e.label===`presentation`);if(!r)throw Error(`Presentation property not found for element “${t.label}”`);let i=r.properties.find(e=>e.label===`component`);if(!i)throw Error(`Component for element “${t.label}” not found`);let a=await ye(i,e),o=r.properties.find(e=>e.label===`section-sidebar-displayed`),s=o?.values[0]?.booleanValue===!0,c=e.properties?.property?W(Array.isArray(e.properties.property)?e.properties.property:[e.properties.property]):[],l=c.find(e=>e.label===`presentation`&&e.values[0].content===`css`)?.properties??[],u=[];for(let e of l){let t=e.values[0].content;u.push({label:e.label,value:t})}let d=c.find(e=>e.label===`presentation`&&e.values[0].content===`css-mobile`)?.properties??[],f=[];for(let e of d){let t=e.values[0].content;f.push({label:e.label,value:t})}let p=c.find(e=>e.label===`presentation`&&e.values[0].content===`title`)?.properties,m=`default`,h=!1,g=!1,_=!1,v=!1;if(p){let e=x(p,`variant`);e&&(m=e);let t=p.filter(e=>e.label===`display`);t.length>0&&(h=t.some(e=>e.values[0].content===`name`),g=t.some(e=>e.values[0].content===`description`),_=t.some(e=>e.values[0].content===`date`),v=t.some(e=>e.values[0].content===`creators`))}return{uuid:e.uuid,type:`element`,title:{label:t.label,variant:m,properties:{isNameDisplayed:h,isDescriptionDisplayed:g,isDateDisplayed:_,isCreatorsDisplayed:v}},isDisplayedInBlockSectionSidebar:s,cssStyles:u,cssStylesMobile:f,...a}}
|
|
493
493
|
/**
|
|
494
494
|
* Parses raw webpage data into a standardized Webpage structure
|
|
495
495
|
*
|
|
496
496
|
* @param webpageResource - Raw webpage resource data in OCHRE format
|
|
497
497
|
* @returns Parsed Webpage object
|
|
498
498
|
*/
|
|
499
|
-
async function
|
|
499
|
+
async function be(e){let t=e.properties?W(Array.isArray(e.properties.property)?e.properties.property:[e.properties.property]):[];if(t.length===0||t.find(e=>e.label===`presentation`)?.values[0]?.content!==`page`)return null;let n=M(e.identification),r=e.slug;if(r===void 0)throw Error(`Slug not found for page “${n.label}”`);let i=e.links?L(Array.isArray(e.links)?e.links:[e.links]):[],a=i.find(e=>e.type===`image`||e.type===`IIIF`),o=e.resource?Array.isArray(e.resource)?e.resource:[e.resource]:[],s=[];for(let e of o){let t=e.properties?W(Array.isArray(e.properties.property)?e.properties.property:[e.properties.property]):[],n=x(t,`presentation`);if(n==null)continue;switch(n){case`element`:{let t=await Q(e);s.push(t);break}case`block`:{let t=await $(e);t&&s.push(t);break}}}let c=e.resource?await Z(Array.isArray(e.resource)?e.resource:[e.resource],`page`):[],l=!0,u=`default`,d=`default`,f=!0,p=t.find(e=>e.label===`presentation`&&e.values[0]?.content===`page`)?.properties;if(p){let e=p.find(e=>e.label===`header`)?.values[0];e&&(l=e.content===`Yes`);let t=p.find(e=>e.label===`width`)?.values[0];t&&(u=t.content);let n=p.find(e=>e.label===`variant`)?.values[0];n&&(d=n.content);let r=p.find(e=>e.label===`sidebar-visible`)?.values[0];r&&(f=r.content===`Yes`)}let m=t.find(e=>e.label===`presentation`&&e.values[0]?.content===`css`)?.properties,h=[];if(m)for(let e of m)h.push({label:e.label,value:e.values[0].content});let g=t.find(e=>e.label===`presentation`&&e.values[0]?.content===`css-mobile`)?.properties,_=[];if(g)for(let e of g)_.push({label:e.label,value:e.values[0].content});return{title:n.label,slug:r,items:s,properties:{displayedInHeader:l,width:u,variant:d,backgroundImageUrl:a?`https://ochre.lib.uchicago.edu/ochre?uuid=${a.uuid}&load`:null,isSidebarDisplayed:f,cssStyles:h,cssStylesMobile:_},webpages:c}}
|
|
500
500
|
/**
|
|
501
501
|
* Parses raw webpage resources into an array of Webpage objects
|
|
502
502
|
*
|
|
503
503
|
* @param webpageResources - Array of raw webpage resources in OCHRE format
|
|
504
504
|
* @returns Array of parsed Webpage objects
|
|
505
505
|
*/
|
|
506
|
-
async function
|
|
506
|
+
async function xe(e){let t=[],n=Array.isArray(e)?e:[e];for(let e of n){let n=await be(e);n&&t.push(n)}return t}
|
|
507
507
|
/**
|
|
508
508
|
* Parses raw block data into a standardized Block structure
|
|
509
509
|
*
|
|
510
510
|
* @param blockResource - Raw block resource data in OCHRE format
|
|
511
511
|
* @returns Parsed Block object
|
|
512
512
|
*/
|
|
513
|
-
async function $(e){let t={uuid:e.uuid,type:`block`,layout:`vertical`,items:[],properties:{spacing:void 0,gap:void 0,alignItems:`start`,justifyContent:`stretch`,sectionSidebarItems:null},propertiesMobile:null,cssStyles:[],cssStylesMobile:[]},n=e.properties?W(Array.isArray(e.properties.property)?e.properties.property:[e.properties.property]):[],r=n.find(e=>e.label===`presentation`&&e.values[0]?.content===`block`)?.properties;if(r){let e=r.find(e=>e.label===`layout`)?.values[0];e&&(t.layout=e.content);let n=r.find(e=>e.label===`spacing`)?.values[0];n&&(t.properties.spacing=n.content);let i=r.find(e=>e.label===`gap`)?.values[0];i&&(t.properties.gap=i.content);let a=r.find(e=>e.label===`align-items`)?.values[0];a&&(t.properties.alignItems=a.content);let o=r.find(e=>e.label===`justify-content`)?.values[0];o&&(t.properties.justifyContent=o.content);let s=r.find(e=>e.label===`overwrite-mobile`);if(s){let e=s.properties,n={};for(let t of e)n[t.label]=t.values[0].content;t.propertiesMobile=n}}let i=e.resource?Array.isArray(e.resource)?e.resource:[e.resource]:[],a=[];for(let e of i){let t=e.properties?W(Array.isArray(e.properties.property)?e.properties.property:[e.properties.property]):[],n=
|
|
513
|
+
async function $(e){let t={uuid:e.uuid,type:`block`,layout:`vertical`,items:[],properties:{spacing:void 0,gap:void 0,alignItems:`start`,justifyContent:`stretch`,sectionSidebarItems:null},propertiesMobile:null,cssStyles:[],cssStylesMobile:[]},n=e.properties?W(Array.isArray(e.properties.property)?e.properties.property:[e.properties.property]):[],r=n.find(e=>e.label===`presentation`&&e.values[0]?.content===`block`)?.properties;if(r){let e=r.find(e=>e.label===`layout`)?.values[0];e&&(t.layout=e.content);let n=r.find(e=>e.label===`spacing`)?.values[0];n&&(t.properties.spacing=n.content);let i=r.find(e=>e.label===`gap`)?.values[0];i&&(t.properties.gap=i.content);let a=r.find(e=>e.label===`align-items`)?.values[0];a&&(t.properties.alignItems=a.content);let o=r.find(e=>e.label===`justify-content`)?.values[0];o&&(t.properties.justifyContent=o.content);let s=r.find(e=>e.label===`overwrite-mobile`);if(s){let e=s.properties,n={};for(let t of e)n[t.label]=t.values[0].content;t.propertiesMobile=n}}let i=e.resource?Array.isArray(e.resource)?e.resource:[e.resource]:[],a=[];for(let e of i){let t=e.properties?W(Array.isArray(e.properties.property)?e.properties.property:[e.properties.property]):[],n=x(t,`presentation`);if(n==null)continue;switch(n){case`element`:{let t=await Q(e);a.push(t);break}case`block`:{let t=await $(e);t&&a.push(t);break}}}t.items=a;let o=n.find(e=>e.label===`presentation`&&e.values[0]?.content===`css`)?.properties;if(o)for(let e of o)t.cssStyles.push({label:e.label,value:e.values[0].content});let s=n.find(e=>e.label===`presentation`&&e.values[0]?.content===`css-mobile`)?.properties;if(s)for(let e of s)t.cssStylesMobile.push({label:e.label,value:e.values[0].content});return t.properties.sectionSidebarItems=Se(t),t}function Se(e){let t=[];for(let n of e.items)switch(n.type){case`block`:{let e=Se(n);e!==null&&t.push({uuid:n.uuid,type:`block`,name:null,items:e});break}case`element`:{let e=n.isDisplayedInBlockSectionSidebar;if(!e)continue;t.push({uuid:n.uuid,type:`element`,name:n.title.label,items:null});break}}return t.length>0?t:null}
|
|
514
514
|
/**
|
|
515
515
|
* Parses raw website properties into a standardized WebsiteProperties structure
|
|
516
516
|
*
|
|
517
517
|
* @param properties - Array of raw website properties in OCHRE format
|
|
518
518
|
* @returns Parsed WebsiteProperties object
|
|
519
519
|
*/
|
|
520
|
-
function
|
|
520
|
+
function Ce(e){let t=W(e),n=t.find(e=>e.label===`presentation`)?.properties;if(!n)throw Error(`Presentation property not found`);let r=n.find(e=>e.label===`webUI`)?.values[0]?.content;if(r==null)throw Error(`Website type not found`);let i=n.find(e=>e.label===`status`)?.values[0]?.content;if(i==null)throw Error(`Website status not found`);let a=n.find(e=>e.label===`privacy`)?.values[0]?.content;a??=`public`;let o=u.safeParse({type:r,status:i,privacy:a});if(!o.success)throw Error(`Invalid website properties: ${o.error.message}`);let s=null,c=n.find(e=>e.label===`contact`);if(c){let[e,t]=(c.values[0]?.content).split(`;`);s={name:e,email:t??null}}let l=n.find(e=>e.label===`logo`)?.values[0]?.uuid??null,d=!0,f=`default`,p=`start`,m=!0,h=!0,g=!1,_=!0,v=n.find(e=>e.label===`navbar-visible`)?.values[0];v&&(d=v.content===`Yes`);let y=n.find(e=>e.label===`navbar-variant`)?.values[0];y&&(f=y.content);let b=n.find(e=>e.label===`navbar-alignment`)?.values[0];b&&(p=b.content);let x=n.find(e=>e.label===`navbar-project-visible`)?.values[0];x&&(m=x.content===`Yes`);let S=n.find(e=>e.label===`footer-visible`)?.values[0];S&&(h=S.content===`Yes`);let C=n.find(e=>e.label===`sidebar-visible`)?.values[0];C&&(g=C.content===`Yes`);let w=n.find(e=>e.label===`supports-theme-toggle`)?.values[0];w&&(_=w.content===`Yes`);let{type:T,status:E,privacy:D}=o.data;return{type:T,privacy:D,status:E,contact:s,isHeaderDisplayed:d,headerVariant:f,headerAlignment:p,isHeaderProjectDisplayed:m,isFooterDisplayed:h,isSidebarDisplayed:g,supportsThemeToggle:_,logoUrl:l===null?null:`https://ochre.lib.uchicago.edu/ochre?uuid=${l}&load`}}async function we(e,t,n){if(!e.properties)throw Error(`Website properties not found`);let r=Ce(Array.isArray(e.properties.property)?e.properties.property:[e.properties.property]);if(typeof e.items==`string`||!(`resource`in e.items))throw Error(`Website pages not found`);let i=Array.isArray(e.items.resource)?e.items.resource:[e.items.resource],a=await xe(i),o=null,s=[],c={label:``,variant:`default`,properties:{isNameDisplayed:!1,isDescriptionDisplayed:!1,isDateDisplayed:!1,isCreatorsDisplayed:!1}},l=`start`,u=`default`,d=[],f=[],p=i.find(e=>{let t=e.properties?W(Array.isArray(e.properties.property)?e.properties.property:[e.properties.property]):[];return t.some(e=>e.label===`presentation`&&e.values[0]?.content===`element`&&e.properties[0]?.label===`component`&&e.properties[0].values[0]?.content===`sidebar`)});if(p){c.label=typeof p.identification.label==`string`||typeof p.identification.label==`number`||typeof p.identification.label==`boolean`?O(p.identification.label):j(p.identification.label);let e=p.properties?W(Array.isArray(p.properties.property)?p.properties.property:[p.properties.property]):[],t=e.find(e=>e.label===`presentation`&&e.values[0]?.content===`element`)?.properties.find(e=>e.label===`component`&&e.values[0]?.content===`sidebar`)?.properties??[],n=t.find(e=>e.label===`layout`);n&&(l=n.values[0].content);let r=t.find(e=>e.label===`layout-mobile`);r&&(u=r.values[0].content);let i=e.find(e=>e.label===`presentation`&&e.values[0].content===`css`)?.properties??[];for(let e of i){let t=e.values[0].content;d.push({label:e.label,value:t})}let a=e.find(e=>e.label===`presentation`&&e.values[0].content===`css-mobile`)?.properties??[];for(let e of a){let t=e.values[0].content;f.push({label:e.label,value:t})}let o=e.find(e=>e.label===`presentation`&&e.values[0].content===`title`)?.properties;if(o){let e=x(o,`variant`);e&&(c.variant=e);let t=o.filter(e=>e.label===`display`);t.length>0&&(c.properties.isNameDisplayed=t.some(e=>e.values[0].content===`name`),c.properties.isDescriptionDisplayed=t.some(e=>e.values[0].content===`description`),c.properties.isDateDisplayed=t.some(e=>e.values[0].content===`date`),c.properties.isCreatorsDisplayed=t.some(e=>e.values[0].content===`creators`))}let m=p.resource?Array.isArray(p.resource)?p.resource:[p.resource]:[];for(let e of m){let t=await Q(e);s.push(t)}}s.length>0&&(o={elements:s,title:c,layout:l,mobileLayout:u,cssStyles:d,cssStylesMobile:f});let m=null;if(e.collectionOptions){let t=[];for(let e of a)for(let n of e.items)n.type===`element`&&n.component===`collection`&&t.push(n.collectionId);m={uuids:t,properties:{metadataUuids:e.collectionOptions.metadataUuids.uuid?(Array.isArray(e.collectionOptions.metadataUuids.uuid)?e.collectionOptions.metadataUuids.uuid:[e.collectionOptions.metadataUuids.uuid]).map(e=>e.content):[],searchUuids:e.collectionOptions.searchUuids.uuid?(Array.isArray(e.collectionOptions.searchUuids.uuid)?e.collectionOptions.searchUuids.uuid:[e.collectionOptions.searchUuids.uuid]).map(e=>e.content):[],labelUuids:e.collectionOptions.labelUuids.uuid?(Array.isArray(e.collectionOptions.labelUuids.uuid)?e.collectionOptions.labelUuids.uuid:[e.collectionOptions.labelUuids.uuid]).map(e=>e.content):[]}}}return{uuid:e.uuid,publicationDateTime:e.publicationDateTime?new Date(e.publicationDateTime):null,identification:M(e.identification),project:{name:O(t),website:n===null?null:O(n)},creators:e.creators?I(Array.isArray(e.creators.creator)?e.creators.creator:[e.creators.creator]):[],license:F(e.availability),pages:a,sidebar:o,properties:r,collectionOptions:m}}
|
|
521
521
|
/**
|
|
522
522
|
* Fetches and parses a gallery from the OCHRE API
|
|
523
523
|
*
|
|
@@ -544,7 +544,7 @@ function we(e){let t=W(e),n=t.find(e=>e.label===`presentation`)?.properties;if(!
|
|
|
544
544
|
* - Project identification
|
|
545
545
|
* - Resources (gallery items)
|
|
546
546
|
*/
|
|
547
|
-
async function
|
|
547
|
+
async function Te(e,t,n,r){try{let{uuid:i,filter:a,page:o,perPage:s}=m.parse({uuid:e,filter:t,page:n,perPage:r}),c=await fetch(`https://ochre.lib.uchicago.edu/ochre?xquery=${encodeURIComponent(`
|
|
548
548
|
for $q in input()/ochre[@uuid='${i}']
|
|
549
549
|
let $filtered := $q//items/resource[contains(lower-case(identification/label), lower-case('${a}'))]
|
|
550
550
|
let $maxLength := count($filtered)
|
|
@@ -553,7 +553,7 @@ async function Ee(e,t,n,r){try{let{uuid:i,filter:a,page:o,perPage:s}=h.parse({uu
|
|
|
553
553
|
{$q/metadata/item}
|
|
554
554
|
{$filtered[position() >= ${((o-1)*s+1).toString()} and position() < ${(o*s+1).toString()}]}
|
|
555
555
|
</gallery>
|
|
556
|
-
`)}&format=json`);if(!c.ok)throw Error(`Error fetching gallery items, please try again later.`);let l=await c.json();if(!(`gallery`in l.result))throw Error(`Failed to fetch gallery`);let u=M(l.result.gallery.item.identification),d=M(l.result.gallery.project.identification),f={identification:u,projectIdentification:d,resources:
|
|
556
|
+
`)}&format=json`);if(!c.ok)throw Error(`Error fetching gallery items, please try again later.`);let l=await c.json();if(!(`gallery`in l.result))throw Error(`Failed to fetch gallery`);let u=M(l.result.gallery.item.identification),d=M(l.result.gallery.project.identification),f={identification:u,projectIdentification:d,resources:X(l.result.gallery.resource?Array.isArray(l.result.gallery.resource)?l.result.gallery.resource:[l.result.gallery.resource]:[]),maxLength:l.result.gallery.maxLength};return{item:f,error:null}}catch(e){return console.error(e),{item:null,error:e instanceof Error?e.message:`Failed to fetch gallery`}}}
|
|
557
557
|
/**
|
|
558
558
|
* Fetches and parses a website configuration from the OCHRE API
|
|
559
559
|
*
|
|
@@ -583,4 +583,4 @@ async function Ee(e,t,n,r){try{let{uuid:i,filter:a,page:o,perPage:s}=h.parse({uu
|
|
|
583
583
|
*
|
|
584
584
|
* The abbreviation is case-insensitive and should match the website's configured abbreviation in OCHRE.
|
|
585
585
|
*/
|
|
586
|
-
async function
|
|
586
|
+
async function Ee(e){try{let t=await fetch(`https://ochre.lib.uchicago.edu/ochre?xquery=for $q in input()/ochre[tree[@type='lesson'][identification/abbreviation='${e.toLocaleLowerCase(`en-US`)}']] return $q&format=json`);if(!t.ok)throw Error(`Failed to fetch website`);let n=await t.json();if(!(`ochre`in n.result)||!(`tree`in n.result.ochre))throw Error(`Failed to fetch website`);let r=n.result.ochre.metadata.project?.identification?M(n.result.ochre.metadata.project.identification):null,i=await we(n.result.ochre.tree,r?.label??``,n.result.ochre.metadata.project?.identification.website??null);return i}catch(e){return console.error(e),null}}exports.fetchGallery=Te,exports.fetchItem=ne,exports.fetchWebsite=Ee,exports.filterProperties=C,exports.getPropertyByLabel=y,exports.getPropertyValueByLabel=x,exports.getPropertyValuesByLabel=b,exports.getUniqueProperties=S;
|