import { createLens, createNamespace, type Options } from "ldkit";import { DataFactory, N3 } from "ldkit/rdf";import { QueryEngine as Comunica } from "npm:@comunica/query-sparql-rdfjs@2.5.2";
const ns = createNamespace( { "iri": "http://ns/", "prefix": "ns", "terms": [ "name", "movie", ], } as const,);
const DirectorSchema = { name: ns.name, movies: { "@id": ns.movie, "@array": true, },} as const;
const store = new N3.Store(undefined, { factory: new DataFactory(),});const options: Options = { engine: new Comunica(), sources: [store],};
const Directors = createLens(DirectorSchema, options);
await Directors.insert({ $id: "https://Quentin_Tarantino", name: "Quentin Tarantino", movies: ["Pulp Fiction", "Reservoir Dogs"],});
await Directors.update({ $id: "https://Quentin_Tarantino", movies: { $add: ["Kill Bill", "Kill Bill 2"], },});
await Directors.update({ $id: "https://Quentin_Tarantino", movies: { $remove: ["Reservoir Dogs"], },});
const tarantino = await Directors.findByIri("https://Quentin_Tarantino");console.log("Tarantino movies", tarantino?.movies);
await Directors.insert({ $id: "https://David_Fincher", name: "David Fincher", movies: ["Fight Club", "The Social Network"],});
await Directors.update({ $id: "https://Quentin_Tarantino", movies: { $set: [], },}, { $id: "https://David_Fincher", movies: { $add: ["The Curious Case of Benjamin Button"], },});
const fincher = await Directors.findByIri("https://David_Fincher");console.log("Fincher movies", fincher?.movies);