@noeldemartin/solid-utils 0.6.0-next.3e3ceb79b047f4ec87a416c2f920a13eda7a0df1 → 0.6.0-next.93662083f605ab1c82251296bba0307c629df50a

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.
@@ -63,14 +63,17 @@ function ct(r, t) {
63
63
  }
64
64
  function l(r, t = {}) {
65
65
  var n;
66
- if (r.startsWith("http")) return r;
66
+ if (r.startsWith("http"))
67
+ return r;
67
68
  const [e, s] = r.split(":");
68
69
  if (e && s) {
69
70
  const a = j[e] ?? ((n = t.extraContext) == null ? void 0 : n[e]) ?? null;
70
- if (!a) throw new Error(`Can't expand IRI with unknown prefix: '${r}'`);
71
+ if (!a)
72
+ throw new Error(`Can't expand IRI with unknown prefix: '${r}'`);
71
73
  return a + s;
72
74
  }
73
- if (!t.defaultPrefix) throw new Error(`Can't expand IRI without a default prefix: '${r}'`);
75
+ if (!t.defaultPrefix)
76
+ throw new Error(`Can't expand IRI without a default prefix: '${r}'`);
74
77
  return t.defaultPrefix + e;
75
78
  }
76
79
  class J {
@@ -398,4 +401,4 @@ export {
398
401
  G as x,
399
402
  J as y
400
403
  };
401
- //# sourceMappingURL=io-CMHtz5bu.js.map
404
+ //# sourceMappingURL=io-Bxx0x6OA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"io-Bxx0x6OA.js","sources":["../src/errors/MalformedSolidDocumentError.ts","../src/errors/NetworkRequestError.ts","../src/errors/NotFoundError.ts","../src/errors/UnauthorizedError.ts","../src/helpers/vocabs.ts","../src/models/SolidThing.ts","../src/models/SolidStore.ts","../src/models/SolidDocument.ts","../src/helpers/jsonld.ts","../src/helpers/io.ts"],"sourcesContent":["import { JSError } from '@noeldemartin/utils';\n\nfunction errorMessage(\n documentUrl: string | null,\n documentFormat: SolidDocumentFormat,\n malformationDetails: string,\n): string {\n return documentUrl\n ? `Malformed ${documentFormat} document found at ${documentUrl} - ${malformationDetails}`\n : `Malformed ${documentFormat} document - ${malformationDetails}`;\n}\n\nexport enum SolidDocumentFormat {\n Turtle = 'Turtle',\n}\n\nexport default class MalformedSolidDocumentError extends JSError {\n\n public readonly documentUrl: string | null;\n public readonly documentFormat: SolidDocumentFormat;\n public readonly malformationDetails: string;\n\n constructor(documentUrl: string | null, documentFormat: SolidDocumentFormat, malformationDetails: string) {\n super(errorMessage(documentUrl, documentFormat, malformationDetails));\n\n this.documentUrl = documentUrl;\n this.documentFormat = documentFormat;\n this.malformationDetails = malformationDetails;\n }\n\n}\n","import { JSError } from '@noeldemartin/utils';\nimport type { JSErrorOptions } from '@noeldemartin/utils';\n\nexport default class NetworkRequestError extends JSError {\n\n public readonly url: string;\n\n constructor(url: string, options?: JSErrorOptions) {\n super(`Request failed trying to fetch ${url}`, options);\n\n this.url = url;\n }\n\n}\n","import { JSError } from '@noeldemartin/utils';\n\nexport default class NotFoundError extends JSError {\n\n public readonly url: string;\n\n constructor(url: string) {\n super(`Document with '${url}' url not found`);\n\n this.url = url;\n }\n\n}\n","import { JSError } from '@noeldemartin/utils';\n\nfunction errorMessage(url: string, responseStatus?: number): string {\n const typeInfo = responseStatus === 403 ? ' (Forbidden)' : '';\n\n return `Unauthorized${typeInfo}: ${url}`;\n}\n\nexport default class UnauthorizedError extends JSError {\n\n public readonly url: string;\n public readonly responseStatus?: number;\n\n constructor(url: string, responseStatus?: number) {\n super(errorMessage(url, responseStatus));\n\n this.url = url;\n this.responseStatus = responseStatus;\n }\n\n public get forbidden(): boolean | undefined {\n return typeof this.responseStatus !== 'undefined'\n ? this.responseStatus === 403\n : undefined;\n }\n\n}\n","export type RDFContext = Record<string, string>;\n\nexport interface ExpandIRIOptions {\n defaultPrefix: string;\n extraContext: RDFContext;\n}\n\nconst knownPrefixes: RDFContext = {\n acl: 'http://www.w3.org/ns/auth/acl#',\n foaf: 'http://xmlns.com/foaf/0.1/',\n ldp: 'http://www.w3.org/ns/ldp#',\n pim: 'http://www.w3.org/ns/pim/space#',\n purl: 'http://purl.org/dc/terms/',\n rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n rdfs: 'http://www.w3.org/2000/01/rdf-schema#',\n schema: 'https://schema.org/',\n solid: 'http://www.w3.org/ns/solid/terms#',\n vcard: 'http://www.w3.org/2006/vcard/ns#',\n};\n\nexport function defineIRIPrefix(name: string, value: string): void {\n knownPrefixes[name] = value;\n}\n\nexport function expandIRI(iri: string, options: Partial<ExpandIRIOptions> = {}): string {\n if (iri.startsWith('http'))\n return iri;\n\n const [prefix, name] = iri.split(':');\n\n if (prefix && name) {\n const expandedPrefix = knownPrefixes[prefix] ?? options.extraContext?.[prefix] ?? null;\n\n if (!expandedPrefix)\n throw new Error(`Can't expand IRI with unknown prefix: '${iri}'`);\n\n return expandedPrefix + name;\n }\n\n if (!options.defaultPrefix)\n throw new Error(`Can't expand IRI without a default prefix: '${iri}'`);\n\n return options.defaultPrefix + prefix;\n}\n","import type { Quad } from '@rdfjs/types';\n\nimport { expandIRI } from '@noeldemartin/solid-utils/helpers/vocabs';\n\nexport default class SolidThing {\n\n public readonly url: string;\n private quads: Quad[];\n\n public constructor(url: string, quads: Quad[]) {\n this.url = url;\n this.quads = quads;\n }\n\n public value(property: string): string | undefined {\n return this.quads.find((quad) => quad.predicate.value === expandIRI(property))?.object.value;\n }\n\n public values(property: string): string[] {\n return this.quads\n .filter((quad) => quad.predicate.value === expandIRI(property))\n .map((quad) => quad.object.value);\n }\n\n}\n","import type { BlankNode, Literal, NamedNode, Quad, Variable } from '@rdfjs/types';\n\nimport { expandIRI } from '@noeldemartin/solid-utils/helpers/vocabs';\n\nimport SolidThing from './SolidThing';\n\nexport type Term = NamedNode | Literal | BlankNode | Quad | Variable;\n\nexport default class SolidStore {\n\n private quads: Quad[];\n\n public constructor(quads: Quad[] = []) {\n this.quads = quads;\n }\n\n public isEmpty(): boolean {\n return this.statements.length === 0;\n }\n\n public getQuads(): Quad[] {\n return this.quads.slice(0);\n }\n\n public addQuads(quads: Quad[]): void {\n this.quads.push(...quads);\n }\n\n public statements(subject?: Term | string, predicate?: Term | string, object?: Term | string): Quad[] {\n return this.quads.filter(\n (statement) =>\n (!object || this.termMatches(statement.object, object)) &&\n (!subject || this.termMatches(statement.subject, subject)) &&\n (!predicate || this.termMatches(statement.predicate, predicate)),\n );\n }\n\n public statement(subject?: Term | string, predicate?: Term | string, object?: Term | string): Quad | null {\n const statement = this.quads.find(\n (_statement) =>\n (!object || this.termMatches(_statement.object, object)) &&\n (!subject || this.termMatches(_statement.subject, subject)) &&\n (!predicate || this.termMatches(_statement.predicate, predicate)),\n );\n\n return statement ?? null;\n }\n\n public contains(subject: string, predicate?: string, object?: string): boolean {\n return this.statement(subject, predicate, object) !== null;\n }\n\n public getThing(subject: string): SolidThing {\n const statements = this.statements(subject);\n\n return new SolidThing(subject, statements);\n }\n\n protected expandIRI(iri: string): string {\n return expandIRI(iri);\n }\n\n protected termMatches(term: Term, value: Term | string): boolean {\n if (typeof value === 'string') {\n return this.expandIRI(value) === term.value;\n }\n\n return term.termType === term.termType && term.value === value.value;\n }\n\n}\n","import { arrayFilter, parseDate, stringMatch } from '@noeldemartin/utils';\nimport type { Quad } from '@rdfjs/types';\n\nimport { expandIRI } from '@noeldemartin/solid-utils/helpers/vocabs';\n\nimport SolidStore from './SolidStore';\n\nexport enum SolidDocumentPermission {\n Read = 'read',\n Write = 'write',\n Append = 'append',\n Control = 'control',\n}\n\nexport default class SolidDocument extends SolidStore {\n\n public readonly url: string;\n public readonly headers: Headers;\n\n public constructor(url: string, quads: Quad[], headers: Headers) {\n super(quads);\n\n this.url = url;\n this.headers = headers;\n }\n\n public isACPResource(): boolean {\n return !!this.headers\n .get('Link')\n ?.match(/<http:\\/\\/www\\.w3\\.org\\/ns\\/solid\\/acp#AccessControlResource>;[^,]+rel=\"type\"/);\n }\n\n public isPersonalProfile(): boolean {\n return !!this.statement(this.url, expandIRI('rdf:type'), expandIRI('foaf:PersonalProfileDocument'));\n }\n\n public isStorage(): boolean {\n return !!this.headers.get('Link')?.match(/<http:\\/\\/www\\.w3\\.org\\/ns\\/pim\\/space#Storage>;[^,]+rel=\"type\"/);\n }\n\n public isUserWritable(): boolean {\n return this.getUserPermissions().includes(SolidDocumentPermission.Write);\n }\n\n public getUserPermissions(): SolidDocumentPermission[] {\n return this.getPermissionsFromWAC('user');\n }\n\n public getPublicPermissions(): SolidDocumentPermission[] {\n return this.getPermissionsFromWAC('public');\n }\n\n public getLastModified(): Date | null {\n return (\n parseDate(this.headers.get('last-modified')) ??\n parseDate(this.statement(this.url, 'purl:modified')?.object.value) ??\n this.getLatestDocumentDate() ??\n null\n );\n }\n\n protected expandIRI(iri: string): string {\n return expandIRI(iri, { defaultPrefix: this.url });\n }\n\n private getLatestDocumentDate(): Date | null {\n const dates = [...this.statements(undefined, 'purl:modified'), ...this.statements(undefined, 'purl:created')]\n .map((statement) => parseDate(statement.object.value))\n .filter((date): date is Date => date !== null);\n\n return dates.length > 0 ? dates.reduce((a, b) => (a > b ? a : b)) : null;\n }\n\n private getPermissionsFromWAC(type: string): SolidDocumentPermission[] {\n const wacAllow = this.headers.get('WAC-Allow') ?? '';\n const publicModes = stringMatch<2>(wacAllow, new RegExp(`${type}=\"([^\"]+)\"`))?.[1] ?? '';\n\n return arrayFilter([\n publicModes.includes('read') && SolidDocumentPermission.Read,\n publicModes.includes('write') && SolidDocumentPermission.Write,\n publicModes.includes('append') && SolidDocumentPermission.Append,\n publicModes.includes('control') && SolidDocumentPermission.Control,\n ]);\n }\n\n}\n","import jsonld from 'jsonld';\nimport type { JsonLdDocument } from 'jsonld';\n\nexport type JsonLD = Partial<{\n '@context': Record<string, unknown>;\n '@id': string;\n '@type': null | string | string[];\n}> & { [k: string]: unknown };\n\nexport type JsonLDResource = Omit<JsonLD, '@id'> & { '@id': string };\nexport type JsonLDGraph = {\n '@context'?: Record<string, unknown>;\n '@graph': JsonLDResource[];\n};\n\nexport async function compactJsonLDGraph(json: JsonLDGraph): Promise<JsonLDGraph> {\n const compactedJsonLD = await jsonld.compact(json as JsonLdDocument, {});\n\n if ('@graph' in compactedJsonLD) {\n return compactedJsonLD as JsonLDGraph;\n }\n\n if ('@id' in compactedJsonLD) {\n return { '@graph': [compactedJsonLD] } as JsonLDGraph;\n }\n\n return { '@graph': [] };\n}\n\nexport function isJsonLDGraph(json: JsonLD): json is JsonLDGraph {\n return '@graph' in json;\n}\n","import jsonld from 'jsonld';\nimport md5 from 'md5';\nimport { arr, arrayFilter, arrayReplace, objectWithoutEmpty, stringMatchAll, tap } from '@noeldemartin/utils';\nimport { BlankNode as N3BlankNode, Quad as N3Quad, Parser, Writer } from 'n3';\nimport type { JsonLdDocument } from 'jsonld';\nimport type { Quad } from '@rdfjs/types';\nimport type { Term } from 'n3';\n\nimport SolidDocument from '@noeldemartin/solid-utils/models/SolidDocument';\n\n// eslint-disable-next-line max-len\nimport MalformedSolidDocumentError, { SolidDocumentFormat } from '@noeldemartin/solid-utils/errors/MalformedSolidDocumentError';\nimport NetworkRequestError from '@noeldemartin/solid-utils/errors/NetworkRequestError';\nimport NotFoundError from '@noeldemartin/solid-utils/errors/NotFoundError';\nimport UnauthorizedError from '@noeldemartin/solid-utils/errors/UnauthorizedError';\nimport { isJsonLDGraph } from '@noeldemartin/solid-utils/helpers/jsonld';\nimport type { JsonLD, JsonLDGraph, JsonLDResource } from '@noeldemartin/solid-utils/helpers/jsonld';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport declare type AnyFetch = (input: any, options?: any) => Promise<Response>;\nexport declare type TypedFetch = (input: RequestInfo, options?: RequestInit) => Promise<Response>;\nexport declare type Fetch = TypedFetch | AnyFetch;\n\nconst ANONYMOUS_PREFIX = 'anonymous://';\nconst ANONYMOUS_PREFIX_LENGTH = ANONYMOUS_PREFIX.length;\n\nasync function fetchRawSolidDocument(\n url: string,\n options?: FetchSolidDocumentOptions,\n): Promise<{ body: string; headers: Headers }> {\n const requestOptions: RequestInit = {\n headers: { Accept: 'text/turtle' },\n };\n\n if (options?.cache) {\n requestOptions.cache = options.cache;\n }\n\n try {\n const fetch = options?.fetch ?? window.fetch;\n const response = await fetch(url, requestOptions);\n\n if (response.status === 404) throw new NotFoundError(url);\n\n if ([401, 403].includes(response.status)) throw new UnauthorizedError(url, response.status);\n\n const body = await response.text();\n\n return {\n body,\n headers: response.headers,\n };\n } catch (error) {\n if (error instanceof UnauthorizedError) throw error;\n\n if (error instanceof NotFoundError) throw error;\n\n throw new NetworkRequestError(url, { cause: error });\n }\n}\n\nfunction normalizeBlankNodes(quads: Quad[]): Quad[] {\n const normalizedQuads = quads.slice(0);\n const quadsIndexes: Record<string, Set<number>> = {};\n const blankNodeIds = arr(quads)\n .flatMap((quad, index) =>\n tap(\n arrayFilter([\n quad.object.termType === 'BlankNode' ? quad.object.value : null,\n quad.subject.termType === 'BlankNode' ? quad.subject.value : null,\n ]),\n (ids) => ids.forEach((id) => (quadsIndexes[id] ??= new Set()).add(index)),\n ))\n .filter()\n .unique();\n\n for (const originalId of blankNodeIds) {\n const quadIndexes = quadsIndexes[originalId] as Set<number>;\n const normalizedId = md5(\n arr(quadIndexes)\n .map((index) => quads[index] as Quad)\n .filter(({ subject: { termType, value } }) => termType === 'BlankNode' && value === originalId)\n .map(({ predicate, object }) =>\n object.termType === 'BlankNode' ? predicate.value : predicate.value + object.value)\n .sorted()\n .join(),\n );\n\n for (const index of quadIndexes) {\n const quad = normalizedQuads[index] as Quad;\n const terms: Record<string, Term> = {\n subject: quad.subject as Term,\n object: quad.object as Term,\n };\n\n for (const [termName, termValue] of Object.entries(terms)) {\n if (termValue.termType !== 'BlankNode' || termValue.value !== originalId) continue;\n\n terms[termName] = new N3BlankNode(normalizedId) as Term;\n }\n\n arrayReplace(\n normalizedQuads,\n quad,\n new N3Quad(terms.subject as Term, quad.predicate as Term, terms.object as Term),\n );\n }\n }\n\n return normalizedQuads;\n}\n\nfunction normalizeQuads(quads: Quad[]): string {\n return quads\n .map((quad) => ' ' + quadToTurtle(quad))\n .sort()\n .join('\\n');\n}\n\nfunction preprocessSubjects(json: JsonLD): void {\n if (!json['@id']?.startsWith('#')) {\n return;\n }\n\n json['@id'] = ANONYMOUS_PREFIX + json['@id'];\n}\n\nfunction postprocessSubjects(quads: Quad[]): void {\n for (const quad of quads) {\n if (!quad.subject.value.startsWith(ANONYMOUS_PREFIX)) {\n continue;\n }\n\n quad.subject.value = quad.subject.value.slice(ANONYMOUS_PREFIX_LENGTH);\n }\n}\n\nexport interface FetchSolidDocumentOptions {\n fetch?: Fetch;\n cache?: RequestCache;\n}\n\nexport interface ParsingOptions {\n baseIRI: string;\n normalizeBlankNodes: boolean;\n}\n\nexport interface RDFGraphData {\n quads: Quad[];\n containsRelativeIRIs: boolean;\n}\n\nexport async function createSolidDocument(url: string, body: string, fetch?: Fetch): Promise<SolidDocument> {\n fetch = fetch ?? window.fetch.bind(window);\n\n const statements = await turtleToQuads(body);\n\n await fetch(url, {\n method: 'PUT',\n headers: { 'Content-Type': 'text/turtle' },\n body,\n });\n\n return new SolidDocument(url, statements, new Headers({}));\n}\n\nexport async function fetchSolidDocument(url: string, options?: FetchSolidDocumentOptions): Promise<SolidDocument> {\n const { body: data, headers } = await fetchRawSolidDocument(url, options);\n const statements = await turtleToQuads(data, { baseIRI: url });\n\n return new SolidDocument(url, statements, headers);\n}\n\nexport async function fetchSolidDocumentIfFound(\n url: string,\n options?: FetchSolidDocumentOptions,\n): Promise<SolidDocument | null> {\n try {\n const document = await fetchSolidDocument(url, options);\n\n return document;\n } catch (error) {\n if (!(error instanceof NotFoundError)) throw error;\n\n return null;\n }\n}\n\nexport async function jsonldToQuads(json: JsonLD, baseIRI?: string): Promise<Quad[]> {\n if (isJsonLDGraph(json)) {\n const graphQuads = await Promise.all(json['@graph'].map((resource) => jsonldToQuads(resource, baseIRI)));\n\n return graphQuads.flat();\n }\n\n preprocessSubjects(json);\n\n const quads = await (jsonld.toRDF(json as JsonLdDocument, { base: baseIRI }) as Promise<Quad[]>);\n\n postprocessSubjects(quads);\n\n return quads;\n}\n\nexport function normalizeSparql(sparql: string): string {\n const quads = sparqlToQuadsSync(sparql);\n\n return Object.entries(quads)\n .reduce((normalizedOperations, [operation, _quads]) => {\n const normalizedQuads = normalizeQuads(_quads);\n\n return normalizedOperations.concat(`${operation.toUpperCase()} DATA {\\n${normalizedQuads}\\n}`);\n }, [] as string[])\n .join(' ;\\n');\n}\n\nexport function normalizeTurtle(sparql: string): string {\n const quads = turtleToQuadsSync(sparql);\n\n return normalizeQuads(quads);\n}\n\nexport function parseTurtle(turtle: string, options: Partial<ParsingOptions> = {}): Promise<RDFGraphData> {\n const parserOptions = objectWithoutEmpty({ baseIRI: options.baseIRI });\n const parser = new Parser(parserOptions);\n const data: RDFGraphData = {\n quads: [],\n containsRelativeIRIs: false,\n };\n\n return new Promise((resolve, reject) => {\n const resolveRelativeIRI = parser._resolveRelativeIRI;\n\n parser._resolveRelativeIRI = (...args) => {\n data.containsRelativeIRIs = true;\n parser._resolveRelativeIRI = resolveRelativeIRI;\n\n return parser._resolveRelativeIRI(...args);\n };\n\n parser.parse(turtle, (error, quad) => {\n if (error) {\n reject(\n new MalformedSolidDocumentError(options.baseIRI ?? null, SolidDocumentFormat.Turtle, error.message),\n );\n\n return;\n }\n\n if (!quad) {\n // data.quads = options.normalizeBlankNodes\n // ? normalizeBlankNodes(data.quads)\n // : data.quads;\n\n resolve(data);\n\n return;\n }\n\n data.quads.push(quad);\n });\n });\n}\n\nexport async function quadsToJsonLD(quads: Quad[]): Promise<JsonLDGraph> {\n const graph = await jsonld.fromRDF(quads);\n\n return {\n '@graph': graph as JsonLDResource[],\n };\n}\n\nexport function quadsToTurtle(quads: Quad[]): string {\n const writer = new Writer();\n\n return writer.quadsToString(quads);\n}\n\nexport function quadToTurtle(quad: Quad): string {\n const writer = new Writer();\n\n return writer.quadsToString([quad]).slice(0, -1);\n}\n\nexport async function solidDocumentExists(url: string, options?: FetchSolidDocumentOptions): Promise<boolean> {\n try {\n const document = await fetchSolidDocument(url, options);\n\n return !document.isEmpty();\n } catch (error) {\n return false;\n }\n}\n\nexport async function sparqlToQuads(\n sparql: string,\n options: Partial<ParsingOptions> = {},\n): Promise<Record<string, Quad[]>> {\n const operations = stringMatchAll<3>(sparql, /(\\w+) DATA {([^}]+)}/g);\n const quads: Record<string, Quad[]> = {};\n\n await Promise.all(\n [...operations].map(async (operation) => {\n const operationName = operation[1].toLowerCase();\n const operationBody = operation[2];\n\n quads[operationName] = await turtleToQuads(operationBody, options);\n }),\n );\n\n return quads;\n}\n\nexport function sparqlToQuadsSync(sparql: string, options: Partial<ParsingOptions> = {}): Record<string, Quad[]> {\n const operations = stringMatchAll<3>(sparql, /(\\w+) DATA {([^}]+)}/g);\n const quads: Record<string, Quad[]> = {};\n\n for (const operation of operations) {\n const operationName = operation[1].toLowerCase();\n const operationBody = operation[2];\n\n quads[operationName] = turtleToQuadsSync(operationBody, options);\n }\n\n return quads;\n}\n\nexport async function turtleToQuads(turtle: string, options: Partial<ParsingOptions> = {}): Promise<Quad[]> {\n const { quads } = await parseTurtle(turtle, options);\n\n return quads;\n}\n\nexport function turtleToQuadsSync(turtle: string, options: Partial<ParsingOptions> = {}): Quad[] {\n const parserOptions = objectWithoutEmpty({ baseIRI: options.baseIRI });\n const parser = new Parser(parserOptions);\n\n try {\n const quads = parser.parse(turtle);\n\n return options.normalizeBlankNodes ? normalizeBlankNodes(quads) : quads;\n } catch (error) {\n throw new MalformedSolidDocumentError(\n options.baseIRI ?? null,\n SolidDocumentFormat.Turtle,\n (error as Error).message ?? '',\n );\n }\n}\n\nexport async function updateSolidDocument(url: string, body: string, fetch?: Fetch): Promise<void> {\n fetch = fetch ?? window.fetch.bind(window);\n\n await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/sparql-update' },\n body,\n });\n}\n"],"names":["errorMessage","documentUrl","documentFormat","malformationDetails","SolidDocumentFormat","MalformedSolidDocumentError","JSError","__publicField","NetworkRequestError","url","options","NotFoundError","responseStatus","UnauthorizedError","knownPrefixes","defineIRIPrefix","name","value","expandIRI","iri","prefix","expandedPrefix","_a","SolidThing","quads","property","quad","SolidStore","subject","predicate","object","statement","_statement","statements","term","SolidDocumentPermission","SolidDocument","headers","parseDate","dates","date","a","b","type","wacAllow","publicModes","stringMatch","arrayFilter","compactJsonLDGraph","json","compactedJsonLD","jsonld","isJsonLDGraph","ANONYMOUS_PREFIX","ANONYMOUS_PREFIX_LENGTH","fetchRawSolidDocument","requestOptions","response","error","normalizeBlankNodes","normalizedQuads","quadsIndexes","blankNodeIds","arr","index","tap","ids","id","originalId","quadIndexes","normalizedId","md5","termType","terms","termName","termValue","N3BlankNode","arrayReplace","N3Quad","normalizeQuads","quadToTurtle","preprocessSubjects","postprocessSubjects","createSolidDocument","body","fetch","turtleToQuads","fetchSolidDocument","data","fetchSolidDocumentIfFound","jsonldToQuads","baseIRI","resource","normalizeSparql","sparql","sparqlToQuadsSync","normalizedOperations","operation","_quads","normalizeTurtle","turtleToQuadsSync","parseTurtle","turtle","parserOptions","objectWithoutEmpty","parser","Parser","resolve","reject","resolveRelativeIRI","args","quadsToJsonLD","quadsToTurtle","Writer","solidDocumentExists","sparqlToQuads","operations","stringMatchAll","operationName","operationBody","updateSolidDocument"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  var I = Object.defineProperty;
2
2
  var L = (t, e, r) => e in t ? I(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
3
3
  var f = (t, e, r) => L(t, typeof e != "symbol" ? e + "" : e, r);
4
- import { f as m, S as k, U as Q, c as H, u as J, s as N, a as z } from "./io-CMHtz5bu.js";
5
- import { M as yt, N as vt, d as Tt, w as gt, b as xt, x as Pt, y as Ut, m as bt, r as $t, v as Et, o as jt, j as St, n as Dt, e as qt, p as Ct, h as Rt, q as At, g as It, i as Lt, k as kt, t as Qt, l as Ht } from "./io-CMHtz5bu.js";
4
+ import { f as m, S as k, U as Q, c as H, u as J, s as N, a as z } from "./io-Bxx0x6OA.js";
5
+ import { M as yt, N as vt, d as Tt, w as gt, b as xt, x as Pt, y as Ut, m as bt, r as $t, v as Et, o as jt, j as St, n as Dt, e as qt, p as Ct, h as Rt, q as At, g as It, i as Lt, k as kt, t as Qt, l as Ht } from "./io-Bxx0x6OA.js";
6
6
  import { JSError as E, silenced as j, urlRoot as O, urlRoute as W, urlParentDirectory as U, objectWithoutEmpty as h, arrayUnique as F, tap as M, objectDeepClone as _, urlParse as B, uuid as S, isObject as b, isArray as G, arr as V, urlResolve as K, requireUrlParentDirectory as D } from "@noeldemartin/utils";
7
7
  function X(t, e) {
8
8
  return e = e ?? t, typeof t == "string" ? `${t} (returned ${e.status} status code)` : `Request to ${e.url} returned ${e.status} status code`;
@@ -1 +1 @@
1
- {"version":3,"file":"noeldemartin-solid-utils.js","sources":["../src/errors/UnsuccessfulNetworkRequestError.ts","../src/errors/UnsupportedAuthorizationProtocolError.ts","../src/helpers/auth.ts","../src/helpers/identifiers.ts","../src/helpers/interop.ts","../src/helpers/wac.ts"],"sourcesContent":["import { JSError } from '@noeldemartin/utils';\n\nfunction getErrorMessage(messageOrResponse: string | Response, response?: Response): string {\n response = response ?? (messageOrResponse as Response);\n\n return typeof messageOrResponse === 'string'\n ? `${messageOrResponse} (returned ${response.status} status code)`\n : `Request to ${response.url} returned ${response.status} status code`;\n}\n\nexport default class UnsuccessfulRequestError extends JSError {\n\n public response: Response;\n\n constructor(response: Response);\n constructor(message: string, response: Response);\n constructor(messageOrResponse: string | Response, response?: Response) {\n super(getErrorMessage(messageOrResponse, response));\n\n this.response = response ?? (messageOrResponse as Response);\n }\n\n}\n","import { JSError } from '@noeldemartin/utils';\nimport type { JSErrorOptions } from '@noeldemartin/utils';\n\nexport default class UnsupportedAuthorizationProtocolError extends JSError {\n\n public readonly url: string;\n public readonly protocol: string;\n\n constructor(url: string, protocol: string, options?: JSErrorOptions) {\n super(`The resource at ${url} is using an unsupported authorization protocol (${protocol})`, options);\n\n this.url = url;\n this.protocol = protocol;\n }\n\n}\n","import { arrayUnique, objectWithoutEmpty, silenced, urlParentDirectory, urlRoot, urlRoute } from '@noeldemartin/utils';\n\nimport SolidStore from '../models/SolidStore';\nimport UnauthorizedError from '../errors/UnauthorizedError';\nimport type SolidDocument from '../models/SolidDocument';\n\nimport { fetchSolidDocument } from './io';\nimport type { Fetch, FetchSolidDocumentOptions } from './io';\n\nexport interface SolidUserProfile {\n webId: string;\n storageUrls: [string, ...string[]];\n cloaked: boolean;\n writableProfileUrl: string | null;\n name?: string;\n avatarUrl?: string;\n oidcIssuerUrl?: string;\n publicTypeIndexUrl?: string;\n privateTypeIndexUrl?: string;\n}\n\nasync function fetchExtendedUserProfile(\n webIdDocument: SolidDocument,\n options?: FetchSolidDocumentOptions,\n): Promise<{\n store: SolidStore;\n cloaked: boolean;\n writableProfileUrl: string | null;\n}> {\n const store = new SolidStore(webIdDocument.getQuads());\n const documents: Record<string, SolidDocument | false | null> = { [webIdDocument.url]: webIdDocument };\n const addReferencedDocumentUrls = (document: SolidDocument) => {\n document\n .statements(undefined, 'foaf:isPrimaryTopicOf')\n .map((quad) => quad.object.value)\n .forEach((profileDocumentUrl) => (documents[profileDocumentUrl] = documents[profileDocumentUrl] ?? null));\n document\n .statements(undefined, 'foaf:primaryTopic')\n .map((quad) => quad.subject.value)\n .forEach((profileDocumentUrl) => (documents[profileDocumentUrl] = documents[profileDocumentUrl] ?? null));\n };\n const loadProfileDocuments = async (): Promise<void> => {\n for (const [url, document] of Object.entries(documents)) {\n if (document !== null) {\n continue;\n }\n\n try {\n const _document = await fetchSolidDocument(url, options);\n\n documents[url] = _document;\n store.addQuads(_document.getQuads());\n\n addReferencedDocumentUrls(_document);\n } catch (error) {\n if (error instanceof UnauthorizedError) {\n documents[url] = false;\n\n continue;\n }\n\n throw error;\n }\n }\n };\n\n addReferencedDocumentUrls(webIdDocument);\n\n do {\n await loadProfileDocuments();\n } while (Object.values(documents).some((document) => document === null));\n\n return {\n store,\n cloaked: Object.values(documents).some((document) => document === false),\n writableProfileUrl: webIdDocument.isUserWritable()\n ? webIdDocument.url\n : (Object.values(documents).find(\n (document): document is SolidDocument => !!document && document.isUserWritable(),\n )?.url ?? null),\n };\n}\n\nasync function fetchUserProfile(webId: string, options: FetchUserProfileOptions = {}): Promise<SolidUserProfile> {\n const requestOptions: FetchSolidDocumentOptions = {\n fetch: options.fetch,\n\n // Needed for CSS v7.1.3.\n // See https://github.com/CommunitySolidServer/CommunitySolidServer/issues/1972\n cache: 'no-store',\n };\n\n const documentUrl = urlRoute(webId);\n const document = await fetchSolidDocument(documentUrl, requestOptions);\n\n if (!document.isPersonalProfile() && !document.contains(webId, 'solid:oidcIssuer')) {\n throw new Error(`${webId} is not a valid webId.`);\n }\n\n const { store, writableProfileUrl, cloaked } = await fetchExtendedUserProfile(document, options);\n const storageUrls = store.statements(webId, 'pim:storage').map((storage) => storage.object.value);\n const publicTypeIndex = store.statement(webId, 'solid:publicTypeIndex');\n const privateTypeIndex = store.statement(webId, 'solid:privateTypeIndex');\n\n let parentUrl = urlParentDirectory(documentUrl);\n while (parentUrl && storageUrls.length === 0) {\n const parentDocument = await silenced(fetchSolidDocument(parentUrl, requestOptions));\n\n if (parentDocument?.isStorage()) {\n storageUrls.push(parentUrl);\n\n break;\n }\n\n parentUrl = urlParentDirectory(parentUrl);\n }\n\n if (storageUrls.length === 0) {\n throw new Error(`Could not find any storage for ${webId}.`);\n }\n\n await options.onLoaded?.(store);\n\n return {\n webId,\n cloaked,\n writableProfileUrl,\n storageUrls: arrayUnique(storageUrls) as [string, ...string[]],\n ...objectWithoutEmpty({\n name: store.statement(webId, 'vcard:fn')?.object.value ?? store.statement(webId, 'foaf:name')?.object.value,\n avatarUrl:\n store.statement(webId, 'vcard:hasPhoto')?.object.value ??\n store.statement(webId, 'foaf:img')?.object.value,\n oidcIssuerUrl: store.statement(webId, 'solid:oidcIssuer')?.object.value,\n publicTypeIndexUrl: publicTypeIndex?.object.value,\n privateTypeIndexUrl: privateTypeIndex?.object.value,\n }),\n };\n}\n\nexport interface FetchUserProfileOptions {\n fetch?: Fetch;\n onLoaded?(store: SolidStore): Promise<unknown> | unknown;\n}\n\nexport interface FetchLoginUserProfileOptions extends FetchUserProfileOptions {\n required?: boolean;\n}\n\nexport async function fetchLoginUserProfile(\n loginUrl: string,\n options: FetchLoginUserProfileOptions = {},\n): Promise<SolidUserProfile | null> {\n if (options.required) {\n return fetchUserProfile(loginUrl, options);\n }\n\n const fetchProfile = silenced((url) => fetchUserProfile(url, options));\n\n return (\n (await fetchProfile(loginUrl)) ??\n (await fetchProfile(loginUrl.replace(/\\/$/, '').concat('/profile/card#me'))) ??\n (await fetchProfile(urlRoot(loginUrl).concat('/profile/card#me')))\n );\n}\n","import { arr, isArray, isObject, objectDeepClone, objectWithoutEmpty, tap, urlParse, uuid } from '@noeldemartin/utils';\nimport type { UrlParts } from '@noeldemartin/utils';\nimport type { JsonLD, JsonLDResource } from '@noeldemartin/solid-utils/helpers';\n\nexport interface SubjectParts {\n containerUrl?: string;\n documentName?: string;\n resourceHash?: string;\n}\n\nfunction getContainerPath(parts: UrlParts): string | null {\n if (!parts.path || !parts.path.startsWith('/')) return null;\n\n if (parts.path.match(/^\\/[^/]*$/)) return '/';\n\n return `/${arr(parts.path.split('/')).filter().slice(0, -1).join('/')}/`.replace('//', '/');\n}\n\nfunction getContainerUrl(parts: UrlParts): string | null {\n const containerPath = getContainerPath(parts);\n\n return parts.protocol && parts.domain\n ? `${parts.protocol}://${parts.domain}${containerPath ?? '/'}`\n : containerPath;\n}\n\nfunction __mintJsonLDIdentifiers(jsonld: JsonLD): void {\n if (!('@type' in jsonld) || '@value' in jsonld) return;\n\n jsonld['@id'] = jsonld['@id'] ?? uuid();\n\n for (const propertyValue of Object.values(jsonld)) {\n if (isObject(propertyValue)) __mintJsonLDIdentifiers(propertyValue);\n\n if (isArray(propertyValue)) propertyValue.forEach((value) => isObject(value) && __mintJsonLDIdentifiers(value));\n }\n}\n\nexport function mintJsonLDIdentifiers(jsonld: JsonLD): JsonLDResource {\n return tap(objectDeepClone(jsonld) as JsonLDResource, (clone) => __mintJsonLDIdentifiers(clone));\n}\n\nexport function parseResourceSubject(subject: string): SubjectParts {\n const parts = urlParse(subject);\n\n return !parts\n ? {}\n : objectWithoutEmpty({\n containerUrl: getContainerUrl(parts),\n documentName: parts.path ? parts.path.split('/').pop() : null,\n resourceHash: parts.fragment,\n });\n}\n","import { uuid } from '@noeldemartin/utils';\n\nimport {\n createSolidDocument,\n fetchSolidDocument,\n solidDocumentExists,\n updateSolidDocument,\n} from '@noeldemartin/solid-utils/helpers/io';\nimport type { Fetch } from '@noeldemartin/solid-utils/helpers/io';\nimport type { SolidUserProfile } from '@noeldemartin/solid-utils/helpers/auth';\n\ntype TypeIndexType = 'public' | 'private';\n\nasync function mintTypeIndexUrl(user: SolidUserProfile, type: TypeIndexType, fetch?: Fetch): Promise<string> {\n fetch = fetch ?? window.fetch.bind(fetch);\n\n const storageUrl = user.storageUrls[0];\n const typeIndexUrl = `${storageUrl}settings/${type}TypeIndex`;\n\n return (await solidDocumentExists(typeIndexUrl, { fetch }))\n ? `${storageUrl}settings/${type}TypeIndex-${uuid()}`\n : typeIndexUrl;\n}\n\nasync function createTypeIndex(user: SolidUserProfile, type: TypeIndexType, fetch?: Fetch) {\n if (user.writableProfileUrl === null) {\n throw new Error('Can\\'t create type index without a writable profile document');\n }\n\n fetch = fetch ?? window.fetch.bind(fetch);\n\n const typeIndexUrl = await mintTypeIndexUrl(user, type, fetch);\n const typeIndexBody =\n type === 'public'\n ? '<> a <http://www.w3.org/ns/solid/terms#TypeIndex> .'\n : `\n <> a\n <http://www.w3.org/ns/solid/terms#TypeIndex>,\n <http://www.w3.org/ns/solid/terms#UnlistedDocument> .\n `;\n const profileUpdateBody = `\n INSERT DATA {\n <${user.webId}> <http://www.w3.org/ns/solid/terms#${type}TypeIndex> <${typeIndexUrl}> .\n }\n `;\n\n await createSolidDocument(typeIndexUrl, typeIndexBody, fetch);\n await updateSolidDocument(user.writableProfileUrl, profileUpdateBody, fetch);\n\n if (type === 'public') {\n // TODO This is currently implemented in soukai-solid.\n }\n\n return typeIndexUrl;\n}\n\n/**\n * @deprecated Use soukai-solid instead\n */\nasync function findRegistrations(\n typeIndexUrl: string,\n type: string | string[],\n predicate: string,\n fetch?: Fetch,\n): Promise<string[]> {\n const typeIndex = await fetchSolidDocument(typeIndexUrl, { fetch });\n const types = Array.isArray(type) ? type : [type];\n\n return types\n .map((_type) =>\n typeIndex\n .statements(undefined, 'rdf:type', 'solid:TypeRegistration')\n .filter((statement) => typeIndex.contains(statement.subject.value, 'solid:forClass', _type))\n .map((statement) => typeIndex.statements(statement.subject.value, predicate))\n .flat()\n .map((statement) => statement.object.value)\n .filter((url) => !!url))\n .flat();\n}\n\n/**\n * @deprecated Use soukai-solid instead\n */\nexport async function createPublicTypeIndex(user: SolidUserProfile, fetch?: Fetch): Promise<string> {\n return createTypeIndex(user, 'public', fetch);\n}\n\n/**\n * @deprecated Use soukai-solid instead\n */\nexport async function createPrivateTypeIndex(user: SolidUserProfile, fetch?: Fetch): Promise<string> {\n return createTypeIndex(user, 'private', fetch);\n}\n\n/**\n * @deprecated Use soukai-solid instead\n */\nexport async function findContainerRegistrations(\n typeIndexUrl: string,\n type: string | string[],\n fetch?: Fetch,\n): Promise<string[]> {\n return findRegistrations(typeIndexUrl, type, 'solid:instanceContainer', fetch);\n}\n\n/**\n * @deprecated Use soukai-solid instead\n */\nexport async function findInstanceRegistrations(\n typeIndexUrl: string,\n type: string | string[],\n fetch?: Fetch,\n): Promise<string[]> {\n return findRegistrations(typeIndexUrl, type, 'solid:instance', fetch);\n}\n","import { objectWithoutEmpty, requireUrlParentDirectory, urlResolve } from '@noeldemartin/utils';\n\n// eslint-disable-next-line max-len\nimport UnsupportedAuthorizationProtocolError from '@noeldemartin/solid-utils/errors/UnsupportedAuthorizationProtocolError';\nimport { fetchSolidDocumentIfFound } from '@noeldemartin/solid-utils/helpers/io';\nimport type SolidDocument from '@noeldemartin/solid-utils/models/SolidDocument';\nimport type { Fetch } from '@noeldemartin/solid-utils/helpers/io';\n\nasync function fetchACLResourceUrl(resourceUrl: string, fetch: Fetch): Promise<string> {\n fetch = fetch ?? window.fetch.bind(window);\n\n const resourceHead = await fetch(resourceUrl, { method: 'HEAD' });\n const linkHeader = resourceHead.headers.get('Link') ?? '';\n const url = linkHeader.match(/<([^>]+)>;\\s*rel=\"acl\"/)?.[1] ?? null;\n\n if (!url) {\n throw new Error(`Could not find ACL Resource for '${resourceUrl}'`);\n }\n\n return urlResolve(requireUrlParentDirectory(resourceUrl), url);\n}\n\nasync function fetchEffectiveACL(\n resourceUrl: string,\n fetch: Fetch,\n aclResourceUrl?: string | null,\n): Promise<SolidDocument> {\n aclResourceUrl = aclResourceUrl ?? (await fetchACLResourceUrl(resourceUrl, fetch));\n\n const aclDocument = await fetchSolidDocumentIfFound(aclResourceUrl ?? '', { fetch });\n\n if (!aclDocument) {\n return fetchEffectiveACL(requireUrlParentDirectory(resourceUrl), fetch);\n }\n\n if (aclDocument.isACPResource()) {\n throw new UnsupportedAuthorizationProtocolError(resourceUrl, 'ACP');\n }\n\n return aclDocument;\n}\n\nexport async function fetchSolidDocumentACL(\n documentUrl: string,\n fetch: Fetch,\n): Promise<{\n url: string;\n effectiveUrl: string;\n document: SolidDocument;\n}> {\n const url = await fetchACLResourceUrl(documentUrl, fetch);\n const document = await fetchEffectiveACL(documentUrl, fetch, url);\n\n return objectWithoutEmpty({\n url,\n effectiveUrl: document.url,\n document,\n });\n}\n"],"names":["getErrorMessage","messageOrResponse","response","UnsuccessfulRequestError","JSError","__publicField","UnsupportedAuthorizationProtocolError","url","protocol","options","fetchExtendedUserProfile","webIdDocument","store","SolidStore","documents","addReferencedDocumentUrls","document","quad","profileDocumentUrl","loadProfileDocuments","_document","fetchSolidDocument","error","UnauthorizedError","_a","fetchUserProfile","webId","requestOptions","documentUrl","urlRoute","writableProfileUrl","cloaked","storageUrls","storage","publicTypeIndex","privateTypeIndex","parentUrl","urlParentDirectory","parentDocument","silenced","arrayUnique","objectWithoutEmpty","_b","_c","_d","_e","_f","fetchLoginUserProfile","loginUrl","fetchProfile","urlRoot","getContainerPath","parts","arr","getContainerUrl","containerPath","__mintJsonLDIdentifiers","jsonld","uuid","propertyValue","isObject","isArray","value","mintJsonLDIdentifiers","tap","objectDeepClone","clone","parseResourceSubject","subject","urlParse","mintTypeIndexUrl","user","type","fetch","storageUrl","typeIndexUrl","solidDocumentExists","createTypeIndex","typeIndexBody","profileUpdateBody","createSolidDocument","updateSolidDocument","findRegistrations","predicate","typeIndex","_type","statement","createPublicTypeIndex","createPrivateTypeIndex","findContainerRegistrations","findInstanceRegistrations","fetchACLResourceUrl","resourceUrl","urlResolve","requireUrlParentDirectory","fetchEffectiveACL","aclResourceUrl","aclDocument","fetchSolidDocumentIfFound","fetchSolidDocumentACL"],"mappings":"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"}
1
+ {"version":3,"file":"noeldemartin-solid-utils.js","sources":["../src/errors/UnsuccessfulNetworkRequestError.ts","../src/errors/UnsupportedAuthorizationProtocolError.ts","../src/helpers/auth.ts","../src/helpers/identifiers.ts","../src/helpers/interop.ts","../src/helpers/wac.ts"],"sourcesContent":["import { JSError } from '@noeldemartin/utils';\n\nfunction getErrorMessage(messageOrResponse: string | Response, response?: Response): string {\n response = response ?? messageOrResponse as Response;\n\n return typeof messageOrResponse === 'string'\n ? `${messageOrResponse} (returned ${response.status} status code)`\n : `Request to ${response.url} returned ${response.status} status code`;\n}\n\nexport default class UnsuccessfulRequestError extends JSError {\n\n public response: Response;\n\n constructor(response: Response);\n constructor(message: string, response: Response);\n constructor(messageOrResponse: string | Response, response?: Response) {\n super(getErrorMessage(messageOrResponse, response));\n\n this.response = response ?? messageOrResponse as Response;\n }\n\n}\n","import { JSError } from '@noeldemartin/utils';\nimport type { JSErrorOptions } from '@noeldemartin/utils';\n\nexport default class UnsupportedAuthorizationProtocolError extends JSError {\n\n public readonly url: string;\n public readonly protocol: string;\n\n constructor(url: string, protocol: string, options?: JSErrorOptions) {\n super(`The resource at ${url} is using an unsupported authorization protocol (${protocol})`, options);\n\n this.url = url;\n this.protocol = protocol;\n }\n\n}\n","import { arrayUnique, objectWithoutEmpty, silenced, urlParentDirectory, urlRoot, urlRoute } from '@noeldemartin/utils';\n\nimport SolidStore from '../models/SolidStore';\nimport UnauthorizedError from '../errors/UnauthorizedError';\nimport type SolidDocument from '../models/SolidDocument';\n\nimport { fetchSolidDocument } from './io';\nimport type { Fetch, FetchSolidDocumentOptions } from './io';\n\nexport interface SolidUserProfile {\n webId: string;\n storageUrls: [string, ...string[]];\n cloaked: boolean;\n writableProfileUrl: string | null;\n name?: string;\n avatarUrl?: string;\n oidcIssuerUrl?: string;\n publicTypeIndexUrl?: string;\n privateTypeIndexUrl?: string;\n}\n\nasync function fetchExtendedUserProfile(\n webIdDocument: SolidDocument,\n options?: FetchSolidDocumentOptions,\n): Promise<{\n store: SolidStore;\n cloaked: boolean;\n writableProfileUrl: string | null;\n}> {\n const store = new SolidStore(webIdDocument.getQuads());\n const documents: Record<string, SolidDocument | false | null> = { [webIdDocument.url]: webIdDocument };\n const addReferencedDocumentUrls = (document: SolidDocument) => {\n document\n .statements(undefined, 'foaf:isPrimaryTopicOf')\n .map((quad) => quad.object.value)\n .forEach((profileDocumentUrl) => (documents[profileDocumentUrl] = documents[profileDocumentUrl] ?? null));\n document\n .statements(undefined, 'foaf:primaryTopic')\n .map((quad) => quad.subject.value)\n .forEach((profileDocumentUrl) => (documents[profileDocumentUrl] = documents[profileDocumentUrl] ?? null));\n };\n const loadProfileDocuments = async (): Promise<void> => {\n for (const [url, document] of Object.entries(documents)) {\n if (document !== null) {\n continue;\n }\n\n try {\n const _document = await fetchSolidDocument(url, options);\n\n documents[url] = _document;\n store.addQuads(_document.getQuads());\n\n addReferencedDocumentUrls(_document);\n } catch (error) {\n if (error instanceof UnauthorizedError) {\n documents[url] = false;\n\n continue;\n }\n\n throw error;\n }\n }\n };\n\n addReferencedDocumentUrls(webIdDocument);\n\n do {\n await loadProfileDocuments();\n } while (Object.values(documents).some((document) => document === null));\n\n return {\n store,\n cloaked: Object.values(documents).some((document) => document === false),\n writableProfileUrl: webIdDocument.isUserWritable()\n ? webIdDocument.url\n : (Object.values(documents).find(\n (document): document is SolidDocument => !!document && document.isUserWritable(),\n )?.url ?? null),\n };\n}\n\nasync function fetchUserProfile(webId: string, options: FetchUserProfileOptions = {}): Promise<SolidUserProfile> {\n const requestOptions: FetchSolidDocumentOptions = {\n fetch: options.fetch,\n\n // Needed for CSS v7.1.3.\n // See https://github.com/CommunitySolidServer/CommunitySolidServer/issues/1972\n cache: 'no-store',\n };\n\n const documentUrl = urlRoute(webId);\n const document = await fetchSolidDocument(documentUrl, requestOptions);\n\n if (!document.isPersonalProfile() && !document.contains(webId, 'solid:oidcIssuer')) {\n throw new Error(`${webId} is not a valid webId.`);\n }\n\n const { store, writableProfileUrl, cloaked } = await fetchExtendedUserProfile(document, options);\n const storageUrls = store.statements(webId, 'pim:storage').map((storage) => storage.object.value);\n const publicTypeIndex = store.statement(webId, 'solid:publicTypeIndex');\n const privateTypeIndex = store.statement(webId, 'solid:privateTypeIndex');\n\n let parentUrl = urlParentDirectory(documentUrl);\n while (parentUrl && storageUrls.length === 0) {\n const parentDocument = await silenced(fetchSolidDocument(parentUrl, requestOptions));\n\n if (parentDocument?.isStorage()) {\n storageUrls.push(parentUrl);\n\n break;\n }\n\n parentUrl = urlParentDirectory(parentUrl);\n }\n\n if (storageUrls.length === 0) {\n throw new Error(`Could not find any storage for ${webId}.`);\n }\n\n await options.onLoaded?.(store);\n\n return {\n webId,\n cloaked,\n writableProfileUrl,\n storageUrls: arrayUnique(storageUrls) as [string, ...string[]],\n ...objectWithoutEmpty({\n name: store.statement(webId, 'vcard:fn')?.object.value ?? store.statement(webId, 'foaf:name')?.object.value,\n avatarUrl:\n store.statement(webId, 'vcard:hasPhoto')?.object.value ??\n store.statement(webId, 'foaf:img')?.object.value,\n oidcIssuerUrl: store.statement(webId, 'solid:oidcIssuer')?.object.value,\n publicTypeIndexUrl: publicTypeIndex?.object.value,\n privateTypeIndexUrl: privateTypeIndex?.object.value,\n }),\n };\n}\n\nexport interface FetchUserProfileOptions {\n fetch?: Fetch;\n onLoaded?(store: SolidStore): Promise<unknown> | unknown;\n}\n\nexport interface FetchLoginUserProfileOptions extends FetchUserProfileOptions {\n required?: boolean;\n}\n\nexport async function fetchLoginUserProfile(\n loginUrl: string,\n options: FetchLoginUserProfileOptions = {},\n): Promise<SolidUserProfile | null> {\n if (options.required) {\n return fetchUserProfile(loginUrl, options);\n }\n\n const fetchProfile = silenced((url) => fetchUserProfile(url, options));\n\n return (\n (await fetchProfile(loginUrl)) ??\n (await fetchProfile(loginUrl.replace(/\\/$/, '').concat('/profile/card#me'))) ??\n (await fetchProfile(urlRoot(loginUrl).concat('/profile/card#me')))\n );\n}\n","import { arr, isArray, isObject, objectDeepClone, objectWithoutEmpty, tap, urlParse, uuid } from '@noeldemartin/utils';\nimport type { UrlParts } from '@noeldemartin/utils';\nimport type { JsonLD, JsonLDResource } from '@noeldemartin/solid-utils/helpers';\n\nexport interface SubjectParts {\n containerUrl?: string;\n documentName?: string;\n resourceHash?: string;\n}\n\nfunction getContainerPath(parts: UrlParts): string | null {\n if (!parts.path || !parts.path.startsWith('/'))\n return null;\n\n if (parts.path.match(/^\\/[^/]*$/))\n return '/';\n\n return `/${arr(parts.path.split('/')).filter().slice(0, -1).join('/')}/`.replace('//', '/');\n}\n\nfunction getContainerUrl(parts: UrlParts): string | null {\n const containerPath = getContainerPath(parts);\n\n return parts.protocol && parts.domain\n ? `${parts.protocol}://${parts.domain}${containerPath ?? '/'}`\n : containerPath;\n}\n\nfunction __mintJsonLDIdentifiers(jsonld: JsonLD): void {\n if (!('@type' in jsonld) || '@value' in jsonld)\n return;\n\n jsonld['@id'] = jsonld['@id'] ?? uuid();\n\n for (const propertyValue of Object.values(jsonld)) {\n if (isObject(propertyValue))\n __mintJsonLDIdentifiers(propertyValue);\n\n if (isArray(propertyValue))\n propertyValue.forEach(value => isObject(value) && __mintJsonLDIdentifiers(value));\n }\n}\n\nexport function mintJsonLDIdentifiers(jsonld: JsonLD): JsonLDResource {\n return tap(objectDeepClone(jsonld) as JsonLDResource, clone => __mintJsonLDIdentifiers(clone));\n}\n\nexport function parseResourceSubject(subject: string): SubjectParts {\n const parts = urlParse(subject);\n\n return !parts ? {} : objectWithoutEmpty({\n containerUrl: getContainerUrl(parts),\n documentName: parts.path ? parts.path.split('/').pop() : null,\n resourceHash: parts.fragment,\n });\n}\n","import { uuid } from '@noeldemartin/utils';\n\nimport {\n createSolidDocument,\n fetchSolidDocument,\n solidDocumentExists,\n updateSolidDocument,\n} from '@noeldemartin/solid-utils/helpers/io';\nimport type { Fetch } from '@noeldemartin/solid-utils/helpers/io';\nimport type { SolidUserProfile } from '@noeldemartin/solid-utils/helpers/auth';\n\ntype TypeIndexType = 'public' | 'private';\n\nasync function mintTypeIndexUrl(user: SolidUserProfile, type: TypeIndexType, fetch?: Fetch): Promise<string> {\n fetch = fetch ?? window.fetch.bind(fetch);\n\n const storageUrl = user.storageUrls[0];\n const typeIndexUrl = `${storageUrl}settings/${type}TypeIndex`;\n\n return (await solidDocumentExists(typeIndexUrl, { fetch }))\n ? `${storageUrl}settings/${type}TypeIndex-${uuid()}`\n : typeIndexUrl;\n}\n\nasync function createTypeIndex(user: SolidUserProfile, type: TypeIndexType, fetch?: Fetch) {\n if (user.writableProfileUrl === null) {\n throw new Error('Can\\'t create type index without a writable profile document');\n }\n\n fetch = fetch ?? window.fetch.bind(fetch);\n\n const typeIndexUrl = await mintTypeIndexUrl(user, type, fetch);\n const typeIndexBody =\n type === 'public'\n ? '<> a <http://www.w3.org/ns/solid/terms#TypeIndex> .'\n : `\n <> a\n <http://www.w3.org/ns/solid/terms#TypeIndex>,\n <http://www.w3.org/ns/solid/terms#UnlistedDocument> .\n `;\n const profileUpdateBody = `\n INSERT DATA {\n <${user.webId}> <http://www.w3.org/ns/solid/terms#${type}TypeIndex> <${typeIndexUrl}> .\n }\n `;\n\n await createSolidDocument(typeIndexUrl, typeIndexBody, fetch);\n await updateSolidDocument(user.writableProfileUrl, profileUpdateBody, fetch);\n\n if (type === 'public') {\n // TODO This is currently implemented in soukai-solid.\n }\n\n return typeIndexUrl;\n}\n\n/**\n * @deprecated Use soukai-solid instead\n */\nasync function findRegistrations(\n typeIndexUrl: string,\n type: string | string[],\n predicate: string,\n fetch?: Fetch,\n): Promise<string[]> {\n const typeIndex = await fetchSolidDocument(typeIndexUrl, { fetch });\n const types = Array.isArray(type) ? type : [type];\n\n return types\n .map((_type) =>\n typeIndex\n .statements(undefined, 'rdf:type', 'solid:TypeRegistration')\n .filter((statement) => typeIndex.contains(statement.subject.value, 'solid:forClass', _type))\n .map((statement) => typeIndex.statements(statement.subject.value, predicate))\n .flat()\n .map((statement) => statement.object.value)\n .filter((url) => !!url))\n .flat();\n}\n\n/**\n * @deprecated Use soukai-solid instead\n */\nexport async function createPublicTypeIndex(user: SolidUserProfile, fetch?: Fetch): Promise<string> {\n return createTypeIndex(user, 'public', fetch);\n}\n\n/**\n * @deprecated Use soukai-solid instead\n */\nexport async function createPrivateTypeIndex(user: SolidUserProfile, fetch?: Fetch): Promise<string> {\n return createTypeIndex(user, 'private', fetch);\n}\n\n/**\n * @deprecated Use soukai-solid instead\n */\nexport async function findContainerRegistrations(\n typeIndexUrl: string,\n type: string | string[],\n fetch?: Fetch,\n): Promise<string[]> {\n return findRegistrations(typeIndexUrl, type, 'solid:instanceContainer', fetch);\n}\n\n/**\n * @deprecated Use soukai-solid instead\n */\nexport async function findInstanceRegistrations(\n typeIndexUrl: string,\n type: string | string[],\n fetch?: Fetch,\n): Promise<string[]> {\n return findRegistrations(typeIndexUrl, type, 'solid:instance', fetch);\n}\n","import { objectWithoutEmpty, requireUrlParentDirectory, urlResolve } from '@noeldemartin/utils';\n\n// eslint-disable-next-line max-len\nimport UnsupportedAuthorizationProtocolError from '@noeldemartin/solid-utils/errors/UnsupportedAuthorizationProtocolError';\nimport { fetchSolidDocumentIfFound } from '@noeldemartin/solid-utils/helpers/io';\nimport type SolidDocument from '@noeldemartin/solid-utils/models/SolidDocument';\nimport type { Fetch } from '@noeldemartin/solid-utils/helpers/io';\n\nasync function fetchACLResourceUrl(resourceUrl: string, fetch: Fetch): Promise<string> {\n fetch = fetch ?? window.fetch.bind(window);\n\n const resourceHead = await fetch(resourceUrl, { method: 'HEAD' });\n const linkHeader = resourceHead.headers.get('Link') ?? '';\n const url = linkHeader.match(/<([^>]+)>;\\s*rel=\"acl\"/)?.[1] ?? null;\n\n if (!url) {\n throw new Error(`Could not find ACL Resource for '${resourceUrl}'`);\n }\n\n return urlResolve(requireUrlParentDirectory(resourceUrl), url);\n}\n\nasync function fetchEffectiveACL(\n resourceUrl: string,\n fetch: Fetch,\n aclResourceUrl?: string | null,\n): Promise<SolidDocument> {\n aclResourceUrl = aclResourceUrl ?? (await fetchACLResourceUrl(resourceUrl, fetch));\n\n const aclDocument = await fetchSolidDocumentIfFound(aclResourceUrl ?? '', { fetch });\n\n if (!aclDocument) {\n return fetchEffectiveACL(requireUrlParentDirectory(resourceUrl), fetch);\n }\n\n if (aclDocument.isACPResource()) {\n throw new UnsupportedAuthorizationProtocolError(resourceUrl, 'ACP');\n }\n\n return aclDocument;\n}\n\nexport async function fetchSolidDocumentACL(\n documentUrl: string,\n fetch: Fetch,\n): Promise<{\n url: string;\n effectiveUrl: string;\n document: SolidDocument;\n}> {\n const url = await fetchACLResourceUrl(documentUrl, fetch);\n const document = await fetchEffectiveACL(documentUrl, fetch, url);\n\n return objectWithoutEmpty({\n url,\n effectiveUrl: document.url,\n document,\n });\n}\n"],"names":["getErrorMessage","messageOrResponse","response","UnsuccessfulRequestError","JSError","__publicField","UnsupportedAuthorizationProtocolError","url","protocol","options","fetchExtendedUserProfile","webIdDocument","store","SolidStore","documents","addReferencedDocumentUrls","document","quad","profileDocumentUrl","loadProfileDocuments","_document","fetchSolidDocument","error","UnauthorizedError","_a","fetchUserProfile","webId","requestOptions","documentUrl","urlRoute","writableProfileUrl","cloaked","storageUrls","storage","publicTypeIndex","privateTypeIndex","parentUrl","urlParentDirectory","parentDocument","silenced","arrayUnique","objectWithoutEmpty","_b","_c","_d","_e","_f","fetchLoginUserProfile","loginUrl","fetchProfile","urlRoot","getContainerPath","parts","arr","getContainerUrl","containerPath","__mintJsonLDIdentifiers","jsonld","uuid","propertyValue","isObject","isArray","value","mintJsonLDIdentifiers","tap","objectDeepClone","clone","parseResourceSubject","subject","urlParse","mintTypeIndexUrl","user","type","fetch","storageUrl","typeIndexUrl","solidDocumentExists","createTypeIndex","typeIndexBody","profileUpdateBody","createSolidDocument","updateSolidDocument","findRegistrations","predicate","typeIndex","_type","statement","createPublicTypeIndex","createPrivateTypeIndex","findContainerRegistrations","findInstanceRegistrations","fetchACLResourceUrl","resourceUrl","urlResolve","requireUrlParentDirectory","fetchEffectiveACL","aclResourceUrl","aclDocument","fetchSolidDocumentIfFound","fetchSolidDocumentACL"],"mappings":"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"}
package/dist/testing.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { expect as Q } from "vitest";
2
- import { j as g, g as E, k as q, h as y, l as T, e as $, n as v } from "./io-CMHtz5bu.js";
2
+ import { j as g, g as E, k as q, h as y, l as T, e as $, n as v } from "./io-Bxx0x6OA.js";
3
3
  import { pull as w, arrayRemove as b, JSError as R, stringMatchAll as S } from "@noeldemartin/utils";
4
4
  let i = {};
5
5
  const k = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noeldemartin/solid-utils",
3
- "version": "0.6.0-next.3e3ceb79b047f4ec87a416c2f920a13eda7a0df1",
3
+ "version": "0.6.0-next.93662083f605ab1c82251296bba0307c629df50a",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -19,7 +19,9 @@ export default class UnauthorizedError extends JSError {
19
19
  }
20
20
 
21
21
  public get forbidden(): boolean | undefined {
22
- return typeof this.responseStatus !== 'undefined' ? this.responseStatus === 403 : undefined;
22
+ return typeof this.responseStatus !== 'undefined'
23
+ ? this.responseStatus === 403
24
+ : undefined;
23
25
  }
24
26
 
25
27
  }
@@ -1,7 +1,7 @@
1
1
  import { JSError } from '@noeldemartin/utils';
2
2
 
3
3
  function getErrorMessage(messageOrResponse: string | Response, response?: Response): string {
4
- response = response ?? (messageOrResponse as Response);
4
+ response = response ?? messageOrResponse as Response;
5
5
 
6
6
  return typeof messageOrResponse === 'string'
7
7
  ? `${messageOrResponse} (returned ${response.status} status code)`
@@ -17,7 +17,7 @@ export default class UnsuccessfulRequestError extends JSError {
17
17
  constructor(messageOrResponse: string | Response, response?: Response) {
18
18
  super(getErrorMessage(messageOrResponse, response));
19
19
 
20
- this.response = response ?? (messageOrResponse as Response);
20
+ this.response = response ?? messageOrResponse as Response;
21
21
  }
22
22
 
23
23
  }
@@ -9,9 +9,11 @@ export interface SubjectParts {
9
9
  }
10
10
 
11
11
  function getContainerPath(parts: UrlParts): string | null {
12
- if (!parts.path || !parts.path.startsWith('/')) return null;
12
+ if (!parts.path || !parts.path.startsWith('/'))
13
+ return null;
13
14
 
14
- if (parts.path.match(/^\/[^/]*$/)) return '/';
15
+ if (parts.path.match(/^\/[^/]*$/))
16
+ return '/';
15
17
 
16
18
  return `/${arr(parts.path.split('/')).filter().slice(0, -1).join('/')}/`.replace('//', '/');
17
19
  }
@@ -25,29 +27,30 @@ function getContainerUrl(parts: UrlParts): string | null {
25
27
  }
26
28
 
27
29
  function __mintJsonLDIdentifiers(jsonld: JsonLD): void {
28
- if (!('@type' in jsonld) || '@value' in jsonld) return;
30
+ if (!('@type' in jsonld) || '@value' in jsonld)
31
+ return;
29
32
 
30
33
  jsonld['@id'] = jsonld['@id'] ?? uuid();
31
34
 
32
35
  for (const propertyValue of Object.values(jsonld)) {
33
- if (isObject(propertyValue)) __mintJsonLDIdentifiers(propertyValue);
36
+ if (isObject(propertyValue))
37
+ __mintJsonLDIdentifiers(propertyValue);
34
38
 
35
- if (isArray(propertyValue)) propertyValue.forEach((value) => isObject(value) && __mintJsonLDIdentifiers(value));
39
+ if (isArray(propertyValue))
40
+ propertyValue.forEach(value => isObject(value) && __mintJsonLDIdentifiers(value));
36
41
  }
37
42
  }
38
43
 
39
44
  export function mintJsonLDIdentifiers(jsonld: JsonLD): JsonLDResource {
40
- return tap(objectDeepClone(jsonld) as JsonLDResource, (clone) => __mintJsonLDIdentifiers(clone));
45
+ return tap(objectDeepClone(jsonld) as JsonLDResource, clone => __mintJsonLDIdentifiers(clone));
41
46
  }
42
47
 
43
48
  export function parseResourceSubject(subject: string): SubjectParts {
44
49
  const parts = urlParse(subject);
45
50
 
46
- return !parts
47
- ? {}
48
- : objectWithoutEmpty({
49
- containerUrl: getContainerUrl(parts),
50
- documentName: parts.path ? parts.path.split('/').pop() : null,
51
- resourceHash: parts.fragment,
52
- });
51
+ return !parts ? {} : objectWithoutEmpty({
52
+ containerUrl: getContainerUrl(parts),
53
+ documentName: parts.path ? parts.path.split('/').pop() : null,
54
+ resourceHash: parts.fragment,
55
+ });
53
56
  }
@@ -23,19 +23,22 @@ export function defineIRIPrefix(name: string, value: string): void {
23
23
  }
24
24
 
25
25
  export function expandIRI(iri: string, options: Partial<ExpandIRIOptions> = {}): string {
26
- if (iri.startsWith('http')) return iri;
26
+ if (iri.startsWith('http'))
27
+ return iri;
27
28
 
28
29
  const [prefix, name] = iri.split(':');
29
30
 
30
31
  if (prefix && name) {
31
32
  const expandedPrefix = knownPrefixes[prefix] ?? options.extraContext?.[prefix] ?? null;
32
33
 
33
- if (!expandedPrefix) throw new Error(`Can't expand IRI with unknown prefix: '${iri}'`);
34
+ if (!expandedPrefix)
35
+ throw new Error(`Can't expand IRI with unknown prefix: '${iri}'`);
34
36
 
35
37
  return expandedPrefix + name;
36
38
  }
37
39
 
38
- if (!options.defaultPrefix) throw new Error(`Can't expand IRI without a default prefix: '${iri}'`);
40
+ if (!options.defaultPrefix)
41
+ throw new Error(`Can't expand IRI without a default prefix: '${iri}'`);
39
42
 
40
43
  return options.defaultPrefix + prefix;
41
44
  }
package/src/types/n3.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import '@types/n3';
2
2
 
3
3
  declare module 'n3' {
4
+
4
5
  interface Parser {
5
6
  _resolveRelativeIRI(iri: string): string;
6
7
  }
8
+
7
9
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"io-CMHtz5bu.js","sources":["../src/errors/MalformedSolidDocumentError.ts","../src/errors/NetworkRequestError.ts","../src/errors/NotFoundError.ts","../src/errors/UnauthorizedError.ts","../src/helpers/vocabs.ts","../src/models/SolidThing.ts","../src/models/SolidStore.ts","../src/models/SolidDocument.ts","../src/helpers/jsonld.ts","../src/helpers/io.ts"],"sourcesContent":["import { JSError } from '@noeldemartin/utils';\n\nfunction errorMessage(\n documentUrl: string | null,\n documentFormat: SolidDocumentFormat,\n malformationDetails: string,\n): string {\n return documentUrl\n ? `Malformed ${documentFormat} document found at ${documentUrl} - ${malformationDetails}`\n : `Malformed ${documentFormat} document - ${malformationDetails}`;\n}\n\nexport enum SolidDocumentFormat {\n Turtle = 'Turtle',\n}\n\nexport default class MalformedSolidDocumentError extends JSError {\n\n public readonly documentUrl: string | null;\n public readonly documentFormat: SolidDocumentFormat;\n public readonly malformationDetails: string;\n\n constructor(documentUrl: string | null, documentFormat: SolidDocumentFormat, malformationDetails: string) {\n super(errorMessage(documentUrl, documentFormat, malformationDetails));\n\n this.documentUrl = documentUrl;\n this.documentFormat = documentFormat;\n this.malformationDetails = malformationDetails;\n }\n\n}\n","import { JSError } from '@noeldemartin/utils';\nimport type { JSErrorOptions } from '@noeldemartin/utils';\n\nexport default class NetworkRequestError extends JSError {\n\n public readonly url: string;\n\n constructor(url: string, options?: JSErrorOptions) {\n super(`Request failed trying to fetch ${url}`, options);\n\n this.url = url;\n }\n\n}\n","import { JSError } from '@noeldemartin/utils';\n\nexport default class NotFoundError extends JSError {\n\n public readonly url: string;\n\n constructor(url: string) {\n super(`Document with '${url}' url not found`);\n\n this.url = url;\n }\n\n}\n","import { JSError } from '@noeldemartin/utils';\n\nfunction errorMessage(url: string, responseStatus?: number): string {\n const typeInfo = responseStatus === 403 ? ' (Forbidden)' : '';\n\n return `Unauthorized${typeInfo}: ${url}`;\n}\n\nexport default class UnauthorizedError extends JSError {\n\n public readonly url: string;\n public readonly responseStatus?: number;\n\n constructor(url: string, responseStatus?: number) {\n super(errorMessage(url, responseStatus));\n\n this.url = url;\n this.responseStatus = responseStatus;\n }\n\n public get forbidden(): boolean | undefined {\n return typeof this.responseStatus !== 'undefined' ? this.responseStatus === 403 : undefined;\n }\n\n}\n","export type RDFContext = Record<string, string>;\n\nexport interface ExpandIRIOptions {\n defaultPrefix: string;\n extraContext: RDFContext;\n}\n\nconst knownPrefixes: RDFContext = {\n acl: 'http://www.w3.org/ns/auth/acl#',\n foaf: 'http://xmlns.com/foaf/0.1/',\n ldp: 'http://www.w3.org/ns/ldp#',\n pim: 'http://www.w3.org/ns/pim/space#',\n purl: 'http://purl.org/dc/terms/',\n rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n rdfs: 'http://www.w3.org/2000/01/rdf-schema#',\n schema: 'https://schema.org/',\n solid: 'http://www.w3.org/ns/solid/terms#',\n vcard: 'http://www.w3.org/2006/vcard/ns#',\n};\n\nexport function defineIRIPrefix(name: string, value: string): void {\n knownPrefixes[name] = value;\n}\n\nexport function expandIRI(iri: string, options: Partial<ExpandIRIOptions> = {}): string {\n if (iri.startsWith('http')) return iri;\n\n const [prefix, name] = iri.split(':');\n\n if (prefix && name) {\n const expandedPrefix = knownPrefixes[prefix] ?? options.extraContext?.[prefix] ?? null;\n\n if (!expandedPrefix) throw new Error(`Can't expand IRI with unknown prefix: '${iri}'`);\n\n return expandedPrefix + name;\n }\n\n if (!options.defaultPrefix) throw new Error(`Can't expand IRI without a default prefix: '${iri}'`);\n\n return options.defaultPrefix + prefix;\n}\n","import type { Quad } from '@rdfjs/types';\n\nimport { expandIRI } from '@noeldemartin/solid-utils/helpers/vocabs';\n\nexport default class SolidThing {\n\n public readonly url: string;\n private quads: Quad[];\n\n public constructor(url: string, quads: Quad[]) {\n this.url = url;\n this.quads = quads;\n }\n\n public value(property: string): string | undefined {\n return this.quads.find((quad) => quad.predicate.value === expandIRI(property))?.object.value;\n }\n\n public values(property: string): string[] {\n return this.quads\n .filter((quad) => quad.predicate.value === expandIRI(property))\n .map((quad) => quad.object.value);\n }\n\n}\n","import type { BlankNode, Literal, NamedNode, Quad, Variable } from '@rdfjs/types';\n\nimport { expandIRI } from '@noeldemartin/solid-utils/helpers/vocabs';\n\nimport SolidThing from './SolidThing';\n\nexport type Term = NamedNode | Literal | BlankNode | Quad | Variable;\n\nexport default class SolidStore {\n\n private quads: Quad[];\n\n public constructor(quads: Quad[] = []) {\n this.quads = quads;\n }\n\n public isEmpty(): boolean {\n return this.statements.length === 0;\n }\n\n public getQuads(): Quad[] {\n return this.quads.slice(0);\n }\n\n public addQuads(quads: Quad[]): void {\n this.quads.push(...quads);\n }\n\n public statements(subject?: Term | string, predicate?: Term | string, object?: Term | string): Quad[] {\n return this.quads.filter(\n (statement) =>\n (!object || this.termMatches(statement.object, object)) &&\n (!subject || this.termMatches(statement.subject, subject)) &&\n (!predicate || this.termMatches(statement.predicate, predicate)),\n );\n }\n\n public statement(subject?: Term | string, predicate?: Term | string, object?: Term | string): Quad | null {\n const statement = this.quads.find(\n (_statement) =>\n (!object || this.termMatches(_statement.object, object)) &&\n (!subject || this.termMatches(_statement.subject, subject)) &&\n (!predicate || this.termMatches(_statement.predicate, predicate)),\n );\n\n return statement ?? null;\n }\n\n public contains(subject: string, predicate?: string, object?: string): boolean {\n return this.statement(subject, predicate, object) !== null;\n }\n\n public getThing(subject: string): SolidThing {\n const statements = this.statements(subject);\n\n return new SolidThing(subject, statements);\n }\n\n protected expandIRI(iri: string): string {\n return expandIRI(iri);\n }\n\n protected termMatches(term: Term, value: Term | string): boolean {\n if (typeof value === 'string') {\n return this.expandIRI(value) === term.value;\n }\n\n return term.termType === term.termType && term.value === value.value;\n }\n\n}\n","import { arrayFilter, parseDate, stringMatch } from '@noeldemartin/utils';\nimport type { Quad } from '@rdfjs/types';\n\nimport { expandIRI } from '@noeldemartin/solid-utils/helpers/vocabs';\n\nimport SolidStore from './SolidStore';\n\nexport enum SolidDocumentPermission {\n Read = 'read',\n Write = 'write',\n Append = 'append',\n Control = 'control',\n}\n\nexport default class SolidDocument extends SolidStore {\n\n public readonly url: string;\n public readonly headers: Headers;\n\n public constructor(url: string, quads: Quad[], headers: Headers) {\n super(quads);\n\n this.url = url;\n this.headers = headers;\n }\n\n public isACPResource(): boolean {\n return !!this.headers\n .get('Link')\n ?.match(/<http:\\/\\/www\\.w3\\.org\\/ns\\/solid\\/acp#AccessControlResource>;[^,]+rel=\"type\"/);\n }\n\n public isPersonalProfile(): boolean {\n return !!this.statement(this.url, expandIRI('rdf:type'), expandIRI('foaf:PersonalProfileDocument'));\n }\n\n public isStorage(): boolean {\n return !!this.headers.get('Link')?.match(/<http:\\/\\/www\\.w3\\.org\\/ns\\/pim\\/space#Storage>;[^,]+rel=\"type\"/);\n }\n\n public isUserWritable(): boolean {\n return this.getUserPermissions().includes(SolidDocumentPermission.Write);\n }\n\n public getUserPermissions(): SolidDocumentPermission[] {\n return this.getPermissionsFromWAC('user');\n }\n\n public getPublicPermissions(): SolidDocumentPermission[] {\n return this.getPermissionsFromWAC('public');\n }\n\n public getLastModified(): Date | null {\n return (\n parseDate(this.headers.get('last-modified')) ??\n parseDate(this.statement(this.url, 'purl:modified')?.object.value) ??\n this.getLatestDocumentDate() ??\n null\n );\n }\n\n protected expandIRI(iri: string): string {\n return expandIRI(iri, { defaultPrefix: this.url });\n }\n\n private getLatestDocumentDate(): Date | null {\n const dates = [...this.statements(undefined, 'purl:modified'), ...this.statements(undefined, 'purl:created')]\n .map((statement) => parseDate(statement.object.value))\n .filter((date): date is Date => date !== null);\n\n return dates.length > 0 ? dates.reduce((a, b) => (a > b ? a : b)) : null;\n }\n\n private getPermissionsFromWAC(type: string): SolidDocumentPermission[] {\n const wacAllow = this.headers.get('WAC-Allow') ?? '';\n const publicModes = stringMatch<2>(wacAllow, new RegExp(`${type}=\"([^\"]+)\"`))?.[1] ?? '';\n\n return arrayFilter([\n publicModes.includes('read') && SolidDocumentPermission.Read,\n publicModes.includes('write') && SolidDocumentPermission.Write,\n publicModes.includes('append') && SolidDocumentPermission.Append,\n publicModes.includes('control') && SolidDocumentPermission.Control,\n ]);\n }\n\n}\n","import jsonld from 'jsonld';\nimport type { JsonLdDocument } from 'jsonld';\n\nexport type JsonLD = Partial<{\n '@context': Record<string, unknown>;\n '@id': string;\n '@type': null | string | string[];\n}> & { [k: string]: unknown };\n\nexport type JsonLDResource = Omit<JsonLD, '@id'> & { '@id': string };\nexport type JsonLDGraph = {\n '@context'?: Record<string, unknown>;\n '@graph': JsonLDResource[];\n};\n\nexport async function compactJsonLDGraph(json: JsonLDGraph): Promise<JsonLDGraph> {\n const compactedJsonLD = await jsonld.compact(json as JsonLdDocument, {});\n\n if ('@graph' in compactedJsonLD) {\n return compactedJsonLD as JsonLDGraph;\n }\n\n if ('@id' in compactedJsonLD) {\n return { '@graph': [compactedJsonLD] } as JsonLDGraph;\n }\n\n return { '@graph': [] };\n}\n\nexport function isJsonLDGraph(json: JsonLD): json is JsonLDGraph {\n return '@graph' in json;\n}\n","import jsonld from 'jsonld';\nimport md5 from 'md5';\nimport { arr, arrayFilter, arrayReplace, objectWithoutEmpty, stringMatchAll, tap } from '@noeldemartin/utils';\nimport { BlankNode as N3BlankNode, Quad as N3Quad, Parser, Writer } from 'n3';\nimport type { JsonLdDocument } from 'jsonld';\nimport type { Quad } from '@rdfjs/types';\nimport type { Term } from 'n3';\n\nimport SolidDocument from '@noeldemartin/solid-utils/models/SolidDocument';\n\n// eslint-disable-next-line max-len\nimport MalformedSolidDocumentError, { SolidDocumentFormat } from '@noeldemartin/solid-utils/errors/MalformedSolidDocumentError';\nimport NetworkRequestError from '@noeldemartin/solid-utils/errors/NetworkRequestError';\nimport NotFoundError from '@noeldemartin/solid-utils/errors/NotFoundError';\nimport UnauthorizedError from '@noeldemartin/solid-utils/errors/UnauthorizedError';\nimport { isJsonLDGraph } from '@noeldemartin/solid-utils/helpers/jsonld';\nimport type { JsonLD, JsonLDGraph, JsonLDResource } from '@noeldemartin/solid-utils/helpers/jsonld';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport declare type AnyFetch = (input: any, options?: any) => Promise<Response>;\nexport declare type TypedFetch = (input: RequestInfo, options?: RequestInit) => Promise<Response>;\nexport declare type Fetch = TypedFetch | AnyFetch;\n\nconst ANONYMOUS_PREFIX = 'anonymous://';\nconst ANONYMOUS_PREFIX_LENGTH = ANONYMOUS_PREFIX.length;\n\nasync function fetchRawSolidDocument(\n url: string,\n options?: FetchSolidDocumentOptions,\n): Promise<{ body: string; headers: Headers }> {\n const requestOptions: RequestInit = {\n headers: { Accept: 'text/turtle' },\n };\n\n if (options?.cache) {\n requestOptions.cache = options.cache;\n }\n\n try {\n const fetch = options?.fetch ?? window.fetch;\n const response = await fetch(url, requestOptions);\n\n if (response.status === 404) throw new NotFoundError(url);\n\n if ([401, 403].includes(response.status)) throw new UnauthorizedError(url, response.status);\n\n const body = await response.text();\n\n return {\n body,\n headers: response.headers,\n };\n } catch (error) {\n if (error instanceof UnauthorizedError) throw error;\n\n if (error instanceof NotFoundError) throw error;\n\n throw new NetworkRequestError(url, { cause: error });\n }\n}\n\nfunction normalizeBlankNodes(quads: Quad[]): Quad[] {\n const normalizedQuads = quads.slice(0);\n const quadsIndexes: Record<string, Set<number>> = {};\n const blankNodeIds = arr(quads)\n .flatMap((quad, index) =>\n tap(\n arrayFilter([\n quad.object.termType === 'BlankNode' ? quad.object.value : null,\n quad.subject.termType === 'BlankNode' ? quad.subject.value : null,\n ]),\n (ids) => ids.forEach((id) => (quadsIndexes[id] ??= new Set()).add(index)),\n ))\n .filter()\n .unique();\n\n for (const originalId of blankNodeIds) {\n const quadIndexes = quadsIndexes[originalId] as Set<number>;\n const normalizedId = md5(\n arr(quadIndexes)\n .map((index) => quads[index] as Quad)\n .filter(({ subject: { termType, value } }) => termType === 'BlankNode' && value === originalId)\n .map(({ predicate, object }) =>\n object.termType === 'BlankNode' ? predicate.value : predicate.value + object.value)\n .sorted()\n .join(),\n );\n\n for (const index of quadIndexes) {\n const quad = normalizedQuads[index] as Quad;\n const terms: Record<string, Term> = {\n subject: quad.subject as Term,\n object: quad.object as Term,\n };\n\n for (const [termName, termValue] of Object.entries(terms)) {\n if (termValue.termType !== 'BlankNode' || termValue.value !== originalId) continue;\n\n terms[termName] = new N3BlankNode(normalizedId) as Term;\n }\n\n arrayReplace(\n normalizedQuads,\n quad,\n new N3Quad(terms.subject as Term, quad.predicate as Term, terms.object as Term),\n );\n }\n }\n\n return normalizedQuads;\n}\n\nfunction normalizeQuads(quads: Quad[]): string {\n return quads\n .map((quad) => ' ' + quadToTurtle(quad))\n .sort()\n .join('\\n');\n}\n\nfunction preprocessSubjects(json: JsonLD): void {\n if (!json['@id']?.startsWith('#')) {\n return;\n }\n\n json['@id'] = ANONYMOUS_PREFIX + json['@id'];\n}\n\nfunction postprocessSubjects(quads: Quad[]): void {\n for (const quad of quads) {\n if (!quad.subject.value.startsWith(ANONYMOUS_PREFIX)) {\n continue;\n }\n\n quad.subject.value = quad.subject.value.slice(ANONYMOUS_PREFIX_LENGTH);\n }\n}\n\nexport interface FetchSolidDocumentOptions {\n fetch?: Fetch;\n cache?: RequestCache;\n}\n\nexport interface ParsingOptions {\n baseIRI: string;\n normalizeBlankNodes: boolean;\n}\n\nexport interface RDFGraphData {\n quads: Quad[];\n containsRelativeIRIs: boolean;\n}\n\nexport async function createSolidDocument(url: string, body: string, fetch?: Fetch): Promise<SolidDocument> {\n fetch = fetch ?? window.fetch.bind(window);\n\n const statements = await turtleToQuads(body);\n\n await fetch(url, {\n method: 'PUT',\n headers: { 'Content-Type': 'text/turtle' },\n body,\n });\n\n return new SolidDocument(url, statements, new Headers({}));\n}\n\nexport async function fetchSolidDocument(url: string, options?: FetchSolidDocumentOptions): Promise<SolidDocument> {\n const { body: data, headers } = await fetchRawSolidDocument(url, options);\n const statements = await turtleToQuads(data, { baseIRI: url });\n\n return new SolidDocument(url, statements, headers);\n}\n\nexport async function fetchSolidDocumentIfFound(\n url: string,\n options?: FetchSolidDocumentOptions,\n): Promise<SolidDocument | null> {\n try {\n const document = await fetchSolidDocument(url, options);\n\n return document;\n } catch (error) {\n if (!(error instanceof NotFoundError)) throw error;\n\n return null;\n }\n}\n\nexport async function jsonldToQuads(json: JsonLD, baseIRI?: string): Promise<Quad[]> {\n if (isJsonLDGraph(json)) {\n const graphQuads = await Promise.all(json['@graph'].map((resource) => jsonldToQuads(resource, baseIRI)));\n\n return graphQuads.flat();\n }\n\n preprocessSubjects(json);\n\n const quads = await (jsonld.toRDF(json as JsonLdDocument, { base: baseIRI }) as Promise<Quad[]>);\n\n postprocessSubjects(quads);\n\n return quads;\n}\n\nexport function normalizeSparql(sparql: string): string {\n const quads = sparqlToQuadsSync(sparql);\n\n return Object.entries(quads)\n .reduce((normalizedOperations, [operation, _quads]) => {\n const normalizedQuads = normalizeQuads(_quads);\n\n return normalizedOperations.concat(`${operation.toUpperCase()} DATA {\\n${normalizedQuads}\\n}`);\n }, [] as string[])\n .join(' ;\\n');\n}\n\nexport function normalizeTurtle(sparql: string): string {\n const quads = turtleToQuadsSync(sparql);\n\n return normalizeQuads(quads);\n}\n\nexport function parseTurtle(turtle: string, options: Partial<ParsingOptions> = {}): Promise<RDFGraphData> {\n const parserOptions = objectWithoutEmpty({ baseIRI: options.baseIRI });\n const parser = new Parser(parserOptions);\n const data: RDFGraphData = {\n quads: [],\n containsRelativeIRIs: false,\n };\n\n return new Promise((resolve, reject) => {\n const resolveRelativeIRI = parser._resolveRelativeIRI;\n\n parser._resolveRelativeIRI = (...args) => {\n data.containsRelativeIRIs = true;\n parser._resolveRelativeIRI = resolveRelativeIRI;\n\n return parser._resolveRelativeIRI(...args);\n };\n\n parser.parse(turtle, (error, quad) => {\n if (error) {\n reject(\n new MalformedSolidDocumentError(options.baseIRI ?? null, SolidDocumentFormat.Turtle, error.message),\n );\n\n return;\n }\n\n if (!quad) {\n // data.quads = options.normalizeBlankNodes\n // ? normalizeBlankNodes(data.quads)\n // : data.quads;\n\n resolve(data);\n\n return;\n }\n\n data.quads.push(quad);\n });\n });\n}\n\nexport async function quadsToJsonLD(quads: Quad[]): Promise<JsonLDGraph> {\n const graph = await jsonld.fromRDF(quads);\n\n return {\n '@graph': graph as JsonLDResource[],\n };\n}\n\nexport function quadsToTurtle(quads: Quad[]): string {\n const writer = new Writer();\n\n return writer.quadsToString(quads);\n}\n\nexport function quadToTurtle(quad: Quad): string {\n const writer = new Writer();\n\n return writer.quadsToString([quad]).slice(0, -1);\n}\n\nexport async function solidDocumentExists(url: string, options?: FetchSolidDocumentOptions): Promise<boolean> {\n try {\n const document = await fetchSolidDocument(url, options);\n\n return !document.isEmpty();\n } catch (error) {\n return false;\n }\n}\n\nexport async function sparqlToQuads(\n sparql: string,\n options: Partial<ParsingOptions> = {},\n): Promise<Record<string, Quad[]>> {\n const operations = stringMatchAll<3>(sparql, /(\\w+) DATA {([^}]+)}/g);\n const quads: Record<string, Quad[]> = {};\n\n await Promise.all(\n [...operations].map(async (operation) => {\n const operationName = operation[1].toLowerCase();\n const operationBody = operation[2];\n\n quads[operationName] = await turtleToQuads(operationBody, options);\n }),\n );\n\n return quads;\n}\n\nexport function sparqlToQuadsSync(sparql: string, options: Partial<ParsingOptions> = {}): Record<string, Quad[]> {\n const operations = stringMatchAll<3>(sparql, /(\\w+) DATA {([^}]+)}/g);\n const quads: Record<string, Quad[]> = {};\n\n for (const operation of operations) {\n const operationName = operation[1].toLowerCase();\n const operationBody = operation[2];\n\n quads[operationName] = turtleToQuadsSync(operationBody, options);\n }\n\n return quads;\n}\n\nexport async function turtleToQuads(turtle: string, options: Partial<ParsingOptions> = {}): Promise<Quad[]> {\n const { quads } = await parseTurtle(turtle, options);\n\n return quads;\n}\n\nexport function turtleToQuadsSync(turtle: string, options: Partial<ParsingOptions> = {}): Quad[] {\n const parserOptions = objectWithoutEmpty({ baseIRI: options.baseIRI });\n const parser = new Parser(parserOptions);\n\n try {\n const quads = parser.parse(turtle);\n\n return options.normalizeBlankNodes ? normalizeBlankNodes(quads) : quads;\n } catch (error) {\n throw new MalformedSolidDocumentError(\n options.baseIRI ?? null,\n SolidDocumentFormat.Turtle,\n (error as Error).message ?? '',\n );\n }\n}\n\nexport async function updateSolidDocument(url: string, body: string, fetch?: Fetch): Promise<void> {\n fetch = fetch ?? window.fetch.bind(window);\n\n await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/sparql-update' },\n body,\n });\n}\n"],"names":["errorMessage","documentUrl","documentFormat","malformationDetails","SolidDocumentFormat","MalformedSolidDocumentError","JSError","__publicField","NetworkRequestError","url","options","NotFoundError","responseStatus","UnauthorizedError","knownPrefixes","defineIRIPrefix","name","value","expandIRI","iri","prefix","expandedPrefix","_a","SolidThing","quads","property","quad","SolidStore","subject","predicate","object","statement","_statement","statements","term","SolidDocumentPermission","SolidDocument","headers","parseDate","dates","date","a","b","type","wacAllow","publicModes","stringMatch","arrayFilter","compactJsonLDGraph","json","compactedJsonLD","jsonld","isJsonLDGraph","ANONYMOUS_PREFIX","ANONYMOUS_PREFIX_LENGTH","fetchRawSolidDocument","requestOptions","response","error","normalizeBlankNodes","normalizedQuads","quadsIndexes","blankNodeIds","arr","index","tap","ids","id","originalId","quadIndexes","normalizedId","md5","termType","terms","termName","termValue","N3BlankNode","arrayReplace","N3Quad","normalizeQuads","quadToTurtle","preprocessSubjects","postprocessSubjects","createSolidDocument","body","fetch","turtleToQuads","fetchSolidDocument","data","fetchSolidDocumentIfFound","jsonldToQuads","baseIRI","resource","normalizeSparql","sparql","sparqlToQuadsSync","normalizedOperations","operation","_quads","normalizeTurtle","turtleToQuadsSync","parseTurtle","turtle","parserOptions","objectWithoutEmpty","parser","Parser","resolve","reject","resolveRelativeIRI","args","quadsToJsonLD","quadsToTurtle","Writer","solidDocumentExists","sparqlToQuads","operations","stringMatchAll","operationName","operationBody","updateSolidDocument"],"mappings":"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"}