solid-logic 6.0.1-4 → 6.0.1-5
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/resource/resourceLogic.cjs.js +1 -1
- package/dist/resource/resourceLogic.cjs.js.map +1 -1
- package/dist/resource/resourceLogic.d.ts.map +1 -1
- package/dist/resource/resourceLogic.esm.js +91 -70
- package/dist/resource/resourceLogic.esm.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../util/ns.cjs.js"),t=require("../acl/aclLogic.cjs.js"),n=require("./resourceHttp.cjs.js"),r=require("./resourceMetadata.cjs.js");let i=require("rdflib");function a(a,o,s,c){function l(e){return s.createContainer(e)}function u(e){return s.isContainer(e)}function d(e){return s.getContainerMemberCount(e)}function f(e){return s.getContainerElements(e)}function p(e){let t=e.uri.endsWith(`/`)?e.uri:`${e.uri}/`;return a.sym(`${t}index.ttl#this`)}function m(t){return a.holds(t,e.ns.ldp(`contains`),p(t).doc())}function h(t){return a.holds(t,e.ns.rdf(`type`),e.ns.space(`Storage`),t.doc())}function g(e){let t=e.dir();if(!t)return!1;let n=e.uri.slice(t.uri.length);return n.startsWith(`.`)||n.endsWith(`.acl`)||n.endsWith(`.meta`)||n.endsWith(`~`)}function _(e){let t=typeof e==`string`?e:e.value;try{let e=new URL(t);return e.hash===`#me`&&/\/profile\/card\.ttl$/.test(e.pathname)}catch{return!1}}function
|
|
1
|
+
const e=require("../util/ns.cjs.js"),t=require("../acl/aclLogic.cjs.js"),n=require("./resourceHttp.cjs.js"),r=require("./resourceMetadata.cjs.js");let i=require("rdflib");function a(a,o,s,c){function l(e){return s.createContainer(e)}function u(e){return s.isContainer(e)}function d(e){return s.getContainerMemberCount(e)}function f(e){return s.getContainerElements(e)}function p(e){let t=e.uri.endsWith(`/`)?e.uri:`${e.uri}/`;return a.sym(`${t}index.ttl#this`)}function m(t){return a.holds(t,e.ns.ldp(`contains`),p(t).doc())}function h(t){return a.holds(t,e.ns.rdf(`type`),e.ns.space(`Storage`),t.doc())}function g(e){let t=e.dir();if(!t)return!1;let n=e.uri.slice(t.uri.length);return n.startsWith(`.`)||n.endsWith(`.acl`)||n.endsWith(`.meta`)||n.endsWith(`~`)}function _(e,t){let n=a.findTypeURIs(e),r=t.toLowerCase(),o=i.Util.mediaTypeClass(`${r}/*`).uri.split(`*`)[0];return Object.keys(n).some(e=>e.startsWith(o))||{audio:`http://purl.org/dc/dcmitype/Sound`,image:`http://purl.org/dc/dcmitype/Image`,video:`http://purl.org/dc/dcmitype/MovingImage`}[r]in n?!0:(a.fetcher.getHeader(e,`content-type`)||[]).some(e=>e.split(`;`,1)[0].trim().toLowerCase().startsWith(`${r}/`))}function v(e){return _(e,`image`)}function y(e){return _(e,`audio`)}function b(e){return _(e,`video`)}function x(e){let t=typeof e==`string`?e:e.value;try{let e=new URL(t);return e.hash===`#me`&&/\/profile\/card\.ttl$/.test(e.pathname)}catch{return!1}}function S(n,i){let o,s=!1,c=!1,l=!1,u=!1,d,f;if(i.headers){o=i.headers.get(`content-type`)?.split(`;`)[0]??void 0;let t=r.readWacAccessInfo(i.headers.get(`wac-allow`));s=t.canEdit,c=t.canManageAccess,l=t.isPublic,u=t.isPublicKnown,d=i.headers.get(`etag`)??void 0,f=a.anyValue(n,e.ns.dct(`modified`))||a.anyValue(n,e.ns.dc(`modified`))||void 0}(!i.headers||!i.headers.get(`content-type`))&&(!i.headers||!i.headers.get(`wac-allow`)||!i.headers.get(`etag`))&&a.each(null,a.sym(`http://www.w3.org/2007/ont/link#requestedURI`),n).map(t=>{let i=a.any(t,a.sym(`http://www.w3.org/2007/ont/link#response`));if(i&&i.termType===`NamedNode`){let t=a.anyValue(i,e.ns.httph(`content-type`))||void 0;o===void 0&&(o=t);let p=a.anyValue(i,e.ns.httph(`wac-allow`))||a.anyValue(i,e.ns.httph(`WAC-Allow`)),m=r.readWacAccessInfo(p);s||=m.canEdit,c||=m.canManageAccess,l||=m.isPublic,u||=m.isPublicKnown;let h=a.anyValue(i,e.ns.httph(`etag`))||void 0;d===void 0&&(d=h),f=a.anyValue(n,e.ns.dct(`modified`))||a.anyValue(n,e.ns.dc(`modified`))||void 0}});let p=a.any(n,t.ACL_LINK)?.value||void 0;return{contentType:o,access:{canEdit:s,canManageAccess:c,isPublic:l,isPublicKnown:u},aclUri:p,eTag:d,modified:f}}async function C(e){let t=await a.fetcher.webOperation(`HEAD`,e.uri);return n.assertSuccessfulHttpResponse(t,`HEAD`),S(e,t)}async function w(t){let n=a.any(t,e.ns.ldp(`contains`))||t.dir();if(!n||n.termType!==`NamedNode`)return!1;try{return(await C(n)).access.canEdit}catch{return!1}}async function T(e){return w(e)}async function E(e){return C(e)}async function D(e){try{let t=await a.fetcher.webOperation(`GET`,e.uri);n.assertSuccessfulHttpResponse(t,`GET`);let r=t.responseText;if(r===void 0)throw Error(`No text in response object`);let i=S(e,t);if(!i.contentType)throw Error(`No content-type available`);return{content:r,metadata:i}}catch(e){throw Error(`Error reading file: ${e instanceof Error?e.message:String(e)}`)}}async function O(e){let t;try{t=await C(e)}catch{t={contentType:void 0,access:{canEdit:!1,canManageAccess:!1,isPublic:!1},aclUri:void 0,eTag:void 0,modified:void 0}}let n=await T(e),r={canEdit:t.access?.canEdit??!1,canManageAccess:t.access?.canManageAccess??!1,isPublic:t.access?.isPublic??!1,isPublicKnown:t.access?.isPublicKnown??!1,canDelete:n};return{...t,access:r}}async function k(e,t){if(t)try{await c.deleteTypeIndexRegistrationForResource(e,t)}catch{}}async function A(t,r={}){let o=t.dir();if(u(t)){let e=await s.getContainerMembers(t);await Promise.all(e.map(e=>A((0,i.sym)(e),r)))}let c;try{c=await a.fetcher._fetch(t.value,{method:`DELETE`}),n.assertSuccessfulHttpResponse(c,`DELETE`,{allowNotFound:!0})}catch(e){if(!n.isMissingError(e))throw e}return r.deleteTypeIndexes&&await k(t,r.user),o&&a.removeMatches(o,e.ns.ldp(`contains`),t,o.doc()),a.removeDocument(t),a.fetcher.unload(t.doc()),c}async function j(e,t){await A(e,{deleteTypeIndexes:!0,user:t})}return{recursiveDelete:A,deleteResourceAndTypeIndexIfExists:j,fetchMetadata:E,fetchMetadataWithDelete:O,fetchContentAndMetadata:D,createContainer:l,isContainer:u,getContainerMembers:f,getContainerMemberCount:d,getContainerIndexThing:p,containerHasIndexDocument:m,isStorageRoot:h,isHiddenFile:g,isMediaType:_,isImage:v,isAudio:y,isVideo:b,isWebId:x}}exports.createResourceLogic=a;
|
|
2
2
|
//# sourceMappingURL=resourceLogic.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resourceLogic.cjs.js","names":["ns","readWacAccessInfo","ACL_LINK","sym","isMissingError","require_ns","require_aclLogic","require_resourceHttp","require_resourceMetadata","rdflib","createResourceLogic","createContainer","containerLogic","url","isContainer","resourceNode","getContainerMemberCount","getContainerMembers","getContainerIndexThing","folderUri","containerNode","store","containerHasIndexDocument","isStorageRoot","isHiddenFile","directory","pathEnd","isWebId","uri","resource","parsed","readMetadata","contentType","canEdit","canManageAccess","isPublic","isPublicKnown","eTag","modified","response","accessFlags","subject","responseNode","req","responseContentType","wacAllow","responseETag","aclUri","fetchHeadMetadata","userCanWriteToContainingContainer","userCanDeleteResource","fetchMetadata","fetchContentAndMetadata","content","metadata","error","fetchMetadataWithDelete","resourceMetadata","canDelete","access","deleteTypeIndexesForResource","user","typeIndexLogic","recursiveDelete","resourceParent","containerMembers","options","deleted","deleteResourceAndTypeIndexIfExists"],"sources":["../../src/resource/resourceLogic.ts"],"sourcesContent":["import { NamedNode, sym } from 'rdflib'\nimport { ACL_LINK } from '../acl/aclLogic'\nimport { ns } from '../util/ns'\nimport { assertSuccessfulHttpResponse, isMissingError } from './resourceHttp'\nimport { readWacAccessInfo } from './resourceMetadata'\nimport { type ResourceAccess, type ResourceAccessWithDelete, type ResourceContent, type ResourceDeleteOptions, type ResourceLogic, type ResourceMetadata, type ResourceMetadataWithDelete, type TypeIndexLogic } from '../types'\nimport type { AclLogic } from '../types'\n\nexport function createResourceLogic(store, aclLogic: AclLogic, containerLogic, typeIndexLogic: TypeIndexLogic): ResourceLogic {\n function createContainer(url: string) {\n return containerLogic.createContainer(url)\n }\n\n function isContainer(resourceNode: NamedNode) {\n return containerLogic.isContainer(resourceNode)\n }\n\n function getContainerMemberCount(resourceNode: NamedNode) {\n return containerLogic.getContainerMemberCount(resourceNode)\n }\n\n function getContainerMembers(resourceNode: NamedNode) {\n return containerLogic.getContainerElements(resourceNode)\n }\n\n function getContainerIndexThing(containerNode: NamedNode) {\n const folderUri = containerNode.uri.endsWith('/') ? containerNode.uri : `${containerNode.uri}/`\n return store.sym(`${folderUri}index.ttl#this`)\n }\n\n function containerHasIndexDocument(containerNode: NamedNode) {\n return store.holds(\n containerNode,\n ns.ldp('contains'),\n getContainerIndexThing(containerNode).doc()\n )\n }\n\n function isStorageRoot(resourceNode: NamedNode) {\n return store.holds(\n resourceNode,\n ns.rdf('type'),\n ns.space('Storage'),\n resourceNode.doc()\n )\n }\n\n function isHiddenFile(resourceNode: NamedNode) {\n const directory = resourceNode.dir()\n if (!directory) {\n return false\n }\n\n const pathEnd = resourceNode.uri.slice(directory.uri.length)\n return pathEnd.startsWith('.') || pathEnd.endsWith('.acl') || pathEnd.endsWith('.meta') || pathEnd.endsWith('~')\n }\n\n function isWebId(resource: string | NamedNode) {\n const uri = typeof resource === 'string' ? resource : resource.value\n\n try {\n const parsed = new URL(uri)\n return parsed.hash === '#me' && /\\/profile\\/card\\.ttl$/.test(parsed.pathname)\n } catch (_error) {\n return false\n }\n }\n\n function readMetadata(subject: NamedNode, response: Response): ResourceMetadata {\n let contentType: string | undefined\n let canEdit = false\n let canManageAccess = false\n let isPublic = false\n let isPublicKnown = false\n let eTag: string | undefined\n let modified: string | undefined\n\n if (response.headers) {\n const contentTypeHeader = response.headers.get('content-type')\n contentType = contentTypeHeader?.split(';')[0] ?? undefined\n\n const accessFlags = readWacAccessInfo(response.headers.get('wac-allow'))\n canEdit = accessFlags.canEdit\n canManageAccess = accessFlags.canManageAccess\n isPublic = accessFlags.isPublic\n isPublicKnown = accessFlags.isPublicKnown\n eTag = response.headers.get('etag') ?? undefined\n modified = store.anyValue(subject as any, ns.dct('modified')) || store.anyValue(subject as any, ns.dc('modified')) || undefined\n }\n\n if ((!response.headers || !response.headers.get('content-type')) && (!response.headers || !response.headers.get('wac-allow') || !response.headers.get('etag'))) {\n const reqs = store.each(\n null,\n store.sym('http://www.w3.org/2007/ont/link#requestedURI'),\n subject\n )\n reqs.map((req: any) => {\n const responseNode = store.any(\n req as any,\n store.sym('http://www.w3.org/2007/ont/link#response')\n )\n if (responseNode && responseNode.termType === 'NamedNode') {\n const responseContentType = store.anyValue(responseNode as any, ns.httph('content-type')) || undefined\n if (contentType === undefined) {\n contentType = responseContentType\n }\n const wacAllow = (store.anyValue(responseNode as any, ns.httph('wac-allow')) as string | undefined) ||\n (store.anyValue(responseNode as any, ns.httph('WAC-Allow')) as string | undefined)\n const accessFlags = readWacAccessInfo(wacAllow)\n canEdit = canEdit || accessFlags.canEdit\n canManageAccess = canManageAccess || accessFlags.canManageAccess\n isPublic = isPublic || accessFlags.isPublic\n isPublicKnown = isPublicKnown || accessFlags.isPublicKnown\n const responseETag = store.anyValue(responseNode as any, ns.httph('etag')) || undefined\n if (eTag === undefined) {\n eTag = responseETag\n }\n modified = store.anyValue(subject as any, ns.dct('modified')) || store.anyValue(subject as any, ns.dc('modified')) || undefined\n }\n })\n }\n\n const aclUri = store.any(subject, ACL_LINK)?.value || undefined\n const access: ResourceAccess = { canEdit, canManageAccess, isPublic, isPublicKnown }\n return { contentType, access, aclUri, eTag, modified }\n }\n\n async function fetchHeadMetadata(subject: NamedNode): Promise<ResourceMetadata> {\n const response = await store.fetcher.webOperation('HEAD', subject.uri)\n assertSuccessfulHttpResponse(response, 'HEAD')\n return readMetadata(subject, response)\n }\n\n async function userCanWriteToContainingContainer(resourceNode: NamedNode): Promise<boolean> {\n const containerNode = store.any(resourceNode, ns.ldp('contains')) || resourceNode.dir()\n if (!containerNode || containerNode.termType !== 'NamedNode') {\n return false\n }\n\n try {\n const containerMetadata = await fetchHeadMetadata(containerNode as NamedNode)\n return containerMetadata.access.canEdit\n } catch (_error) {\n return false\n }\n }\n\n async function userCanDeleteResource(resourceNode: NamedNode): Promise<boolean> {\n return userCanWriteToContainingContainer(resourceNode)\n }\n\n async function fetchMetadata(subject: NamedNode): Promise<ResourceMetadata> {\n return fetchHeadMetadata(subject)\n }\n\n async function fetchContentAndMetadata(subject: NamedNode): Promise<ResourceContent> {\n try {\n const response = await store.fetcher.webOperation('GET', subject.uri)\n assertSuccessfulHttpResponse(response, 'GET')\n\n const content = (response as Response & { responseText?: string }).responseText\n if (content === undefined) {\n throw new Error('No text in response object')\n }\n\n const metadata = readMetadata(subject, response)\n if (!metadata.contentType) {\n throw new Error('No content-type available')\n }\n\n return { content, metadata }\n } catch (error) {\n throw new Error(`Error reading file: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n\n async function fetchMetadataWithDelete(subject: NamedNode): Promise<ResourceMetadataWithDelete> {\n let resourceMetadata: ResourceMetadata\n\n try {\n resourceMetadata = await fetchHeadMetadata(subject)\n } catch (_error) {\n resourceMetadata = {\n contentType: undefined,\n access: { canEdit: false, canManageAccess: false, isPublic: false },\n aclUri: undefined,\n eTag: undefined,\n modified: undefined\n }\n }\n\n const canDelete = await userCanDeleteResource(subject)\n const access: ResourceAccessWithDelete = {\n canEdit: resourceMetadata.access?.canEdit ?? false,\n canManageAccess: resourceMetadata.access?.canManageAccess ?? false,\n isPublic: resourceMetadata.access?.isPublic ?? false,\n isPublicKnown: resourceMetadata.access?.isPublicKnown ?? false,\n canDelete\n }\n return { ...resourceMetadata, access }\n }\n\n async function deleteTypeIndexesForResource(resourceNode: NamedNode, user?: NamedNode | null) {\n if (!user) return\n\n try {\n await typeIndexLogic.deleteTypeIndexRegistrationForResource(resourceNode, user)\n } catch (_error) {\n // Keep resource deletion best-effort even if type-index cleanup fails.\n }\n }\n\n async function recursiveDelete(resourceNode: NamedNode, options: ResourceDeleteOptions = {}) {\n const resourceParent = resourceNode.dir()\n\n if (isContainer(resourceNode)) {\n const containerMembers = await containerLogic.getContainerMembers(resourceNode)\n await Promise.all(containerMembers.map((url) => recursiveDelete(sym(url), options)))\n }\n\n let deleted\n try {\n deleted = await store.fetcher._fetch(resourceNode.value, { method: 'DELETE' })\n assertSuccessfulHttpResponse(deleted, 'DELETE', { allowNotFound: true })\n } catch (error) {\n if (!isMissingError(error)) {\n throw error\n }\n }\n\n if (options.deleteTypeIndexes) {\n await deleteTypeIndexesForResource(resourceNode, options.user)\n }\n\n if (resourceParent) {\n store.removeMatches(resourceParent, ns.ldp('contains'), resourceNode, resourceParent.doc())\n }\n\n store.removeDocument(resourceNode)\n store.fetcher.unload(resourceNode.doc())\n return deleted\n }\n\n async function deleteResourceAndTypeIndexIfExists(resourceNode: NamedNode, user?: NamedNode | null) {\n await recursiveDelete(resourceNode, { deleteTypeIndexes: true, user })\n }\n\n return {\n recursiveDelete,\n deleteResourceAndTypeIndexIfExists,\n fetchMetadata,\n fetchMetadataWithDelete,\n fetchContentAndMetadata,\n createContainer,\n isContainer,\n getContainerMembers,\n getContainerMemberCount,\n getContainerIndexThing,\n containerHasIndexDocument,\n isStorageRoot,\n isHiddenFile,\n isWebId\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resourceLogic.cjs.js","names":["ns","Util","readWacAccessInfo","ACL_LINK","sym","isMissingError","require_ns","require_aclLogic","require_resourceHttp","require_resourceMetadata","rdflib","createResourceLogic","createContainer","containerLogic","url","isContainer","resourceNode","getContainerMemberCount","getContainerMembers","getContainerIndexThing","folderUri","containerNode","store","containerHasIndexDocument","isStorageRoot","isHiddenFile","directory","pathEnd","isMediaType","typeURIs","normalizedMediaType","mediaType","mediaTypePrefix","typeURI","contentType","isImage","isAudio","isVideo","isWebId","uri","resource","parsed","readMetadata","canEdit","canManageAccess","isPublic","isPublicKnown","eTag","modified","response","accessFlags","subject","responseNode","req","responseContentType","wacAllow","responseETag","aclUri","fetchHeadMetadata","userCanWriteToContainingContainer","userCanDeleteResource","fetchMetadata","fetchContentAndMetadata","content","metadata","error","fetchMetadataWithDelete","resourceMetadata","canDelete","access","deleteTypeIndexesForResource","user","typeIndexLogic","recursiveDelete","resourceParent","containerMembers","options","deleted","deleteResourceAndTypeIndexIfExists"],"sources":["../../src/resource/resourceLogic.ts"],"sourcesContent":["import { NamedNode, sym, Util } from 'rdflib'\nimport { ACL_LINK } from '../acl/aclLogic'\nimport { ns } from '../util/ns'\nimport { assertSuccessfulHttpResponse, isMissingError } from './resourceHttp'\nimport { readWacAccessInfo } from './resourceMetadata'\nimport { type ResourceAccess, type ResourceAccessWithDelete, type ResourceContent, type ResourceDeleteOptions, type ResourceLogic, type ResourceMetadata, type ResourceMetadataWithDelete, type TypeIndexLogic } from '../types'\nimport type { AclLogic } from '../types'\n\nexport function createResourceLogic(store, aclLogic: AclLogic, containerLogic, typeIndexLogic: TypeIndexLogic): ResourceLogic {\n function createContainer(url: string) {\n return containerLogic.createContainer(url)\n }\n\n function isContainer(resourceNode: NamedNode) {\n return containerLogic.isContainer(resourceNode)\n }\n\n function getContainerMemberCount(resourceNode: NamedNode) {\n return containerLogic.getContainerMemberCount(resourceNode)\n }\n\n function getContainerMembers(resourceNode: NamedNode) {\n return containerLogic.getContainerElements(resourceNode)\n }\n\n function getContainerIndexThing(containerNode: NamedNode) {\n const folderUri = containerNode.uri.endsWith('/') ? containerNode.uri : `${containerNode.uri}/`\n return store.sym(`${folderUri}index.ttl#this`)\n }\n\n function containerHasIndexDocument(containerNode: NamedNode) {\n return store.holds(\n containerNode,\n ns.ldp('contains'),\n getContainerIndexThing(containerNode).doc()\n )\n }\n\n function isStorageRoot(resourceNode: NamedNode) {\n return store.holds(\n resourceNode,\n ns.rdf('type'),\n ns.space('Storage'),\n resourceNode.doc()\n )\n }\n\n function isHiddenFile(resourceNode: NamedNode) {\n const directory = resourceNode.dir()\n if (!directory) {\n return false\n }\n\n const pathEnd = resourceNode.uri.slice(directory.uri.length)\n return pathEnd.startsWith('.') || pathEnd.endsWith('.acl') || pathEnd.endsWith('.meta') || pathEnd.endsWith('~')\n }\n\n function isMediaType(resourceNode: NamedNode, mediaType: string) {\n const typeURIs = store.findTypeURIs(resourceNode as any)\n const normalizedMediaType = mediaType.toLowerCase()\n const mediaTypePrefix = Util.mediaTypeClass(`${normalizedMediaType}/*`).uri.split('*')[0]\n\n if (Object.keys(typeURIs).some(typeURI => typeURI.startsWith(mediaTypePrefix))) {\n return true\n }\n\n const mediaTypeClasses: Record<string, string> = {\n audio: 'http://purl.org/dc/dcmitype/Sound',\n image: 'http://purl.org/dc/dcmitype/Image',\n video: 'http://purl.org/dc/dcmitype/MovingImage'\n }\n if (mediaTypeClasses[normalizedMediaType] in typeURIs) {\n return true\n }\n\n const contentTypes = store.fetcher.getHeader(resourceNode, 'content-type') || []\n return contentTypes.some((contentType: string) =>\n contentType.split(';', 1)[0].trim().toLowerCase().startsWith(`${normalizedMediaType}/`)\n )\n }\n\n function isImage(resourceNode: NamedNode) {\n return isMediaType(resourceNode, 'image')\n }\n\n function isAudio(resourceNode: NamedNode) {\n return isMediaType(resourceNode, 'audio')\n }\n\n function isVideo(resourceNode: NamedNode) {\n return isMediaType(resourceNode, 'video')\n }\n\n function isWebId(resource: string | NamedNode) {\n const uri = typeof resource === 'string' ? resource : resource.value\n\n try {\n const parsed = new URL(uri)\n return parsed.hash === '#me' && /\\/profile\\/card\\.ttl$/.test(parsed.pathname)\n } catch (_error) {\n return false\n }\n }\n\n function readMetadata(subject: NamedNode, response: Response): ResourceMetadata {\n let contentType: string | undefined\n let canEdit = false\n let canManageAccess = false\n let isPublic = false\n let isPublicKnown = false\n let eTag: string | undefined\n let modified: string | undefined\n\n if (response.headers) {\n const contentTypeHeader = response.headers.get('content-type')\n contentType = contentTypeHeader?.split(';')[0] ?? undefined\n\n const accessFlags = readWacAccessInfo(response.headers.get('wac-allow'))\n canEdit = accessFlags.canEdit\n canManageAccess = accessFlags.canManageAccess\n isPublic = accessFlags.isPublic\n isPublicKnown = accessFlags.isPublicKnown\n eTag = response.headers.get('etag') ?? undefined\n modified = store.anyValue(subject as any, ns.dct('modified')) || store.anyValue(subject as any, ns.dc('modified')) || undefined\n }\n\n if ((!response.headers || !response.headers.get('content-type')) && (!response.headers || !response.headers.get('wac-allow') || !response.headers.get('etag'))) {\n const reqs = store.each(\n null,\n store.sym('http://www.w3.org/2007/ont/link#requestedURI'),\n subject\n )\n reqs.map((req: any) => {\n const responseNode = store.any(\n req as any,\n store.sym('http://www.w3.org/2007/ont/link#response')\n )\n if (responseNode && responseNode.termType === 'NamedNode') {\n const responseContentType = store.anyValue(responseNode as any, ns.httph('content-type')) || undefined\n if (contentType === undefined) {\n contentType = responseContentType\n }\n const wacAllow = (store.anyValue(responseNode as any, ns.httph('wac-allow')) as string | undefined) ||\n (store.anyValue(responseNode as any, ns.httph('WAC-Allow')) as string | undefined)\n const accessFlags = readWacAccessInfo(wacAllow)\n canEdit = canEdit || accessFlags.canEdit\n canManageAccess = canManageAccess || accessFlags.canManageAccess\n isPublic = isPublic || accessFlags.isPublic\n isPublicKnown = isPublicKnown || accessFlags.isPublicKnown\n const responseETag = store.anyValue(responseNode as any, ns.httph('etag')) || undefined\n if (eTag === undefined) {\n eTag = responseETag\n }\n modified = store.anyValue(subject as any, ns.dct('modified')) || store.anyValue(subject as any, ns.dc('modified')) || undefined\n }\n })\n }\n\n const aclUri = store.any(subject, ACL_LINK)?.value || undefined\n const access: ResourceAccess = { canEdit, canManageAccess, isPublic, isPublicKnown }\n return { contentType, access, aclUri, eTag, modified }\n }\n\n async function fetchHeadMetadata(subject: NamedNode): Promise<ResourceMetadata> {\n const response = await store.fetcher.webOperation('HEAD', subject.uri)\n assertSuccessfulHttpResponse(response, 'HEAD')\n return readMetadata(subject, response)\n }\n\n async function userCanWriteToContainingContainer(resourceNode: NamedNode): Promise<boolean> {\n const containerNode = store.any(resourceNode, ns.ldp('contains')) || resourceNode.dir()\n if (!containerNode || containerNode.termType !== 'NamedNode') {\n return false\n }\n\n try {\n const containerMetadata = await fetchHeadMetadata(containerNode as NamedNode)\n return containerMetadata.access.canEdit\n } catch (_error) {\n return false\n }\n }\n\n async function userCanDeleteResource(resourceNode: NamedNode): Promise<boolean> {\n return userCanWriteToContainingContainer(resourceNode)\n }\n\n async function fetchMetadata(subject: NamedNode): Promise<ResourceMetadata> {\n return fetchHeadMetadata(subject)\n }\n\n async function fetchContentAndMetadata(subject: NamedNode): Promise<ResourceContent> {\n try {\n const response = await store.fetcher.webOperation('GET', subject.uri)\n assertSuccessfulHttpResponse(response, 'GET')\n\n const content = (response as Response & { responseText?: string }).responseText\n if (content === undefined) {\n throw new Error('No text in response object')\n }\n\n const metadata = readMetadata(subject, response)\n if (!metadata.contentType) {\n throw new Error('No content-type available')\n }\n\n return { content, metadata }\n } catch (error) {\n throw new Error(`Error reading file: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n\n async function fetchMetadataWithDelete(subject: NamedNode): Promise<ResourceMetadataWithDelete> {\n let resourceMetadata: ResourceMetadata\n\n try {\n resourceMetadata = await fetchHeadMetadata(subject)\n } catch (_error) {\n resourceMetadata = {\n contentType: undefined,\n access: { canEdit: false, canManageAccess: false, isPublic: false },\n aclUri: undefined,\n eTag: undefined,\n modified: undefined\n }\n }\n\n const canDelete = await userCanDeleteResource(subject)\n const access: ResourceAccessWithDelete = {\n canEdit: resourceMetadata.access?.canEdit ?? false,\n canManageAccess: resourceMetadata.access?.canManageAccess ?? false,\n isPublic: resourceMetadata.access?.isPublic ?? false,\n isPublicKnown: resourceMetadata.access?.isPublicKnown ?? false,\n canDelete\n }\n return { ...resourceMetadata, access }\n }\n\n async function deleteTypeIndexesForResource(resourceNode: NamedNode, user?: NamedNode | null) {\n if (!user) return\n\n try {\n await typeIndexLogic.deleteTypeIndexRegistrationForResource(resourceNode, user)\n } catch (_error) {\n // Keep resource deletion best-effort even if type-index cleanup fails.\n }\n }\n\n async function recursiveDelete(resourceNode: NamedNode, options: ResourceDeleteOptions = {}) {\n const resourceParent = resourceNode.dir()\n\n if (isContainer(resourceNode)) {\n const containerMembers = await containerLogic.getContainerMembers(resourceNode)\n await Promise.all(containerMembers.map((url) => recursiveDelete(sym(url), options)))\n }\n\n let deleted\n try {\n deleted = await store.fetcher._fetch(resourceNode.value, { method: 'DELETE' })\n assertSuccessfulHttpResponse(deleted, 'DELETE', { allowNotFound: true })\n } catch (error) {\n if (!isMissingError(error)) {\n throw error\n }\n }\n\n if (options.deleteTypeIndexes) {\n await deleteTypeIndexesForResource(resourceNode, options.user)\n }\n\n if (resourceParent) {\n store.removeMatches(resourceParent, ns.ldp('contains'), resourceNode, resourceParent.doc())\n }\n\n store.removeDocument(resourceNode)\n store.fetcher.unload(resourceNode.doc())\n return deleted\n }\n\n async function deleteResourceAndTypeIndexIfExists(resourceNode: NamedNode, user?: NamedNode | null) {\n await recursiveDelete(resourceNode, { deleteTypeIndexes: true, user })\n }\n\n return {\n recursiveDelete,\n deleteResourceAndTypeIndexIfExists,\n fetchMetadata,\n fetchMetadataWithDelete,\n fetchContentAndMetadata,\n createContainer,\n isContainer,\n getContainerMembers,\n getContainerMemberCount,\n getContainerIndexThing,\n containerHasIndexDocument,\n isStorageRoot,\n isHiddenFile,\n isMediaType,\n isImage,\n isAudio,\n isVideo,\n isWebId\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resourceLogic.d.ts","sourceRoot":"","sources":["../../src/resource/resourceLogic.ts"],"names":[],"mappings":"AAKA,OAAO,EAAwG,KAAK,aAAa,EAA0D,KAAK,cAAc,EAAE,MAAM,UAAU,CAAA;AAChO,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,wBAAgB,mBAAmB,CAAC,KAAK,KAAA,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,KAAA,EAAE,cAAc,EAAE,cAAc,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"resourceLogic.d.ts","sourceRoot":"","sources":["../../src/resource/resourceLogic.ts"],"names":[],"mappings":"AAKA,OAAO,EAAwG,KAAK,aAAa,EAA0D,KAAK,cAAc,EAAE,MAAM,UAAU,CAAA;AAChO,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,wBAAgB,mBAAmB,CAAC,KAAK,KAAA,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,KAAA,EAAE,cAAc,EAAE,cAAc,GAAG,aAAa,CAuS5H"}
|
|
@@ -2,38 +2,55 @@ import { ns as e } from "../util/ns.esm.js";
|
|
|
2
2
|
import { ACL_LINK as t } from "../acl/aclLogic.esm.js";
|
|
3
3
|
import { assertSuccessfulHttpResponse as n, isMissingError as r } from "./resourceHttp.esm.js";
|
|
4
4
|
import { readWacAccessInfo as i } from "./resourceMetadata.esm.js";
|
|
5
|
-
import {
|
|
5
|
+
import { Util as a, sym as o } from "rdflib";
|
|
6
6
|
//#region src/resource/resourceLogic.ts
|
|
7
|
-
function
|
|
8
|
-
function u(e) {
|
|
9
|
-
return c.createContainer(e);
|
|
10
|
-
}
|
|
7
|
+
function s(s, c, l, u) {
|
|
11
8
|
function d(e) {
|
|
12
|
-
return
|
|
9
|
+
return l.createContainer(e);
|
|
13
10
|
}
|
|
14
11
|
function f(e) {
|
|
15
|
-
return
|
|
12
|
+
return l.isContainer(e);
|
|
16
13
|
}
|
|
17
14
|
function p(e) {
|
|
18
|
-
return
|
|
15
|
+
return l.getContainerMemberCount(e);
|
|
19
16
|
}
|
|
20
17
|
function m(e) {
|
|
21
|
-
|
|
22
|
-
return o.sym(`${t}index.ttl#this`);
|
|
18
|
+
return l.getContainerElements(e);
|
|
23
19
|
}
|
|
24
|
-
function h(
|
|
25
|
-
|
|
20
|
+
function h(e) {
|
|
21
|
+
let t = e.uri.endsWith("/") ? e.uri : `${e.uri}/`;
|
|
22
|
+
return s.sym(`${t}index.ttl#this`);
|
|
26
23
|
}
|
|
27
24
|
function g(t) {
|
|
28
|
-
return
|
|
25
|
+
return s.holds(t, e.ldp("contains"), h(t).doc());
|
|
29
26
|
}
|
|
30
|
-
function _(
|
|
27
|
+
function _(t) {
|
|
28
|
+
return s.holds(t, e.rdf("type"), e.space("Storage"), t.doc());
|
|
29
|
+
}
|
|
30
|
+
function v(e) {
|
|
31
31
|
let t = e.dir();
|
|
32
32
|
if (!t) return !1;
|
|
33
33
|
let n = e.uri.slice(t.uri.length);
|
|
34
34
|
return n.startsWith(".") || n.endsWith(".acl") || n.endsWith(".meta") || n.endsWith("~");
|
|
35
35
|
}
|
|
36
|
-
function
|
|
36
|
+
function y(e, t) {
|
|
37
|
+
let n = s.findTypeURIs(e), r = t.toLowerCase(), i = a.mediaTypeClass(`${r}/*`).uri.split("*")[0];
|
|
38
|
+
return Object.keys(n).some((e) => e.startsWith(i)) || {
|
|
39
|
+
audio: "http://purl.org/dc/dcmitype/Sound",
|
|
40
|
+
image: "http://purl.org/dc/dcmitype/Image",
|
|
41
|
+
video: "http://purl.org/dc/dcmitype/MovingImage"
|
|
42
|
+
}[r] in n ? !0 : (s.fetcher.getHeader(e, "content-type") || []).some((e) => e.split(";", 1)[0].trim().toLowerCase().startsWith(`${r}/`));
|
|
43
|
+
}
|
|
44
|
+
function b(e) {
|
|
45
|
+
return y(e, "image");
|
|
46
|
+
}
|
|
47
|
+
function x(e) {
|
|
48
|
+
return y(e, "audio");
|
|
49
|
+
}
|
|
50
|
+
function S(e) {
|
|
51
|
+
return y(e, "video");
|
|
52
|
+
}
|
|
53
|
+
function C(e) {
|
|
37
54
|
let t = typeof e == "string" ? e : e.value;
|
|
38
55
|
try {
|
|
39
56
|
let e = new URL(t);
|
|
@@ -42,29 +59,29 @@ function o(o, s, c, l) {
|
|
|
42
59
|
return !1;
|
|
43
60
|
}
|
|
44
61
|
}
|
|
45
|
-
function
|
|
46
|
-
let a,
|
|
62
|
+
function w(n, r) {
|
|
63
|
+
let a, o = !1, c = !1, l = !1, u = !1, d, f;
|
|
47
64
|
if (r.headers) {
|
|
48
65
|
a = r.headers.get("content-type")?.split(";")[0] ?? void 0;
|
|
49
66
|
let t = i(r.headers.get("wac-allow"));
|
|
50
|
-
|
|
67
|
+
o = t.canEdit, c = t.canManageAccess, l = t.isPublic, u = t.isPublicKnown, d = r.headers.get("etag") ?? void 0, f = s.anyValue(n, e.dct("modified")) || s.anyValue(n, e.dc("modified")) || void 0;
|
|
51
68
|
}
|
|
52
|
-
(!r.headers || !r.headers.get("content-type")) && (!r.headers || !r.headers.get("wac-allow") || !r.headers.get("etag")) &&
|
|
53
|
-
let r =
|
|
69
|
+
(!r.headers || !r.headers.get("content-type")) && (!r.headers || !r.headers.get("wac-allow") || !r.headers.get("etag")) && s.each(null, s.sym("http://www.w3.org/2007/ont/link#requestedURI"), n).map((t) => {
|
|
70
|
+
let r = s.any(t, s.sym("http://www.w3.org/2007/ont/link#response"));
|
|
54
71
|
if (r && r.termType === "NamedNode") {
|
|
55
|
-
let t =
|
|
72
|
+
let t = s.anyValue(r, e.httph("content-type")) || void 0;
|
|
56
73
|
a === void 0 && (a = t);
|
|
57
|
-
let p =
|
|
58
|
-
|
|
59
|
-
let h =
|
|
60
|
-
d === void 0 && (d = h), f =
|
|
74
|
+
let p = s.anyValue(r, e.httph("wac-allow")) || s.anyValue(r, e.httph("WAC-Allow")), m = i(p);
|
|
75
|
+
o ||= m.canEdit, c ||= m.canManageAccess, l ||= m.isPublic, u ||= m.isPublicKnown;
|
|
76
|
+
let h = s.anyValue(r, e.httph("etag")) || void 0;
|
|
77
|
+
d === void 0 && (d = h), f = s.anyValue(n, e.dct("modified")) || s.anyValue(n, e.dc("modified")) || void 0;
|
|
61
78
|
}
|
|
62
79
|
});
|
|
63
|
-
let p =
|
|
80
|
+
let p = s.any(n, t)?.value || void 0;
|
|
64
81
|
return {
|
|
65
82
|
contentType: a,
|
|
66
83
|
access: {
|
|
67
|
-
canEdit:
|
|
84
|
+
canEdit: o,
|
|
68
85
|
canManageAccess: c,
|
|
69
86
|
isPublic: l,
|
|
70
87
|
isPublicKnown: u
|
|
@@ -74,32 +91,32 @@ function o(o, s, c, l) {
|
|
|
74
91
|
modified: f
|
|
75
92
|
};
|
|
76
93
|
}
|
|
77
|
-
async function
|
|
78
|
-
let t = await
|
|
79
|
-
return n(t, "HEAD"),
|
|
94
|
+
async function T(e) {
|
|
95
|
+
let t = await s.fetcher.webOperation("HEAD", e.uri);
|
|
96
|
+
return n(t, "HEAD"), w(e, t);
|
|
80
97
|
}
|
|
81
|
-
async function
|
|
82
|
-
let n =
|
|
98
|
+
async function E(t) {
|
|
99
|
+
let n = s.any(t, e.ldp("contains")) || t.dir();
|
|
83
100
|
if (!n || n.termType !== "NamedNode") return !1;
|
|
84
101
|
try {
|
|
85
|
-
return (await
|
|
102
|
+
return (await T(n)).access.canEdit;
|
|
86
103
|
} catch {
|
|
87
104
|
return !1;
|
|
88
105
|
}
|
|
89
106
|
}
|
|
90
|
-
async function
|
|
91
|
-
return
|
|
107
|
+
async function D(e) {
|
|
108
|
+
return E(e);
|
|
92
109
|
}
|
|
93
|
-
async function
|
|
94
|
-
return
|
|
110
|
+
async function O(e) {
|
|
111
|
+
return T(e);
|
|
95
112
|
}
|
|
96
|
-
async function
|
|
113
|
+
async function k(e) {
|
|
97
114
|
try {
|
|
98
|
-
let t = await
|
|
115
|
+
let t = await s.fetcher.webOperation("GET", e.uri);
|
|
99
116
|
n(t, "GET");
|
|
100
117
|
let r = t.responseText;
|
|
101
118
|
if (r === void 0) throw Error("No text in response object");
|
|
102
|
-
let i =
|
|
119
|
+
let i = w(e, t);
|
|
103
120
|
if (!i.contentType) throw Error("No content-type available");
|
|
104
121
|
return {
|
|
105
122
|
content: r,
|
|
@@ -109,10 +126,10 @@ function o(o, s, c, l) {
|
|
|
109
126
|
throw Error(`Error reading file: ${e instanceof Error ? e.message : String(e)}`);
|
|
110
127
|
}
|
|
111
128
|
}
|
|
112
|
-
async function
|
|
129
|
+
async function A(e) {
|
|
113
130
|
let t;
|
|
114
131
|
try {
|
|
115
|
-
t = await
|
|
132
|
+
t = await T(e);
|
|
116
133
|
} catch {
|
|
117
134
|
t = {
|
|
118
135
|
contentType: void 0,
|
|
@@ -126,7 +143,7 @@ function o(o, s, c, l) {
|
|
|
126
143
|
modified: void 0
|
|
127
144
|
};
|
|
128
145
|
}
|
|
129
|
-
let n = await
|
|
146
|
+
let n = await D(e), r = {
|
|
130
147
|
canEdit: t.access?.canEdit ?? !1,
|
|
131
148
|
canManageAccess: t.access?.canManageAccess ?? !1,
|
|
132
149
|
isPublic: t.access?.isPublic ?? !1,
|
|
@@ -138,49 +155,53 @@ function o(o, s, c, l) {
|
|
|
138
155
|
access: r
|
|
139
156
|
};
|
|
140
157
|
}
|
|
141
|
-
async function
|
|
158
|
+
async function j(e, t) {
|
|
142
159
|
if (t) try {
|
|
143
|
-
await
|
|
160
|
+
await u.deleteTypeIndexRegistrationForResource(e, t);
|
|
144
161
|
} catch {}
|
|
145
162
|
}
|
|
146
|
-
async function
|
|
147
|
-
let
|
|
148
|
-
if (
|
|
149
|
-
let e = await
|
|
150
|
-
await Promise.all(e.map((e) =>
|
|
163
|
+
async function M(t, i = {}) {
|
|
164
|
+
let a = t.dir();
|
|
165
|
+
if (f(t)) {
|
|
166
|
+
let e = await l.getContainerMembers(t);
|
|
167
|
+
await Promise.all(e.map((e) => M(o(e), i)));
|
|
151
168
|
}
|
|
152
|
-
let
|
|
169
|
+
let c;
|
|
153
170
|
try {
|
|
154
|
-
|
|
171
|
+
c = await s.fetcher._fetch(t.value, { method: "DELETE" }), n(c, "DELETE", { allowNotFound: !0 });
|
|
155
172
|
} catch (e) {
|
|
156
173
|
if (!r(e)) throw e;
|
|
157
174
|
}
|
|
158
|
-
return i.deleteTypeIndexes && await
|
|
175
|
+
return i.deleteTypeIndexes && await j(t, i.user), a && s.removeMatches(a, e.ldp("contains"), t, a.doc()), s.removeDocument(t), s.fetcher.unload(t.doc()), c;
|
|
159
176
|
}
|
|
160
|
-
async function
|
|
161
|
-
await
|
|
177
|
+
async function N(e, t) {
|
|
178
|
+
await M(e, {
|
|
162
179
|
deleteTypeIndexes: !0,
|
|
163
180
|
user: t
|
|
164
181
|
});
|
|
165
182
|
}
|
|
166
183
|
return {
|
|
167
|
-
recursiveDelete:
|
|
168
|
-
deleteResourceAndTypeIndexIfExists:
|
|
169
|
-
fetchMetadata:
|
|
170
|
-
fetchMetadataWithDelete:
|
|
171
|
-
fetchContentAndMetadata:
|
|
172
|
-
createContainer:
|
|
173
|
-
isContainer:
|
|
174
|
-
getContainerMembers:
|
|
175
|
-
getContainerMemberCount:
|
|
176
|
-
getContainerIndexThing:
|
|
177
|
-
containerHasIndexDocument:
|
|
178
|
-
isStorageRoot:
|
|
179
|
-
isHiddenFile:
|
|
180
|
-
|
|
184
|
+
recursiveDelete: M,
|
|
185
|
+
deleteResourceAndTypeIndexIfExists: N,
|
|
186
|
+
fetchMetadata: O,
|
|
187
|
+
fetchMetadataWithDelete: A,
|
|
188
|
+
fetchContentAndMetadata: k,
|
|
189
|
+
createContainer: d,
|
|
190
|
+
isContainer: f,
|
|
191
|
+
getContainerMembers: m,
|
|
192
|
+
getContainerMemberCount: p,
|
|
193
|
+
getContainerIndexThing: h,
|
|
194
|
+
containerHasIndexDocument: g,
|
|
195
|
+
isStorageRoot: _,
|
|
196
|
+
isHiddenFile: v,
|
|
197
|
+
isMediaType: y,
|
|
198
|
+
isImage: b,
|
|
199
|
+
isAudio: x,
|
|
200
|
+
isVideo: S,
|
|
201
|
+
isWebId: C
|
|
181
202
|
};
|
|
182
203
|
}
|
|
183
204
|
//#endregion
|
|
184
|
-
export {
|
|
205
|
+
export { s as createResourceLogic };
|
|
185
206
|
|
|
186
207
|
//# sourceMappingURL=resourceLogic.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resourceLogic.esm.js","names":["createResourceLogic","createContainer","containerLogic","url","isContainer","resourceNode","getContainerMemberCount","getContainerMembers","getContainerIndexThing","folderUri","containerNode","store","containerHasIndexDocument","ns","isStorageRoot","isHiddenFile","directory","pathEnd","isWebId","uri","resource","parsed","readMetadata","contentType","canEdit","canManageAccess","isPublic","isPublicKnown","eTag","modified","response","accessFlags","readWacAccessInfo","subject","responseNode","req","responseContentType","wacAllow","responseETag","aclUri","ACL_LINK","fetchHeadMetadata","assertSuccessfulHttpResponse","userCanWriteToContainingContainer","userCanDeleteResource","fetchMetadata","fetchContentAndMetadata","content","metadata","error","fetchMetadataWithDelete","resourceMetadata","canDelete","access","deleteTypeIndexesForResource","user","typeIndexLogic","recursiveDelete","resourceParent","containerMembers","sym","options","deleted","isMissingError","deleteResourceAndTypeIndexIfExists"],"sources":["../../src/resource/resourceLogic.ts"],"sourcesContent":["import { NamedNode, sym } from 'rdflib'\nimport { ACL_LINK } from '../acl/aclLogic'\nimport { ns } from '../util/ns'\nimport { assertSuccessfulHttpResponse, isMissingError } from './resourceHttp'\nimport { readWacAccessInfo } from './resourceMetadata'\nimport { type ResourceAccess, type ResourceAccessWithDelete, type ResourceContent, type ResourceDeleteOptions, type ResourceLogic, type ResourceMetadata, type ResourceMetadataWithDelete, type TypeIndexLogic } from '../types'\nimport type { AclLogic } from '../types'\n\nexport function createResourceLogic(store, aclLogic: AclLogic, containerLogic, typeIndexLogic: TypeIndexLogic): ResourceLogic {\n function createContainer(url: string) {\n return containerLogic.createContainer(url)\n }\n\n function isContainer(resourceNode: NamedNode) {\n return containerLogic.isContainer(resourceNode)\n }\n\n function getContainerMemberCount(resourceNode: NamedNode) {\n return containerLogic.getContainerMemberCount(resourceNode)\n }\n\n function getContainerMembers(resourceNode: NamedNode) {\n return containerLogic.getContainerElements(resourceNode)\n }\n\n function getContainerIndexThing(containerNode: NamedNode) {\n const folderUri = containerNode.uri.endsWith('/') ? containerNode.uri : `${containerNode.uri}/`\n return store.sym(`${folderUri}index.ttl#this`)\n }\n\n function containerHasIndexDocument(containerNode: NamedNode) {\n return store.holds(\n containerNode,\n ns.ldp('contains'),\n getContainerIndexThing(containerNode).doc()\n )\n }\n\n function isStorageRoot(resourceNode: NamedNode) {\n return store.holds(\n resourceNode,\n ns.rdf('type'),\n ns.space('Storage'),\n resourceNode.doc()\n )\n }\n\n function isHiddenFile(resourceNode: NamedNode) {\n const directory = resourceNode.dir()\n if (!directory) {\n return false\n }\n\n const pathEnd = resourceNode.uri.slice(directory.uri.length)\n return pathEnd.startsWith('.') || pathEnd.endsWith('.acl') || pathEnd.endsWith('.meta') || pathEnd.endsWith('~')\n }\n\n function isWebId(resource: string | NamedNode) {\n const uri = typeof resource === 'string' ? resource : resource.value\n\n try {\n const parsed = new URL(uri)\n return parsed.hash === '#me' && /\\/profile\\/card\\.ttl$/.test(parsed.pathname)\n } catch (_error) {\n return false\n }\n }\n\n function readMetadata(subject: NamedNode, response: Response): ResourceMetadata {\n let contentType: string | undefined\n let canEdit = false\n let canManageAccess = false\n let isPublic = false\n let isPublicKnown = false\n let eTag: string | undefined\n let modified: string | undefined\n\n if (response.headers) {\n const contentTypeHeader = response.headers.get('content-type')\n contentType = contentTypeHeader?.split(';')[0] ?? undefined\n\n const accessFlags = readWacAccessInfo(response.headers.get('wac-allow'))\n canEdit = accessFlags.canEdit\n canManageAccess = accessFlags.canManageAccess\n isPublic = accessFlags.isPublic\n isPublicKnown = accessFlags.isPublicKnown\n eTag = response.headers.get('etag') ?? undefined\n modified = store.anyValue(subject as any, ns.dct('modified')) || store.anyValue(subject as any, ns.dc('modified')) || undefined\n }\n\n if ((!response.headers || !response.headers.get('content-type')) && (!response.headers || !response.headers.get('wac-allow') || !response.headers.get('etag'))) {\n const reqs = store.each(\n null,\n store.sym('http://www.w3.org/2007/ont/link#requestedURI'),\n subject\n )\n reqs.map((req: any) => {\n const responseNode = store.any(\n req as any,\n store.sym('http://www.w3.org/2007/ont/link#response')\n )\n if (responseNode && responseNode.termType === 'NamedNode') {\n const responseContentType = store.anyValue(responseNode as any, ns.httph('content-type')) || undefined\n if (contentType === undefined) {\n contentType = responseContentType\n }\n const wacAllow = (store.anyValue(responseNode as any, ns.httph('wac-allow')) as string | undefined) ||\n (store.anyValue(responseNode as any, ns.httph('WAC-Allow')) as string | undefined)\n const accessFlags = readWacAccessInfo(wacAllow)\n canEdit = canEdit || accessFlags.canEdit\n canManageAccess = canManageAccess || accessFlags.canManageAccess\n isPublic = isPublic || accessFlags.isPublic\n isPublicKnown = isPublicKnown || accessFlags.isPublicKnown\n const responseETag = store.anyValue(responseNode as any, ns.httph('etag')) || undefined\n if (eTag === undefined) {\n eTag = responseETag\n }\n modified = store.anyValue(subject as any, ns.dct('modified')) || store.anyValue(subject as any, ns.dc('modified')) || undefined\n }\n })\n }\n\n const aclUri = store.any(subject, ACL_LINK)?.value || undefined\n const access: ResourceAccess = { canEdit, canManageAccess, isPublic, isPublicKnown }\n return { contentType, access, aclUri, eTag, modified }\n }\n\n async function fetchHeadMetadata(subject: NamedNode): Promise<ResourceMetadata> {\n const response = await store.fetcher.webOperation('HEAD', subject.uri)\n assertSuccessfulHttpResponse(response, 'HEAD')\n return readMetadata(subject, response)\n }\n\n async function userCanWriteToContainingContainer(resourceNode: NamedNode): Promise<boolean> {\n const containerNode = store.any(resourceNode, ns.ldp('contains')) || resourceNode.dir()\n if (!containerNode || containerNode.termType !== 'NamedNode') {\n return false\n }\n\n try {\n const containerMetadata = await fetchHeadMetadata(containerNode as NamedNode)\n return containerMetadata.access.canEdit\n } catch (_error) {\n return false\n }\n }\n\n async function userCanDeleteResource(resourceNode: NamedNode): Promise<boolean> {\n return userCanWriteToContainingContainer(resourceNode)\n }\n\n async function fetchMetadata(subject: NamedNode): Promise<ResourceMetadata> {\n return fetchHeadMetadata(subject)\n }\n\n async function fetchContentAndMetadata(subject: NamedNode): Promise<ResourceContent> {\n try {\n const response = await store.fetcher.webOperation('GET', subject.uri)\n assertSuccessfulHttpResponse(response, 'GET')\n\n const content = (response as Response & { responseText?: string }).responseText\n if (content === undefined) {\n throw new Error('No text in response object')\n }\n\n const metadata = readMetadata(subject, response)\n if (!metadata.contentType) {\n throw new Error('No content-type available')\n }\n\n return { content, metadata }\n } catch (error) {\n throw new Error(`Error reading file: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n\n async function fetchMetadataWithDelete(subject: NamedNode): Promise<ResourceMetadataWithDelete> {\n let resourceMetadata: ResourceMetadata\n\n try {\n resourceMetadata = await fetchHeadMetadata(subject)\n } catch (_error) {\n resourceMetadata = {\n contentType: undefined,\n access: { canEdit: false, canManageAccess: false, isPublic: false },\n aclUri: undefined,\n eTag: undefined,\n modified: undefined\n }\n }\n\n const canDelete = await userCanDeleteResource(subject)\n const access: ResourceAccessWithDelete = {\n canEdit: resourceMetadata.access?.canEdit ?? false,\n canManageAccess: resourceMetadata.access?.canManageAccess ?? false,\n isPublic: resourceMetadata.access?.isPublic ?? false,\n isPublicKnown: resourceMetadata.access?.isPublicKnown ?? false,\n canDelete\n }\n return { ...resourceMetadata, access }\n }\n\n async function deleteTypeIndexesForResource(resourceNode: NamedNode, user?: NamedNode | null) {\n if (!user) return\n\n try {\n await typeIndexLogic.deleteTypeIndexRegistrationForResource(resourceNode, user)\n } catch (_error) {\n // Keep resource deletion best-effort even if type-index cleanup fails.\n }\n }\n\n async function recursiveDelete(resourceNode: NamedNode, options: ResourceDeleteOptions = {}) {\n const resourceParent = resourceNode.dir()\n\n if (isContainer(resourceNode)) {\n const containerMembers = await containerLogic.getContainerMembers(resourceNode)\n await Promise.all(containerMembers.map((url) => recursiveDelete(sym(url), options)))\n }\n\n let deleted\n try {\n deleted = await store.fetcher._fetch(resourceNode.value, { method: 'DELETE' })\n assertSuccessfulHttpResponse(deleted, 'DELETE', { allowNotFound: true })\n } catch (error) {\n if (!isMissingError(error)) {\n throw error\n }\n }\n\n if (options.deleteTypeIndexes) {\n await deleteTypeIndexesForResource(resourceNode, options.user)\n }\n\n if (resourceParent) {\n store.removeMatches(resourceParent, ns.ldp('contains'), resourceNode, resourceParent.doc())\n }\n\n store.removeDocument(resourceNode)\n store.fetcher.unload(resourceNode.doc())\n return deleted\n }\n\n async function deleteResourceAndTypeIndexIfExists(resourceNode: NamedNode, user?: NamedNode | null) {\n await recursiveDelete(resourceNode, { deleteTypeIndexes: true, user })\n }\n\n return {\n recursiveDelete,\n deleteResourceAndTypeIndexIfExists,\n fetchMetadata,\n fetchMetadataWithDelete,\n fetchContentAndMetadata,\n createContainer,\n isContainer,\n getContainerMembers,\n getContainerMemberCount,\n getContainerIndexThing,\n containerHasIndexDocument,\n isStorageRoot,\n isHiddenFile,\n isWebId\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resourceLogic.esm.js","names":["createResourceLogic","createContainer","containerLogic","url","isContainer","resourceNode","getContainerMemberCount","getContainerMembers","getContainerIndexThing","folderUri","containerNode","store","containerHasIndexDocument","ns","isStorageRoot","isHiddenFile","directory","pathEnd","isMediaType","typeURIs","normalizedMediaType","mediaType","mediaTypePrefix","Util","typeURI","contentType","isImage","isAudio","isVideo","isWebId","uri","resource","parsed","readMetadata","canEdit","canManageAccess","isPublic","isPublicKnown","eTag","modified","response","accessFlags","readWacAccessInfo","subject","responseNode","req","responseContentType","wacAllow","responseETag","aclUri","ACL_LINK","fetchHeadMetadata","assertSuccessfulHttpResponse","userCanWriteToContainingContainer","userCanDeleteResource","fetchMetadata","fetchContentAndMetadata","content","metadata","error","fetchMetadataWithDelete","resourceMetadata","canDelete","access","deleteTypeIndexesForResource","user","typeIndexLogic","recursiveDelete","resourceParent","containerMembers","sym","options","deleted","isMissingError","deleteResourceAndTypeIndexIfExists"],"sources":["../../src/resource/resourceLogic.ts"],"sourcesContent":["import { NamedNode, sym, Util } from 'rdflib'\nimport { ACL_LINK } from '../acl/aclLogic'\nimport { ns } from '../util/ns'\nimport { assertSuccessfulHttpResponse, isMissingError } from './resourceHttp'\nimport { readWacAccessInfo } from './resourceMetadata'\nimport { type ResourceAccess, type ResourceAccessWithDelete, type ResourceContent, type ResourceDeleteOptions, type ResourceLogic, type ResourceMetadata, type ResourceMetadataWithDelete, type TypeIndexLogic } from '../types'\nimport type { AclLogic } from '../types'\n\nexport function createResourceLogic(store, aclLogic: AclLogic, containerLogic, typeIndexLogic: TypeIndexLogic): ResourceLogic {\n function createContainer(url: string) {\n return containerLogic.createContainer(url)\n }\n\n function isContainer(resourceNode: NamedNode) {\n return containerLogic.isContainer(resourceNode)\n }\n\n function getContainerMemberCount(resourceNode: NamedNode) {\n return containerLogic.getContainerMemberCount(resourceNode)\n }\n\n function getContainerMembers(resourceNode: NamedNode) {\n return containerLogic.getContainerElements(resourceNode)\n }\n\n function getContainerIndexThing(containerNode: NamedNode) {\n const folderUri = containerNode.uri.endsWith('/') ? containerNode.uri : `${containerNode.uri}/`\n return store.sym(`${folderUri}index.ttl#this`)\n }\n\n function containerHasIndexDocument(containerNode: NamedNode) {\n return store.holds(\n containerNode,\n ns.ldp('contains'),\n getContainerIndexThing(containerNode).doc()\n )\n }\n\n function isStorageRoot(resourceNode: NamedNode) {\n return store.holds(\n resourceNode,\n ns.rdf('type'),\n ns.space('Storage'),\n resourceNode.doc()\n )\n }\n\n function isHiddenFile(resourceNode: NamedNode) {\n const directory = resourceNode.dir()\n if (!directory) {\n return false\n }\n\n const pathEnd = resourceNode.uri.slice(directory.uri.length)\n return pathEnd.startsWith('.') || pathEnd.endsWith('.acl') || pathEnd.endsWith('.meta') || pathEnd.endsWith('~')\n }\n\n function isMediaType(resourceNode: NamedNode, mediaType: string) {\n const typeURIs = store.findTypeURIs(resourceNode as any)\n const normalizedMediaType = mediaType.toLowerCase()\n const mediaTypePrefix = Util.mediaTypeClass(`${normalizedMediaType}/*`).uri.split('*')[0]\n\n if (Object.keys(typeURIs).some(typeURI => typeURI.startsWith(mediaTypePrefix))) {\n return true\n }\n\n const mediaTypeClasses: Record<string, string> = {\n audio: 'http://purl.org/dc/dcmitype/Sound',\n image: 'http://purl.org/dc/dcmitype/Image',\n video: 'http://purl.org/dc/dcmitype/MovingImage'\n }\n if (mediaTypeClasses[normalizedMediaType] in typeURIs) {\n return true\n }\n\n const contentTypes = store.fetcher.getHeader(resourceNode, 'content-type') || []\n return contentTypes.some((contentType: string) =>\n contentType.split(';', 1)[0].trim().toLowerCase().startsWith(`${normalizedMediaType}/`)\n )\n }\n\n function isImage(resourceNode: NamedNode) {\n return isMediaType(resourceNode, 'image')\n }\n\n function isAudio(resourceNode: NamedNode) {\n return isMediaType(resourceNode, 'audio')\n }\n\n function isVideo(resourceNode: NamedNode) {\n return isMediaType(resourceNode, 'video')\n }\n\n function isWebId(resource: string | NamedNode) {\n const uri = typeof resource === 'string' ? resource : resource.value\n\n try {\n const parsed = new URL(uri)\n return parsed.hash === '#me' && /\\/profile\\/card\\.ttl$/.test(parsed.pathname)\n } catch (_error) {\n return false\n }\n }\n\n function readMetadata(subject: NamedNode, response: Response): ResourceMetadata {\n let contentType: string | undefined\n let canEdit = false\n let canManageAccess = false\n let isPublic = false\n let isPublicKnown = false\n let eTag: string | undefined\n let modified: string | undefined\n\n if (response.headers) {\n const contentTypeHeader = response.headers.get('content-type')\n contentType = contentTypeHeader?.split(';')[0] ?? undefined\n\n const accessFlags = readWacAccessInfo(response.headers.get('wac-allow'))\n canEdit = accessFlags.canEdit\n canManageAccess = accessFlags.canManageAccess\n isPublic = accessFlags.isPublic\n isPublicKnown = accessFlags.isPublicKnown\n eTag = response.headers.get('etag') ?? undefined\n modified = store.anyValue(subject as any, ns.dct('modified')) || store.anyValue(subject as any, ns.dc('modified')) || undefined\n }\n\n if ((!response.headers || !response.headers.get('content-type')) && (!response.headers || !response.headers.get('wac-allow') || !response.headers.get('etag'))) {\n const reqs = store.each(\n null,\n store.sym('http://www.w3.org/2007/ont/link#requestedURI'),\n subject\n )\n reqs.map((req: any) => {\n const responseNode = store.any(\n req as any,\n store.sym('http://www.w3.org/2007/ont/link#response')\n )\n if (responseNode && responseNode.termType === 'NamedNode') {\n const responseContentType = store.anyValue(responseNode as any, ns.httph('content-type')) || undefined\n if (contentType === undefined) {\n contentType = responseContentType\n }\n const wacAllow = (store.anyValue(responseNode as any, ns.httph('wac-allow')) as string | undefined) ||\n (store.anyValue(responseNode as any, ns.httph('WAC-Allow')) as string | undefined)\n const accessFlags = readWacAccessInfo(wacAllow)\n canEdit = canEdit || accessFlags.canEdit\n canManageAccess = canManageAccess || accessFlags.canManageAccess\n isPublic = isPublic || accessFlags.isPublic\n isPublicKnown = isPublicKnown || accessFlags.isPublicKnown\n const responseETag = store.anyValue(responseNode as any, ns.httph('etag')) || undefined\n if (eTag === undefined) {\n eTag = responseETag\n }\n modified = store.anyValue(subject as any, ns.dct('modified')) || store.anyValue(subject as any, ns.dc('modified')) || undefined\n }\n })\n }\n\n const aclUri = store.any(subject, ACL_LINK)?.value || undefined\n const access: ResourceAccess = { canEdit, canManageAccess, isPublic, isPublicKnown }\n return { contentType, access, aclUri, eTag, modified }\n }\n\n async function fetchHeadMetadata(subject: NamedNode): Promise<ResourceMetadata> {\n const response = await store.fetcher.webOperation('HEAD', subject.uri)\n assertSuccessfulHttpResponse(response, 'HEAD')\n return readMetadata(subject, response)\n }\n\n async function userCanWriteToContainingContainer(resourceNode: NamedNode): Promise<boolean> {\n const containerNode = store.any(resourceNode, ns.ldp('contains')) || resourceNode.dir()\n if (!containerNode || containerNode.termType !== 'NamedNode') {\n return false\n }\n\n try {\n const containerMetadata = await fetchHeadMetadata(containerNode as NamedNode)\n return containerMetadata.access.canEdit\n } catch (_error) {\n return false\n }\n }\n\n async function userCanDeleteResource(resourceNode: NamedNode): Promise<boolean> {\n return userCanWriteToContainingContainer(resourceNode)\n }\n\n async function fetchMetadata(subject: NamedNode): Promise<ResourceMetadata> {\n return fetchHeadMetadata(subject)\n }\n\n async function fetchContentAndMetadata(subject: NamedNode): Promise<ResourceContent> {\n try {\n const response = await store.fetcher.webOperation('GET', subject.uri)\n assertSuccessfulHttpResponse(response, 'GET')\n\n const content = (response as Response & { responseText?: string }).responseText\n if (content === undefined) {\n throw new Error('No text in response object')\n }\n\n const metadata = readMetadata(subject, response)\n if (!metadata.contentType) {\n throw new Error('No content-type available')\n }\n\n return { content, metadata }\n } catch (error) {\n throw new Error(`Error reading file: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n\n async function fetchMetadataWithDelete(subject: NamedNode): Promise<ResourceMetadataWithDelete> {\n let resourceMetadata: ResourceMetadata\n\n try {\n resourceMetadata = await fetchHeadMetadata(subject)\n } catch (_error) {\n resourceMetadata = {\n contentType: undefined,\n access: { canEdit: false, canManageAccess: false, isPublic: false },\n aclUri: undefined,\n eTag: undefined,\n modified: undefined\n }\n }\n\n const canDelete = await userCanDeleteResource(subject)\n const access: ResourceAccessWithDelete = {\n canEdit: resourceMetadata.access?.canEdit ?? false,\n canManageAccess: resourceMetadata.access?.canManageAccess ?? false,\n isPublic: resourceMetadata.access?.isPublic ?? false,\n isPublicKnown: resourceMetadata.access?.isPublicKnown ?? false,\n canDelete\n }\n return { ...resourceMetadata, access }\n }\n\n async function deleteTypeIndexesForResource(resourceNode: NamedNode, user?: NamedNode | null) {\n if (!user) return\n\n try {\n await typeIndexLogic.deleteTypeIndexRegistrationForResource(resourceNode, user)\n } catch (_error) {\n // Keep resource deletion best-effort even if type-index cleanup fails.\n }\n }\n\n async function recursiveDelete(resourceNode: NamedNode, options: ResourceDeleteOptions = {}) {\n const resourceParent = resourceNode.dir()\n\n if (isContainer(resourceNode)) {\n const containerMembers = await containerLogic.getContainerMembers(resourceNode)\n await Promise.all(containerMembers.map((url) => recursiveDelete(sym(url), options)))\n }\n\n let deleted\n try {\n deleted = await store.fetcher._fetch(resourceNode.value, { method: 'DELETE' })\n assertSuccessfulHttpResponse(deleted, 'DELETE', { allowNotFound: true })\n } catch (error) {\n if (!isMissingError(error)) {\n throw error\n }\n }\n\n if (options.deleteTypeIndexes) {\n await deleteTypeIndexesForResource(resourceNode, options.user)\n }\n\n if (resourceParent) {\n store.removeMatches(resourceParent, ns.ldp('contains'), resourceNode, resourceParent.doc())\n }\n\n store.removeDocument(resourceNode)\n store.fetcher.unload(resourceNode.doc())\n return deleted\n }\n\n async function deleteResourceAndTypeIndexIfExists(resourceNode: NamedNode, user?: NamedNode | null) {\n await recursiveDelete(resourceNode, { deleteTypeIndexes: true, user })\n }\n\n return {\n recursiveDelete,\n deleteResourceAndTypeIndexIfExists,\n fetchMetadata,\n fetchMetadataWithDelete,\n fetchContentAndMetadata,\n createContainer,\n isContainer,\n getContainerMembers,\n getContainerMemberCount,\n getContainerIndexThing,\n containerHasIndexDocument,\n isStorageRoot,\n isHiddenFile,\n isMediaType,\n isImage,\n isAudio,\n isVideo,\n isWebId\n }\n}\n"],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -158,6 +158,10 @@ export interface ResourceLogic {
|
|
|
158
158
|
containerHasIndexDocument: (container: NamedNode) => boolean;
|
|
159
159
|
isStorageRoot: (resource: NamedNode) => boolean;
|
|
160
160
|
isHiddenFile: (resource: NamedNode) => boolean;
|
|
161
|
+
isMediaType: (resource: NamedNode, mediaType: string) => boolean;
|
|
162
|
+
isImage: (resource: NamedNode) => boolean;
|
|
163
|
+
isAudio: (resource: NamedNode) => boolean;
|
|
164
|
+
isVideo: (resource: NamedNode) => boolean;
|
|
161
165
|
isWebId: (resource: string | NamedNode) => boolean;
|
|
162
166
|
}
|
|
163
167
|
export interface TypeIndexLogic {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAClH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAExF,MAAM,MAAM,UAAU,GAAG;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IAC7B,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,GAAG,CAAC,EAAE,YAAY,CAAA;IAClB,KAAK,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAA;KAAE,CAAA;IAC3C,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IAC5B,EAAE,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,SAAS,CAAA;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,aAAa,CAAC,EAAE,SAAS,CAAA;IACzB,UAAU,CAAC,EAAE,WAAW,CAAA;CAC3B,CAAA;AAED,MAAM,WAAW,UAAU;IACvB,WAAW,EAAE,uBAAuB,CAAA;IACpC,WAAW,EAAE,MAAM,SAAS,GAAG,IAAI,CAAA;IACnC,SAAS,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,KAAK,CAAC,KAAK,OAAO,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;IAC9F,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,EACvC,OAAO,CAAC,EAAE,qBAAqB,KAAK,SAAS,GAAG,IAAI,CAAA;IACxD;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAA;CAC7C;AAED,MAAM,MAAM,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAA;AAClF,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAAA;AAEvF,MAAM,WAAW,cAAc;IAC3B,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACnC,WAAW,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvF,qBAAqB,EAAE,CAAC,SAAS,KAAA,EAAE,EAAE,KAAA,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,eAAe,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACjF,OAAO,EAAE,CAAC,cAAc,EAAE,cAAc,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACzE,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,KAAA,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACpE,UAAU,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAA;CACjE;AAED,MAAM,WAAW,IAAI;IACjB,EAAE,EAAE,SAAS,CAAC;IACd,aAAa,EAAE,SAAS,CAAC;IACzB,MAAM,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IACzB,uBAAuB,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAC7E,eAAe,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACzD,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,UAAU,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,SAAS,CAAC;IAC3C,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACtD,WAAW,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI,CAAA;CAC9C;AAED,MAAM,WAAW,QAAQ;IACrB,aAAa,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/D,gBAAgB,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3E,gBAAgB,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAChF,sBAAsB,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,oBAAoB,CAAC;IACtE,mBAAmB,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;IAClE,4BAA4B,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAC;IAC/F,aAAa,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,UAAU,CAAC;IAC3D,aAAa,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,EAAE,CAAC;IAClD,mBAAmB,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,gBAAgB,CAAC;IACvE,mBAAmB,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,UAAU,EAAE,CAAC;IAC9D,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAChH,kBAAkB,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1H,6BAA6B,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACrI,0BAA0B,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAClI,2BAA2B,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9G,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5F,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1F,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvE,SAAS,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClD,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAC5C,OAAO,EAAE;QACL,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,MAAM,CAAC,EAAE,EAAE,CAAA;KACd,KACA,OAAO,CAAC,SAAS,CAAC,CAAC;IACxB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EACtD,OAAO,EAAE;QACL,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,MAAM,CAAC,EAAE,EAAE,CAAA;KACd,KACA,MAAM,GAAG,SAAS,CAAA;IACvB,aAAa,EAAE,aAAa,CAAA;IAC5B,MAAM,EAAE,aAAa,CAAA;IACrB,mBAAmB,EAAE,SAAS,gBAAgB,EAAE,CAAA;CACnD;AAED,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,CAAA;AAE/E,MAAM,WAAW,UAAU;IACvB,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrE,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3D,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;CAChD;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,eAAe,EAAE,OAAO,CAAA;IACxB,QAAQ,EAAE,OAAO,CAAA;IACjB,gEAAgE;IAChE,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,cAAc,GAAG;IACpD,SAAS,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,MAAM,EAAE,cAAc,CAAA;IACtB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG,gBAAgB,GAAG;IACxD,MAAM,EAAE,wBAAwB,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,gBAAgB,CAAA;CAC7B,CAAA;AAED,MAAM,WAAW,aAAa;IAC1B,eAAe,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACxF,kCAAkC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpG,aAAa,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjE,uBAAuB,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACrF,uBAAuB,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IAC1E,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,WAAW,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC;IAC9C,mBAAmB,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,SAAS,EAAE,CAAC;IAC1D,uBAAuB,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,MAAM,CAAC;IACzD,sBAAsB,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,SAAS,CAAC;IAC5D,yBAAyB,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC;IAC7D,aAAa,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC;IAChD,YAAY,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC;IAC/C,WAAW,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IACjE,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC;IAC1C,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC;IAC1C,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC;IAC1C,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAA;CACrD;AAED,MAAM,WAAW,cAAc;IAC3B,gBAAgB,EAAE,CAAC,QAAQ,KAAA,EAAE,QAAQ,KAAA,KAAK,IAAI,EAAE,CAAC;IACjD,kBAAkB,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;IACxE,wBAAwB,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;IAC9E,kBAAkB,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;IACxE,qBAAqB,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACnF,eAAe,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC5D,sBAAsB,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,SAAS,CAAC;IACrD,uBAAuB,EAAE,CAAC,eAAe,EAAE,SAAS,KAAK,SAAS,CAAC;IACnE,mBAAmB,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC/G,2BAA2B,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,sCAAsC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnG,sBAAsB,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,GAAG,IAAI,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;CACvG;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAA;AAE3E,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAA;AAElF,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAA;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,WAAW,EAAE,OAAO,GAAG,YAAY,CAAA;IACnC,iBAAiB,EAAE,0BAA0B,CAAA;IAC7C,OAAO,EAAE,eAAe,EAAE,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB,eAAe,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,sBAAsB,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;CAC1E;AAED,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,UAAU,CAAC;IAClB,GAAG,EAAE,QAAQ,CAAC;IACd,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,cAAc,CAAC;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,cAAc,CAAC;IAC1B,IAAI,EAAE,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,MAAM,KAAK,IAAI,CAAC;IACtD,aAAa,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,UAAU,EAAE,MAAM,IAAI,CAAA;CACzB"}
|