Merge pull request #85 from o-development/feat/svelte

Feat/svelte
main
jaxoncreed 4 months ago committed by GitHub
commit 94edd61d25
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      lerna.json
  2. 2
      package-lock.json
  3. 2
      packages/svelte/example/src/.ldo/solidProfile.shapeTypes.ts
  4. 5
      packages/svelte/example/src/App.svelte
  5. 2
      packages/svelte/example/test-server/configs/template/base/link-query/main-profile.ttl
  6. 2
      packages/svelte/example/test-server/configs/template/base/link-query/other-profile.ttl
  7. 2
      packages/svelte/example/test-server/configs/template/base/link-query/third-profile.ttl
  8. 2
      packages/svelte/package.json
  9. 14
      packages/svelte/src/createLdoSvelteMethods.tsx
  10. 43
      packages/svelte/src/methods/useLinkQuery.ts
  11. 5
      packages/svelte/src/util/useTrackingProxy.ts

@ -1,4 +1,4 @@
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
"version": "1.0.0-alpha.12"
"version": "1.0.0-alpha.13"
}

2
package-lock.json generated

@ -31594,7 +31594,7 @@
},
"packages/svelte": {
"name": "@ldo/svelte",
"version": "1.0.0-alpha.12",
"version": "1.0.0-alpha.13",
"license": "MIT",
"dependencies": {
"@ldo/connected": "^1.0.0-alpha.12",

@ -1,7 +1,7 @@
import { ShapeType } from "@ldo/ldo";
import { solidProfileSchema } from "./solidProfile.schema.js";
import { solidProfileContext } from "./solidProfile.context.js";
import { solidProfileSchema } from "./solidProfile.schema.js";
import { AddressShape, EmailShape, PhoneNumberShape, RSAPublicKeyShape, SolidProfileShape, TrustedAppShape } from "./solidProfile.typings.js";
/**
* =============================================================================

@ -1,7 +1,7 @@
<script lang="ts">
import { SolidProfileShapeShapeType } from "./.ldo/solidProfile.shapeTypes.js";
import { SolidProfileShapeShapeType } from "./.ldo/solidProfile.shapeTypes";
// Assuming these are the Svelte-specific functions/stores from your @ldo/svelte library
import { useResource, useSubject } from "./ldoSvelteMethods.js";
import { useResource, useSubject } from "./ldoSvelteMethods";
const SAMPLE_DATA_URI =
"http://localhost:3004/example/link-query/main-profile.ttl";
const resource = useResource(SAMPLE_DATA_URI);
@ -23,7 +23,6 @@
{:else}
<p>No friend found or friend has no @id.</p>
{/if}
<ul>
{#each friendArray as friend (friend["@id"])}
<li>{friend["@id"]}</li>

@ -4,4 +4,4 @@
:me a foaf:Person ;
foaf:name "Main User" ;
foaf:mbox <mailto:main@example.org> ;
foaf:knows <http://localhost:3002/example/link-query/other-profile.ttl#me> .
foaf:knows <http://localhost:3004/example/link-query/other-profile.ttl#me> .

@ -4,4 +4,4 @@
:me a foaf:Person ;
foaf:name "Other User" ;
foaf:mbox <mailto:other@example.org> ;
foaf:knows <http://localhost:3002/example/link-query/main-profile.ttl#me> .
foaf:knows <http://localhost:3004/example/link-query/main-profile.ttl#me> .

@ -4,4 +4,4 @@
:me a foaf:Person ;
foaf:name "Third User" ;
foaf:mbox <mailto:third@example.org> ;
foaf:knows <http://localhost:3002/example/link-query/main-profile.ttl#me> .
foaf:knows <http://localhost:3004/example/link-query/main-profile.ttl#me> .

@ -1,6 +1,6 @@
{
"name": "@ldo/svelte",
"version": "1.0.0-alpha.12",
"version": "1.0.0-alpha.13",
"description": "A Svelte library for LDO.",
"type": "module",
"main": "./dist/cjs/index.js",

@ -66,12 +66,12 @@ export function createLdoSvelteMethods<
return {
dataset,
useLdo: createUseLdo(dataset),
useMatchObject: createUseMatchObject(dataset),
useMatchSubject: createUseMatchSubject(dataset),
useResource: createUseResource(dataset),
useSubject: createUseSubject(dataset),
useSubscribeToResource: createUseSubscribeToResource(dataset),
useLinkQuery: createUseLinkQuery(dataset),
useLdo: createUseLdo<Plugins>(dataset),
useMatchObject: createUseMatchObject<Plugins>(dataset),
useMatchSubject: createUseMatchSubject<Plugins>(dataset),
useResource: createUseResource<Plugins>(dataset),
useSubject: createUseSubject<Plugins>(dataset),
useSubscribeToResource: createUseSubscribeToResource<Plugins>(dataset),
useLinkQuery: createUseLinkQuery<Plugins>(dataset),
};
}

@ -1,12 +1,15 @@
import type {
ConnectedLdoDataset,
ConnectedPlugin,
ExpandDeep,
LQInput,
LQReturn,
import {
type ConnectedLdoDataset,
type ConnectedPlugin,
type ExpandDeep,
type LQInput,
type LQReturn,
} from "@ldo/connected";
import type { LdoBase, ShapeType } from "@ldo/ldo";
import { type LdoBase, type LdoBuilder, type ShapeType } from "@ldo/ldo";
import type { SubjectNode } from "@ldo/rdf-utils";
import { type Readable } from "svelte/store";
import { useTrackingProxy } from "../util/useTrackingProxy.js";
import { onDestroy } from "svelte";
/**
* @internal
@ -28,7 +31,29 @@ export function createUseLinkQuery<Plugins extends ConnectedPlugin[]>(
startingResource: string,
startingSubject: SubjectNode | string,
linkQuery: QueryInput,
): ExpandDeep<LQReturn<Type, QueryInput>> | undefined {
throw new Error("Link Query is Not Implemented for Svelte");
): Readable<ExpandDeep<LQReturn<Type, QueryInput>> | undefined> {
const resource = dataset.getResource(startingResource);
console.log(resource);
const lq = dataset
.usingType(shapeType)
.startLinkQuery(resource, startingSubject, linkQuery);
console.log("Calling subscribe");
lq.subscribe();
console.log("After call subscribe");
onDestroy(() => {
lq.unsubscribeAll();
});
const fromSubject = (builder: LdoBuilder<Type>) => {
if (!startingSubject) return;
return builder.fromSubject(startingSubject);
};
return useTrackingProxy(
shapeType,
fromSubject,
dataset,
) as unknown as Readable<ExpandDeep<LQReturn<Type, QueryInput>>>;
};
}

@ -3,6 +3,7 @@ import type { LdoBase, LdoDataset, ShapeType } from "@ldo/ldo";
import { createTrackingProxyBuilder } from "@ldo/connected";
import { writable, type Readable } from "svelte/store";
import type { nodeEventListener } from "@ldo/subscribable-dataset";
import { onDestroy } from "svelte";
/**
* @internal
@ -38,6 +39,10 @@ export function useTrackingProxy<Type extends LdoBase, ReturnType>(
};
});
onDestroy(() => {
dataset.removeListenerFromAllEvents(forceUpdate);
});
return {
subscribe: store.subscribe,
};

Loading…
Cancel
Save