magis-core
Version:
Media Asset Graph Information Service core module.
18 lines (17 loc) • 25.4 kB
JavaScript
/*
* magis-core 1.5.16
* Copyright 2021 Q-field
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
;function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function t(t){for(var o=1;o<arguments.length;o++){var c=null!=arguments[o]?arguments[o]:{};o%2?e(Object(c),!0).forEach((function(e){n(t,e,c[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(c)):e(Object(c)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(c,e))}))}return t}function n(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const o={},c=module.exports,r=require("rdfs");o.IRI_OWL="http://www.w3.org/2002/07/owl#",o.IRI_OWL_SAMEAS=o.IRI_OWL+"sameAs",o.IRI_SKOS="http://www.w3.org/2004/02/skos/core#",o.IRI_SKOS_CONCEPT=o.IRI_SKOS+"Concept",o.IRI_SKOS_PREF_LABEL=o.IRI_SKOS+"prefLabel",o.IRI_SKOS_BROADER=o.IRI_SKOS+"broader",o.IRI_SKOS_NARROWER=o.IRI_SKOS+"narrower",o.IRI_SKOS_BROADER_TRANSITIVE=o.IRI_SKOS+"broaderTransitive",o.IRI_SKOS_NARROWER_TRANSITIVE=o.IRI_SKOS+"narrowerTransitive",o.IRI_SCHEMA_ORG="http://schema.org/",o.IRI_SCHEMA_ORG_MEDIA_OBJECT=o.IRI_SCHEMA_ORG+"MediaObject",o.IRI_SCHEMA_ORG_ABOUT=o.IRI_SCHEMA_ORG+"about",o.IRI_SCHEMA_ORG_CONTENT_URL=o.IRI_SCHEMA_ORG+"contentUrl",o.IRI_MAGIS_LOCAL="http://magis.qfield.net/ns/local/",c.LinkedTag=function(e){const t=this,n=e,c=function(){return new r.Model(o.IRI_MAGIS_LOCAL,{rdf:r.IRI_RDF,rdfs:r.IRI_RDFS,xsd:r.IRI_XSD,owl:o.IRI_OWL,skos:o.IRI_SKOS})},s=function(e){let t;return t=!0===Array.isArray(e)||e.constructor===Set?e:void 0===e.model||void 0===e.size?[e]:e,t},I=function(e,t,n,c){const r={};let s,I,i,R;if(t.constructor===String)s=t;else if(void 0===t.model)s=t.prefLabel,I=t.IRI;else{void 0===t.size||(t=t.get()),s=t.get("skos:prefLabel").get();const e=t.get("owl:sameAs");I=void 0===e?t.IRI:e.get()}if(n.constructor===String)i=n;else if(void 0===n.model)i=n.prefLabel,R=n.IRI;else{void 0===n.size||(n=n.get()),i=n.get("skos:prefLabel").get();const e=n.get("owl:sameAs");R=void 0===e?n.IRI:e.get()}let _="MATCH ";_+=`(subject:\`${o.IRI_SKOS_CONCEPT}\` { `,void 0===I||(_+=`\`${o.IRI_OWL_SAMEAS}\`: $subjectIRI, `,r.subjectIRI=I),void 0===s||(_+=`\`${o.IRI_SKOS_PREF_LABEL}\`: $subjectPrefLabel `,r.subjectPrefLabel=s),_+="}), ",_+=`(object:\`${o.IRI_SKOS_CONCEPT}\` { `,void 0===R||(_+=`\`${o.IRI_OWL_SAMEAS}\`: $objectIRI, `,r.objectIRI=R),void 0===i||(_+=`\`${o.IRI_SKOS_PREF_LABEL}\`: $objectPrefLabel `,r.objectPrefLabel=i),_+=`}) MERGE (subject)-[:\`${c}\`]->(object);`,e.run(_,r)},i=function(e,t,n,c){const r={};let s,I,i,R;if(t.constructor===String)s=t;else if(void 0===t.model)s=t.prefLabel,I=t.IRI;else{void 0===t.size||(t=t.get()),s=t.get("skos:prefLabel").get();const e=t.get("owl:sameAs");I=void 0===e?t.IRI:e.get()}if(n.constructor===String)i=n;else if(void 0===n.model)i=n.prefLabel,R=n.IRI;else{void 0===n.size||(n=n.get()),i=n.get("skos:prefLabel").get();const e=n.get("owl:sameAs");R=void 0===e?n.IRI:e.get()}let _="MATCH ";_+=`(subject:\`${o.IRI_SKOS_CONCEPT}\` { `,void 0===I||(_+=`\`${o.IRI_OWL_SAMEAS}\`: $subjectIRI, `,r.subjectIRI=I),void 0===s||(_+=`\`${o.IRI_SKOS_PREF_LABEL}\`: $subjectPrefLabel `,r.subjectPrefLabel=s),_+="})",_+=`-[predicate:\`${c}\`]->`,_+=`(object:\`${o.IRI_SKOS_CONCEPT}\` { `,void 0===R||(_+=`\`${o.IRI_OWL_SAMEAS}\`: $objectIRI, `,r.objectIRI=R),void 0===i||(_+=`\`${o.IRI_SKOS_PREF_LABEL}\`: $objectPrefLabel `,r.objectPrefLabel=i),_+="}) DELETE predicate;",e.run(_,r)},R=function(e,t,n){let c;const s=t.properties[o.IRI_OWL_SAMEAS],I="concept-"+t.identity.toString();return c=void 0===s?n.get(I):e.get(s),void 0===c&&(void 0===s?(c=e.rdfsResource(),n.set(I,c)):c=e.rdfsResource(s),t.labels.forEach((function(t){c.set(r.IRI_RDF_TYPE,e.rdfsClass(t))})),Object.keys(t.properties).forEach((function(n){const r=t.properties[n];n===o.IRI_OWL_SAMEAS||(n===o.IRI_SKOS_PREF_LABEL?c.set(n,r):c.set(n,e.rdfsResource(r)))}))),c},_=function(e,n,c,r,s){const I=s.IRI,i=s.get(o.IRI_SKOS_PREF_LABEL).get();t.addConcept(i,I,e),t.attachBroaderConcept({IRI:c,prefLabel:r},{IRI:I,prefLabel:i},n,e)},E=function(e,t,n){const o=[e];let c,r=0,s=0;void 0===n||(n.order&&(c="DESC"===String(n.order).toUpperCase()?" DESC":""),r=n.skip,!1===isNaN(r)?(r=Math.round(r),c||(c="")):r=0,s=n.limit,s=!1===isNaN(s)?Math.round(s):0),void 0===c||o.push(`ORDER BY ${t}${c}`),r>0&&o.push("SKIP "+r),s>0&&o.push("LIMIT "+s);return o.join("\n")+";"};function S(e,t,n){if(!1===t.has(n)){const o=n["rdf:type"];!0===Array.isArray(o)&&(o.length>1&&(n["rdf:type"]=o.filter((function(t){return!1===e.has(t["@id"])}))),0===o.length&&delete n["rdf:type"]),t.add(n),Object.getOwnPropertyNames(n).forEach(o=>{const c=n[o];if("owl:sameAs"===o)delete n[o];else if(!0===Array.isArray(c))c.forEach(n=>{!1===(void 0!==n["rdf:type"])||S(e,t,n)});else{!1===(void 0!==c["rdf:type"])||S(e,t,c)}})}}t.initialize=function(){const e=["DROP INDEX indexOfPrefLabel IF EXISTS","DROP INDEX indexOfSameAs IF EXISTS",`CREATE CONSTRAINT uniquePrefLabel\nIF NOT EXISTS ON (concept:\`${o.IRI_SKOS_CONCEPT}\`) ASSERT concept.\`${o.IRI_SKOS_PREF_LABEL}\` IS UNIQUE`,`CREATE INDEX indexOfPrefLabel\nIF NOT EXISTS FOR (concept:\`${o.IRI_SKOS_CONCEPT}\`) ON (concept.\`${o.IRI_SKOS_PREF_LABEL}\`)`,`CREATE CONSTRAINT uniqueSameAs\nIF NOT EXISTS ON (concept:\`${o.IRI_SKOS_CONCEPT}\`) ASSERT concept.\`${o.IRI_OWL_SAMEAS}\` IS UNIQUE`,`CREATE INDEX indexOfSameAs\nIF NOT EXISTS FOR (concept:\`${o.IRI_SKOS_CONCEPT}\`) ON (concept.\`${o.IRI_OWL_SAMEAS}\`)`,"DROP INDEX indexOfContentURL IF EXISTS",`CREATE CONSTRAINT uniqueContentURL\nIF NOT EXISTS ON (media:\`${o.IRI_SCHEMA_ORG_MEDIA_OBJECT}\`) ASSERT media.\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\` IS UNIQUE`,`CREATE INDEX indexOfContentURL\nIF NOT EXISTS FOR (media:\`${o.IRI_SCHEMA_ORG_MEDIA_OBJECT}\`) ON (media.\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\`)`],t=n.beginTransaction();for(const n of e)t.run(n);return t.commit()},t.addConcept=function(e,t,c){let r;const s={};let I;if(t&&t.constructor===String?(I=`MERGE (concept:\`${o.IRI_SKOS_CONCEPT}\` { \`${o.IRI_SKOS_PREF_LABEL}\`: $prefLabel }) ON CREATE SET concept.\`${o.IRI_OWL_SAMEAS}\`=$conceptIRI ON MATCH SET concept.\`${o.IRI_OWL_SAMEAS}\`=$conceptIRI`,s.prefLabel=e,s.conceptIRI=t):(I=`MERGE (concept:\`${o.IRI_SKOS_CONCEPT}\` { \`${o.IRI_SKOS_PREF_LABEL}\`: $prefLabel })`,s.prefLabel=e,c||(c=t)),void 0===c){const e=n.beginTransaction();e.run(I,s),r=e.commit()}else c.run(I,s);return r},t.updateConcept=function(e,t,c){let r;const s={},I=`MATCH (concept:\`${o.IRI_SKOS_CONCEPT}\` {\`${o.IRI_SKOS_PREF_LABEL}\`: $originalPrefLabel})\nSET concept.\`${o.IRI_SKOS_PREF_LABEL}\`=$newPrefLabel`;let i,R;if(void 0===e.model?i=e:(void 0===e.size||(i=e.get()),i=e.get("skos:prefLabel").get()),void 0===t.model?R=t:(void 0===t.size||(R=t.get()),R=t.get("skos:prefLabel").get()),s.originalPrefLabel=i,s.newPrefLabel=R,void 0===c){const e=n.beginTransaction();e.run(I,s),r=e.commit()}else c.run(I,s);return r},t.getTopConcept=function(e){const t=`MATCH (concept:\`http://www.w3.org/2004/02/skos/core#Concept\`)\nWHERE\nNOT (\n(concept)-[:\`${o.IRI_SKOS_BROADER_TRANSITIVE}\`]->()\nOR\n(concept)-[:\`${o.IRI_SKOS_BROADER}\`]->()\n)\nRETURN concept\n`,s=`concept.\`${o.IRI_SKOS_PREF_LABEL}\``,I=E(t,s,e),i=n.run(I);return new Promise((function(e,t){i.then((function(t){const n=c(),o=new Map,s=n.rdfsContainer("concepts");for(const e of t.records){const t=e.get("concept"),c=R(n,t,o);s.set(r.IRI_RDFS_MEMBER,c)}e(s.get(r.IRI_RDFS_MEMBER))}),(function(e){t(e)}))}))},t.getConcept=function(e,t){let I;e=s(e);const i={},_=[];let S=0;for(const t of e){let e;if(void 0===t.model)e=t;else{const n=t.get("owl:sameAs");e=void 0===n?t.IRI:n.get()}if(e){const t="conceptIRI_"+S,n=`MATCH (concept:\`${o.IRI_SKOS_CONCEPT}\` {\`${o.IRI_OWL_SAMEAS}\`: $${t}})\nOPTIONAL MATCH (concept)-[predicate]->(relatedConcept)\nRETURN concept, predicate, relatedConcept\n`;_.push(n),i[t]=e}else{const e=t.get("skos:prefLabel").get(),n="prefLabel_"+S,c=`MATCH (concept:\`${o.IRI_SKOS_CONCEPT}\` {\`${o.IRI_SKOS_PREF_LABEL}\`: $${n}})\nOPTIONAL MATCH (concept)-[predicate]->(relatedConcept)\nRETURN concept, predicate, relatedConcept\n`;_.push(c),i[n]=e}S+=1}if(_.length>0){const e=`concept.\`${o.IRI_SKOS_PREF_LABEL}\``,s=E(_.join("UNION\n"),e,t),S=n.run(s,i);I=new Promise((function(e,t){S.then((function(t){const n=c(),o=new Map,s=n.rdfsContainer("concepts");for(const e of t.records){const t=e.get("concept"),c=e.get("predicate"),I=e.get("relatedConcept"),i=R(n,t,o);if(s.set(r.IRI_RDFS_MEMBER,i),null===I);else{const e=c.type,t=R(n,I,o);i.set(e,t)}}e(s.get(r.IRI_RDFS_MEMBER))}),(function(e){t(e)}))}))}else I=new Promise((function(e){e()}));return I},t.findConcept=function(e,t){let I;e=s(e);const i={},_=[];let S=0;for(const t of e){const e="prefLabel_"+S;let n;if(n=void 0===t.model?t:t.get("skos:prefLabel").get(),n.constructor===RegExp){const t=`MATCH (concept:\`${o.IRI_SKOS_CONCEPT}\`)\nWHERE concept.\`${o.IRI_SKOS_PREF_LABEL}\`=~$${e}\nOPTIONAL MATCH (concept)-[predicate]->(relatedConcept)\nRETURN concept, predicate, relatedConcept\n`;_.push(t);const c=n.source,r=[];!1===n.ignoreCase||r.push("i"),!1===n.multiline||r.push("m"),!1===n.dotAll||r.push("s"),r.length>0?i[e]=`(?${r.join("")})${c}`:i[e]=c}else{const t=`MATCH (concept:\`${o.IRI_SKOS_CONCEPT}\` {\`${o.IRI_SKOS_PREF_LABEL}\`: $${e}})\nOPTIONAL MATCH (concept)-[predicate]->(relatedConcept)\nRETURN concept, predicate, relatedConcept\n`;_.push(t),i[e]=n}S+=1}if(_.length>0){const e=`concept.\`${o.IRI_SKOS_PREF_LABEL}\``,s=E(_.join("UNION\n"),e,t),S=n.run(s,i);I=new Promise((function(e,t){S.then((function(t){const n=c(),o=new Map,s=n.rdfsContainer("concepts");for(const e of t.records){const t=e.get("concept"),c=e.get("predicate"),I=e.get("relatedConcept"),i=R(n,t,o);if(s.set(r.IRI_RDFS_MEMBER,i),null===I);else{const e=c.type,t=R(n,I,o);i.set(e,t)}}e(s.get(r.IRI_RDFS_MEMBER))}),(function(e){t(e)}))}))}else I=new Promise((function(e){e()}));return I},t.removeConcept=function(e,t){let c;e=s(e);const r={},I=[];for(const t of e){let e;e=void 0===t.model?t:t.get("skos:prefLabel").get(),I.push(e)}if(I.length>0){r.prefLabels=I;const e=`MATCH (concept:\`${o.IRI_SKOS_CONCEPT}\`)\nWHERE concept.\`${o.IRI_SKOS_PREF_LABEL}\` IN $prefLabels\nDETACH DELETE concept;`;if(void 0===t){const t=n.beginTransaction();t.run(e,r),c=t.commit()}else t.run(e,r)}else void 0===t&&(c=new Promise((function(e){e()})));return c},t.removeAllConcepts=function(e,t){let c,r;if(e?t||e.run&&(t=e):e={},r=!1===e.withMediaLinked?`MATCH (concept:\`${o.IRI_SKOS_CONCEPT}\`) WHERE NOT ((:\`${o.IRI_SCHEMA_ORG_MEDIA_OBJECT}\`)--(concept)) DETACH DELETE concept;`:`MATCH (concept:\`${o.IRI_SKOS_CONCEPT}\`) DETACH DELETE concept;`,void 0===t){const e=n.beginTransaction();e.run(r),c=e.commit()}else t.run(r);return c},t.attachBroaderConcept=function(e,t,c,r){let s;if(void 0===r){const r=n.beginTransaction();!1===c?(I(r,e,t,o.IRI_SKOS_BROADER),I(r,t,e,o.IRI_SKOS_NARROWER)):(I(r,e,t,o.IRI_SKOS_BROADER_TRANSITIVE),I(r,t,e,o.IRI_SKOS_NARROWER_TRANSITIVE)),s=r.commit()}else!1===c?(I(r,e,t,o.IRI_SKOS_BROADER),I(r,t,e,o.IRI_SKOS_NARROWER)):(I(r,e,t,o.IRI_SKOS_BROADER_TRANSITIVE),I(r,t,e,o.IRI_SKOS_NARROWER_TRANSITIVE));return s},t.detachBroaderConcept=function(e,t,c,r){let s;if(void 0===r){const r=n.beginTransaction();!1===c?(i(r,e,t,o.IRI_SKOS_BROADER),i(r,t,e,o.IRI_SKOS_NARROWER)):(i(r,e,t,o.IRI_SKOS_BROADER_TRANSITIVE),i(r,t,e,o.IRI_SKOS_NARROWER_TRANSITIVE)),s=r.commit()}else!1===c?(i(r,e,t,o.IRI_SKOS_BROADER),i(r,t,e,o.IRI_SKOS_NARROWER)):(i(r,e,t,o.IRI_SKOS_BROADER_TRANSITIVE),i(r,t,e,o.IRI_SKOS_NARROWER_TRANSITIVE));return s},t.load=function(e){return new Promise((function(s,I){const i=c();i.rdfsClass(o.IRI_SKOS_CONCEPT),i.load(e,(function(e,c){if(null===e){const e=c.get(r.IRI_RDFS_MEMBER);if(void 0===e)s();else try{const c=n.beginTransaction();for(const n of e)if(!1===n.has(r.IRI_RDF_TYPE,i.defineClass(o.IRI_SKOS_CONCEPT)));else{const e=n.IRI,r=n.get(o.IRI_SKOS_PREF_LABEL).get();t.addConcept(r,e,c);let s=n.get(o.IRI_SKOS_BROADER);void 0===s||s.forEach(_.bind(t,c,!1,e,r)),s=n.get(o.IRI_SKOS_BROADER_TRANSITIVE),void 0===s||s.forEach(_.bind(t,c,!0,e,r))}c.commit().then((function(){s()}),(function(e){I(e)}))}catch(e){I(e)}}else I(e)}))}))},t.save=function(e){void 0===e&&(e={}),void 0===e.excludes&&(e.excludes={}),void 0===e.excludes.property&&(e.excludes.property=[]);return new Promise((function(r,s){const I=c();let i=`MATCH (subject:\`${o.IRI_SKOS_CONCEPT}\`)\nOPTIONAL MATCH (subject)-[predicate]->(object:\`${o.IRI_SKOS_CONCEPT}\`)\n`;const _=[];for(const t of e.excludes.property){const e=`"${I.expandIRI(t)}"`;_.push(e)}_.length>0&&(i+="WHERE\nNOT type(predicate) IN [\n"+_.join(",")+"]\n"),i+="RETURN subject, predicate, object;";n.run(i).then((function(e){const n=new Map;for(const t of e.records){const e=t.get("subject"),o=t.get("object"),c=R(I,e,n);if(null===o);else{const e=t.get("predicate").type,r=R(I,o,n);c.set(e,r)}}I.save({exclude:["built-in",function(e){const t=e.IRI;return void 0!==t&&(t.startsWith(o.IRI_OWL)||t.startsWith(o.IRI_SKOS))}]}).then((function(e){const n=new Set(["rdfs:Resource"]),o=new Set,c=e["@graph"];void 0===c?S(n,o,e):c.forEach(S.bind(t,n,o)),r(e)}),(function(e){s(e)}))}),(function(e){s(e)}))}))}},c.MediaGraph=function(e,n){const c=this,s=e,I=t({},n);void 0===I.variables?"object"==typeof process?I.variables=process.env:I.variables={}:"object"==typeof process&&(I.variables=t(t({},process.env),I.variables));const i=function(){return new r.Model(o.IRI_MAGIS_LOCAL,{rdf:r.IRI_RDF,rdfs:r.IRI_RDFS,xsd:r.IRI_XSD,owl:o.IRI_OWL,skos:o.IRI_SKOS,schema:o.IRI_SCHEMA_ORG})},R=function(e){let t;return t=!0===Array.isArray(e)||e.constructor===Set?e:void 0===e.model||void 0===e.size?[e]:e,t},_=function(e){if(void 0===e.model);else{const t=e,n=t.get("owl:sameAs");e=void 0===n?t.get("schema:contentUrl").get():n.get()}return new URL(e)},E=function(e){Object.getOwnPropertyNames(I.variables).forEach(t=>{const n=new RegExp("([^\\$])\\$"+t,"gi"),o=I.variables[t].replace(new RegExp("\\$","g"),"$$$$$$$$");e=e.replace(n,"$1"+o)});return e.replace(new RegExp("\\$\\$","g"),"$")},S=function(e,t,n,c){let r=e;for(const e of t){let t,s;e.constructor===String?t=e:void 0===e.model?(t=e.prefLabel,s=e.IRI):(t=e.get("skos:prefLabel").get(),s=e.IRI);const I="conceptIRI_"+r,i="prefLabel_"+r,R=[];void 0===s||(R.push(`\`${o.IRI_OWL_SAMEAS}\`: $${I}`),n[I]=s),void 0===t||(R.push(`\`${o.IRI_SKOS_PREF_LABEL}\`: $${i}`),n[i]=t);c(`\`${o.IRI_SKOS_CONCEPT}\` {\n`+R.join(",\n")+"\n}"),r+=1}return r},O=function(e,t,n){let c;const s=t.properties[o.IRI_OWL_SAMEAS],I="concept-"+t.identity.toString();return c=void 0===s?n.get(I):e.get(s),void 0===c&&(void 0===s?(c=e.rdfsResource(),n.set(I,c)):c=e.rdfsResource(s),t.labels.forEach((function(t){c.set(r.IRI_RDF_TYPE,e.rdfsClass(t))})),Object.keys(t.properties).forEach((function(n){const r=t.properties[n];n===o.IRI_OWL_SAMEAS||(n===o.IRI_SKOS_PREF_LABEL?c.set(n,r):c.set(n,e.rdfsResource(r)))}))),c},a=function(e,t,n){const o=[e];let c,r=0,s=0;void 0===n||(n.order&&(c="DESC"===String(n.order).toUpperCase()?" DESC":""),r=n.skip,!1===isNaN(r)?(r=Math.round(r),c||(c="")):r=0,s=n.limit,s=!1===isNaN(s)?Math.round(s):0),void 0===c||o.push(`ORDER BY ${t}${c}`),r>0&&o.push("SKIP "+r),s>0&&o.push("LIMIT "+s);return o.join("\n")+";"};c.addMedia=function(e,t,n){let c;e=R(e);const r=[];for(const t of e){const e=_(t),n=`MERGE (:\`${o.IRI_SCHEMA_ORG_MEDIA_OBJECT}\` {\n\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\`: $contentUrl\n})\n`;r.push({body:n,parameters:{contentUrl:e.href}})}if(void 0===n){const n=s.beginTransaction();for(const e of r)n.run(e.body,e.parameters);void 0===t||(t=R(t),f(e,t,n)),c=n.commit()}else{for(const e of r)n.run(e.body,e.parameters);void 0===t||(t=R(t),f(e,t,n))}return c};const f=function(e,t,n){let c;const r={},I=[];let i=0;for(const n of e){const e=_(n),c="contentUrl_"+i;r[c]=e.href;const s="concept";S(0,t,r,e=>{const t=`MATCH (media:\`${o.IRI_SCHEMA_ORG_MEDIA_OBJECT}\` {\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\`: $${c}}),(${s}:${e})\nRETURN media, ${s}\n`;I.push(t)}),i+=1}if(I.length>0){const e=`CALL {\n${I.join("UNION\n")}}\nMERGE (media)-[:\`${o.IRI_SCHEMA_ORG_ABOUT}\`]->(concept);`;if(void 0===n){const t=s.beginTransaction();t.run(e,r),c=t.commit()}else n.run(e,r)}else void 0===n&&(c=new Promise((function(e){e()})));return c};function l(e,t,n){if(!1===t.has(n)){const o=n["rdf:type"];!0===Array.isArray(o)&&(o.length>1&&(n["rdf:type"]=o.filter((function(t){return!1===e.has(t["@id"])}))),0===o.length&&delete n["rdf:type"]),t.add(n),Object.getOwnPropertyNames(n).forEach(o=>{const c=n[o];if("owl:sameAs"===o)delete n[o];else if(!0===Array.isArray(c))c.forEach(n=>{!1===(void 0!==n["rdf:type"])||l(e,t,n)});else{!1===(void 0!==c["rdf:type"])||l(e,t,c)}})}}c.tagMedia=function(e,t,n){e=R(e),t=R(t);return f(e,t,n)},c.removeMedia=function(e,t){let n;e=R(e);const c={},r=[];let I=0;for(const t of e){const e=_(t),n="contentUrl_"+I;let s=`MATCH (media:\`${o.IRI_SCHEMA_ORG_MEDIA_OBJECT}\`)\nWHERE\nmedia.\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\`=$${n}\n`;c[n]=e.href;const i=`${e.protocol}//${e.pathname}`;if(e.href===i){const e="contentUrlSearch_"+I,t="contentUrlHash_"+I;s+=`OR media.\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\` STARTS WITH $${e}\nOR media.\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\` STARTS WITH $${t}\n`,c[e]=i+"?",c[t]=i+"#"}s+="RETURN media\n",r.push(s),I+=1}if(r.length>0){const e=`CALL {\n${r.join("UNION\n")}}\nDETACH DELETE media;`;if(void 0===t){const t=s.beginTransaction();t.run(e,c),n=t.commit()}else t.run(e,c)}else void 0===t&&(n=new Promise((function(e){e()})));return n},c.untagMedia=function(e,t,n){let c;e=R(e),t=R(t);const r={},I=[];let i=0;for(const n of e){const e=_(n),c="contentUrl_"+i,s=`${e.protocol}//${e.pathname}`;if(e.href===s){const e="contentUrlSearch_"+i,n="contentUrlHash_"+i;S(0,t,r,t=>{const r=`MATCH (media:\`${o.IRI_SCHEMA_ORG_MEDIA_OBJECT}\`)-[about:\`${o.IRI_SCHEMA_ORG_ABOUT}\`]->(:${t})\nWHERE\nmedia.\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\`=$${c}\nOR media.\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\` STARTS WITH $${e}\nOR media.\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\` STARTS WITH $${n}\nRETURN about\n`;I.push(r)}),r[c]=s,r[e]=s+"?",r[n]=s+"#"}else S(0,t,r,e=>{let t=`MATCH (media:\`${o.IRI_SCHEMA_ORG_MEDIA_OBJECT}\`)-[about:\`${o.IRI_SCHEMA_ORG_ABOUT}\`]->(:${e})\nWHERE\nmedia.\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\`=$${c}\nRETURN about\n`;I.push(t)}),r[c]=e.href;i+=1}if(I.length>0){const e=`CALL {\n${I.join("UNION\n")}}\nDELETE about;`;if(void 0===n){const t=s.beginTransaction();t.run(e,r),c=t.commit()}else n.run(e,r)}else void 0===n&&(c=new Promise((function(e){e()})));return c},c.removeAllMedia=function(e){let t;const n=`MATCH (media:\`${o.IRI_SCHEMA_ORG_MEDIA_OBJECT}\`) DETACH DELETE media;`;if(void 0===e){const e=s.beginTransaction();e.run(n),t=e.commit()}else e.run(n);return t},c.relocateMedia=function(e,t,n){let c;const r={},I=`MATCH (media:\`${o.IRI_SCHEMA_ORG_MEDIA_OBJECT}\` {\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\`: $originalContentUrl})\nSET media.\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\`=$newContentUrl`,i=_(e),R=_(t);if(r.originalContentUrl=i.href,r.newContentUrl=R.href,void 0===n){const e=s.beginTransaction();e.run(I,r),c=e.commit()}else n.run(I,r);return c},c.getMedia=function(e,t){let n,c,I;void 0===t?(c=!1,I=!0):(c=!0===t.expandProperty,I=!1!==t.withParts),e=R(e);const S={},f=[];let l=0;for(const t of e){const e="contentUrl_"+l;let n=`MATCH (media:\`${o.IRI_SCHEMA_ORG_MEDIA_OBJECT}\`)\nWHERE\n`;if(t.constructor===RegExp){n+=`media.\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\`=~$${e}\n`;const c=t.source,r=[];!1===t.ignoreCase||r.push("i"),!1===t.multiline||r.push("m"),!1===t.dotAll||r.push("s"),r.length>0?S[e]=`(?${r.join("")})${c}`:S[e]=c}else{const c=_(t);if(n+=`media.\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\`=$${e}\n`,S[e]=c.href,!1===I);else{const e=`${c.protocol}//${c.pathname}`;if(c.href===e){const t="contentUrlSearch_"+l,c="contentUrlHash_"+l;n+=`OR media.\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\` STARTS WITH $${t}\nOR media.\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\` STARTS WITH $${c}\n`,S[t]=e+"?",S[c]=e+"#"}}}n+=`OPTIONAL MATCH (media)-[:\`${o.IRI_SCHEMA_ORG_ABOUT}\`]->(tag:\`${o.IRI_SKOS_CONCEPT}\`)\nRETURN media, tag\n`,f.push(n),l+=1}if(f.length>0){const e=`media.\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\``,I=a(f.join("UNION\n"),e,t),R=s.run(I,S);n=new Promise((function(e,t){R.then((function(t){const n=i(),s=new Map,I=n.rdfsContainer("media"),R=new Map;for(const e of t.records){const t=e.get("media"),i=t.identity.toString();let _=R.get(i);if(void 0===_){_=n.rdfsResource(),R.set(i,_),t.labels.forEach((function(e){_.set(r.IRI_RDF_TYPE,n.rdfsClass(e))}));const e=t.properties[o.IRI_SCHEMA_ORG_CONTENT_URL];void 0===e||_.set("owl:sameAs",e),!1===c?Object.keys(t.properties).forEach((function(e){const n=t.properties[e];_.set(e,n)})):Object.keys(t.properties).forEach((function(e){let n=t.properties[e];e===o.IRI_OWL_SAMEAS||(n=E(n)),_.set(e,n)})),I.set(r.IRI_RDFS_MEMBER,_)}const S=e.get("tag");if(null===S);else{const e=O(n,S,s);_.set(o.IRI_SCHEMA_ORG_ABOUT,e)}}e(I.get(r.IRI_RDFS_MEMBER))}),(function(e){t(e)}))}))}else n=new Promise((function(e){e()}));return n},c.findMedia=function(e,t){let n,c;c=void 0!==t&&!0===t.expandProperty,e=R(e);const I={},_=[],O=[];if(S(0,e,I,e=>{const t=`MATCH (concept:${e})\nOPTIONAL MATCH (media_1)\n-[:\`${o.IRI_SCHEMA_ORG_ABOUT}\`]->\n(:\`${o.IRI_SKOS_CONCEPT}\`)\n-[:\`${o.IRI_SKOS_BROADER}\`]->\n(concept)\nOPTIONAL MATCH (media_2)\n-[:\`${o.IRI_SCHEMA_ORG_ABOUT}\`]->\n(:\`${o.IRI_SKOS_CONCEPT}\`)\n-[:\`${o.IRI_SKOS_BROADER_TRANSITIVE}\`*0..]->\n(concept)\nWITH collect(media_1) AS collection_1, collect(media_2) AS collection_2\nUNWIND collection_1 + collection_2 AS media\nRETURN media\n`;_.push(t);const n=`(media)-[:\`${o.IRI_SCHEMA_ORG_ABOUT}\`|\`${o.IRI_SKOS_BROADER}\`|\`${o.IRI_SKOS_BROADER_TRANSITIVE}\`*]->(:${e})`;O.push(n)}),_.length>0){const e="CALL {\n"+_.join("UNION\n")+"}\nWITH media\nWHERE \n"+O.join(" AND ")+"\nRETURN DISTINCT media\n",R=`media.\`${o.IRI_SCHEMA_ORG_CONTENT_URL}\``,S=a(e,R,t),f=s.run(S,I);n=new Promise((function(e,t){f.then((function(t){const n=i(),s=n.rdfsContainer("media");t.records.forEach((function(e){const t=e.get("media"),I=n.rdfsResource();s.set(r.IRI_RDFS_MEMBER,I),t.labels.forEach((function(e){I.set(r.IRI_RDF_TYPE,n.rdfsClass(e))}));const i=t.properties[o.IRI_SCHEMA_ORG_CONTENT_URL];void 0===i||I.set("owl:sameAs",i),!1===c?Object.keys(t.properties).forEach((function(e){const n=t.properties[e];I.set(e,n)})):Object.keys(t.properties).forEach((function(e){let n=t.properties[e];e===o.IRI_OWL_SAMEAS||(n=E(n)),I.set(e,n)}))})),e(s.get(r.IRI_RDFS_MEMBER))}),(function(e){t(e)}))}))}else n=new Promise((function(e){e()}));return n},c.load=function(e){return new Promise((function(t,n){const I=i();I.rdfsClass(o.IRI_SCHEMA_ORG_MEDIA_OBJECT),I.load(e,(function(e,i){if(null===e){const e=i.get(r.IRI_RDFS_MEMBER);if(void 0===e)t();else{const i=s.beginTransaction();e.forEach((function(e){if(!1===e.has(r.IRI_RDF_TYPE,I.defineClass(o.IRI_SCHEMA_ORG_MEDIA_OBJECT)));else{const t=e.get(o.IRI_SCHEMA_ORG_CONTENT_URL).get(),n=e.get(o.IRI_SCHEMA_ORG_ABOUT),r=[];void 0===n||n.forEach(e=>{const t=e.get(o.IRI_SKOS_PREF_LABEL).get();void 0===t||r.push(t)}),c.addMedia(t,r,i)}})),i.commit().then((function(){t()}),(function(e){n(e)}))}}else n(e)}))}))},c.save=function(e){let t;t=void 0!==e&&!0===e.expandProperty;return new Promise((function(e,n){const I=`MATCH (media:\`${o.IRI_SCHEMA_ORG_MEDIA_OBJECT}\`)\nOPTIONAL MATCH (media)-[:\`${o.IRI_SCHEMA_ORG_ABOUT}\`]->(tag:\`${o.IRI_SKOS_CONCEPT}\`)\nRETURN media, tag;`;s.run(I).then((function(s){const I=i(),R=new Map;s.records.forEach((function(e){const n=e.get("media"),c=n.identity.toString();let s=R.get(c);if(void 0===s)if(s=I.rdfsResource(),R.set(c,s),n.labels.forEach((function(e){s.set(r.IRI_RDF_TYPE,I.rdfsClass(e))})),!1===t)Object.keys(n.properties).forEach((function(e){const t=n.properties[e];s.set(e,t)}));else{const e=n.properties[o.IRI_SCHEMA_ORG_CONTENT_URL];void 0===e||s.set("owl:sameAs",e),Object.keys(n.properties).forEach((function(e){let t=n.properties[e];e===o.IRI_OWL_SAMEAS||(t=E(t)),s.set(e,t)}))}const i=e.get("tag");if(null===i);else{const e=I.rdfsResource();i.labels.forEach((function(t){e.set(r.IRI_RDF_TYPE,I.rdfsClass(t))})),Object.keys(i.properties).forEach((function(t){const n=i.properties[t];e.set(t,n)})),s.set(o.IRI_SCHEMA_ORG_ABOUT,e)}})),I.save({exclude:["built-in",function(e){const t=e.IRI;return void 0!==t&&(t.startsWith(o.IRI_OWL)||t.startsWith(o.IRI_SKOS)||t.startsWith(o.IRI_SCHEMA_ORG))}]}).then((function(t){const n=new Set(["rdfs:Resource","skos:Concept"]),o=new Set,r=t["@graph"];void 0===r?l(n,o,t):r.forEach(l.bind(c,n,o)),e(t)}),(function(e){n(e)}))}),(function(e){n(e)}))}))}};