From e3582de92ba4c2e20bad08269b714b56a33d47fd Mon Sep 17 00:00:00 2001 From: Jackson Morgan Date: Tue, 25 Mar 2025 14:37:19 -0400 Subject: [PATCH] solid-react builds --- package-lock.json | 5 +-- .../connected-solid/src/wac/setWacRule.ts | 4 +- ...ctMethods.ts => createLdoReactMethods.tsx} | 0 packages/react/src/index.ts | 12 ++++++ ...tsx => createBrowserSolidReactMethods.tsx} | 20 +++++++--- packages/solid-react/src/defaultIntance.ts | 5 ++- packages/solid-react/src/index.ts | 7 +--- packages/solid-react/src/useRootContainer.ts | 31 --------------- .../solid-react/src/useRootContainerFor.ts | 38 +++++++++++++++++++ .../test/Solid-Integration.test.tsx | 16 ++++---- packages/solid-react/test/setUpServer.ts | 16 ++++---- 11 files changed, 90 insertions(+), 64 deletions(-) rename packages/react/src/{createLdoReactMethods.ts => createLdoReactMethods.tsx} (100%) rename packages/solid-react/src/{BrowserSolidLdoProvider.tsx => createBrowserSolidReactMethods.tsx} (83%) delete mode 100644 packages/solid-react/src/useRootContainer.ts create mode 100644 packages/solid-react/src/useRootContainerFor.ts diff --git a/package-lock.json b/package-lock.json index e1427fd..46ecaf4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21612,10 +21612,7 @@ "dependencies": { "@inrupt/solid-client-authn-browser": "^2.0.0", "@ldo/connected": "^1.0.0-alpha.1", - "@ldo/dataset": "^1.0.0-alpha.1", - "@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.1", - "@ldo/ldo": "^1.0.0-alpha.1", - "@ldo/subscribable-dataset": "^1.0.0-alpha.1", + "@ldo/connected-solid": "^1.0.0-alpha.1", "@rdfjs/data-model": "^1.2.0", "cross-fetch": "^3.1.6" }, diff --git a/packages/connected-solid/src/wac/setWacRule.ts b/packages/connected-solid/src/wac/setWacRule.ts index 9be8254..9bfe2f6 100644 --- a/packages/connected-solid/src/wac/setWacRule.ts +++ b/packages/connected-solid/src/wac/setWacRule.ts @@ -14,7 +14,7 @@ import { } from "../requester/results/error/HttpErrorResult"; import type { UnexpectedResourceError } from "@ldo/connected"; import type { BasicRequestOptions } from "../requester/requests/requestOptions"; -import { isContainerUri } from "@ldo/solid"; +import { isSolidContainerUri } from "../util/isSolidUri"; export type SetWacRuleError = | HttpErrorResultType @@ -82,7 +82,7 @@ export async function setWacRuleForAclUri( if (accessModeList.append) authorization.mode?.add({ "@id": "Append" }); if (accessModeList.control) authorization.mode?.add({ "@id": "Control" }); authorization.accessTo = { "@id": resource.uri }; - if (isContainerUri(resource.uri)) { + if (isSolidContainerUri(resource.uri)) { authorization.default = { "@id": resource.uri }; } ruleMap[accessModeListHash] = authorization; diff --git a/packages/react/src/createLdoReactMethods.ts b/packages/react/src/createLdoReactMethods.tsx similarity index 100% rename from packages/react/src/createLdoReactMethods.ts rename to packages/react/src/createLdoReactMethods.tsx diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index e2c56af..05d1868 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -1 +1,13 @@ export * from "./createLdoReactMethods"; + +export * from "./methods/useLdo"; +export * from "./methods/useMatchObject"; +export * from "./methods/useMatchSubject"; +export * from "./methods/useResource"; +export * from "./methods/useSubject"; +export * from "./methods/useSubscribeToResource"; + +export * from "./util/TrackingProxyContext"; +export * from "./util/TrackingSetProxy"; +export * from "./util/TrackingSubjectProxy"; +export * from "./util/useTrackingProxy"; diff --git a/packages/solid-react/src/BrowserSolidLdoProvider.tsx b/packages/solid-react/src/createBrowserSolidReactMethods.tsx similarity index 83% rename from packages/solid-react/src/BrowserSolidLdoProvider.tsx rename to packages/solid-react/src/createBrowserSolidReactMethods.tsx index 69fd4dc..efa4af9 100644 --- a/packages/solid-react/src/BrowserSolidLdoProvider.tsx +++ b/packages/solid-react/src/createBrowserSolidReactMethods.tsx @@ -1,7 +1,7 @@ import React, { useCallback, useEffect, useMemo, useState } from "react"; import type { FunctionComponent, PropsWithChildren } from "react"; import type { LoginOptions, SessionInfo } from "./SolidAuthContext"; -import { SolidAuthContext } from "./SolidAuthContext"; +import { SolidAuthContext, useSolidAuth } from "./SolidAuthContext"; import { getDefaultSession, handleIncomingRedirect, @@ -9,13 +9,15 @@ import { logout as libraryLogout, fetch as libraryFetch, } from "@inrupt/solid-client-authn-browser"; -import type { ConnectedLdoDataset } from "@ldo/connected"; +import type { ConnectedLdoDataset, ConnectedPlugin } from "@ldo/connected"; import type { SolidConnectedPlugin } from "@ldo/connected-solid"; +import { createUseRootContainerFor } from "./useRootContainerFor"; +import { createUseResource } from "@ldo/react"; const PRE_REDIRECT_URI = "PRE_REDIRECT_URI"; -export function createBrowserSolidLdoProvider( - dataset: ConnectedLdoDataset<(SolidConnectedPlugin | SolidConnectedPlugin)[]>, +export function createBrowserSolidReactMethods( + dataset: ConnectedLdoDataset<(SolidConnectedPlugin | ConnectedPlugin)[]>, ) { dataset.setContext("solid", { fetch: libraryFetch }); @@ -113,5 +115,13 @@ export function createBrowserSolidLdoProvider( ); }; - return BrowserSolidLdoProvider; + + return { + BrowserSolidLdoProvider, + useSolidAuth: useSolidAuth, + useRootContainerFor: createUseRootContainerFor( + dataset as ConnectedLdoDataset, + createUseResource(dataset as ConnectedLdoDataset), + ), + }; } diff --git a/packages/solid-react/src/defaultIntance.ts b/packages/solid-react/src/defaultIntance.ts index 39d72b3..6a68626 100644 --- a/packages/solid-react/src/defaultIntance.ts +++ b/packages/solid-react/src/defaultIntance.ts @@ -1,6 +1,6 @@ import { solidConnectedPlugin } from "@ldo/connected-solid"; import { createLdoReactMethods } from "@ldo/react"; -import { createBrowserSolidLdoProvider } from "./BrowserSolidLdoProvider"; +import { createBrowserSolidReactMethods } from "./createBrowserSolidReactMethods"; export const { dataset, @@ -12,4 +12,5 @@ export const { useSubscribeToResource, } = createLdoReactMethods([solidConnectedPlugin]); -export const BrowserSolidLdoProvider = createBrowserSolidLdoProvider(dataset); +export const { BrowserSolidLdoProvider, useSolidAuth, useRootContainerFor } = + createBrowserSolidReactMethods(dataset); diff --git a/packages/solid-react/src/index.ts b/packages/solid-react/src/index.ts index 025f86c..5db5a7b 100644 --- a/packages/solid-react/src/index.ts +++ b/packages/solid-react/src/index.ts @@ -1,7 +1,2 @@ -export * from "./BrowserSolidLdoProvider"; -export * from "./UnauthenticatedSolidLdoProvider"; -export * from "./SolidAuthContext"; +export * from "./createBrowserSolidReactMethods"; export * from "./defaultIntance"; - -// hooks -export * from "./useRootContainer"; diff --git a/packages/solid-react/src/useRootContainer.ts b/packages/solid-react/src/useRootContainer.ts deleted file mode 100644 index e32369a..0000000 --- a/packages/solid-react/src/useRootContainer.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { Container, ContainerUri } from "@ldo/solid"; -import { useEffect, useState } from "react"; -import type { UseResourceOptions } from "./useResource"; -import { useResource } from "./useResource"; -import { useLdo } from "./SolidLdoProvider"; - -export function useRootContainerFor( - uri?: string, - options?: UseResourceOptions, -): Container | undefined { - const { getResource } = useLdo(); - - const [rootContainerUri, setRootContainerUri] = useState< - ContainerUri | undefined - >(undefined); - - useEffect(() => { - if (uri) { - const givenResource = getResource(uri); - givenResource.getRootContainer().then((result) => { - if (!result.isError) { - setRootContainerUri(result.uri); - } - }); - } else { - setRootContainerUri(undefined); - } - }, [uri]); - - return useResource(rootContainerUri, options); -} diff --git a/packages/solid-react/src/useRootContainerFor.ts b/packages/solid-react/src/useRootContainerFor.ts new file mode 100644 index 0000000..57d636c --- /dev/null +++ b/packages/solid-react/src/useRootContainerFor.ts @@ -0,0 +1,38 @@ +import { useEffect, useState } from "react"; +import type { ConnectedLdoDataset, ConnectedPlugin } from "@ldo/connected"; +import type { + SolidConnectedPlugin, + SolidContainer, + SolidContainerUri, + SolidLeafUri, +} from "@ldo/connected-solid"; +import type { UseResourceOptions, createUseResource } from "@ldo/react"; + +export function createUseRootContainerFor( + dataset: ConnectedLdoDataset, + useResource: ReturnType>, +) { + return function useRootContainerFor( + uri?: SolidContainerUri | SolidLeafUri, + options?: UseResourceOptions<"solid">, + ): SolidContainer | undefined { + const [rootContainerUri, setRootContainerUri] = useState< + SolidContainerUri | undefined + >(undefined); + + useEffect(() => { + if (uri) { + const givenResource = dataset.getResource(uri); + givenResource.getRootContainer().then((result) => { + if (!result.isError) { + setRootContainerUri(result.uri); + } + }); + } else { + setRootContainerUri(undefined); + } + }, [uri]); + + return useResource(rootContainerUri, options) as SolidContainer | undefined; + }; +} diff --git a/packages/solid-react/test/Solid-Integration.test.tsx b/packages/solid-react/test/Solid-Integration.test.tsx index 5dd3f1c..1aab399 100644 --- a/packages/solid-react/test/Solid-Integration.test.tsx +++ b/packages/solid-react/test/Solid-Integration.test.tsx @@ -8,15 +8,17 @@ import { setUpServer, } from "./setUpServer"; import { UnauthenticatedSolidLdoProvider } from "../src/UnauthenticatedSolidLdoProvider"; -import { useResource } from "../src/useResource"; -import { useRootContainerFor } from "../src/useRootContainer"; -import { useLdo } from "../src/SolidLdoProvider"; +import { + useLdo, + useMatchObject, + useMatchSubject, + useResource, + useRootContainerFor, + useSubject, + useSubscribeToResource, +} from "../src"; import { PostShShapeType } from "./.ldo/post.shapeTypes"; import type { PostSh } from "./.ldo/post.typings"; -import { useSubject } from "../src/useSubject"; -import { useMatchSubject } from "../src/useMatchSubject"; -import { useMatchObject } from "../src/useMatchObject"; -import { useSubscribeToResource } from "../src/useSubscribeToResource"; // Use an increased timeout, since the CSS server takes too much setup time. jest.setTimeout(40_000); diff --git a/packages/solid-react/test/setUpServer.ts b/packages/solid-react/test/setUpServer.ts index 04a300c..b1f73d2 100644 --- a/packages/solid-react/test/setUpServer.ts +++ b/packages/solid-react/test/setUpServer.ts @@ -1,4 +1,4 @@ -import type { ContainerUri, LeafUri } from "@ldo/solid"; +import type { SolidContainerUri, SolidLeafUri } from "@ldo/connected-solid"; import fetch from "cross-fetch"; export const SERVER_DOMAIN = process.env.SERVER || "http://localhost:3002/"; @@ -7,17 +7,19 @@ export const ROOT_CONTAINER = `${SERVER_DOMAIN}${ROOT_ROUTE}`; export const WEB_ID = `${SERVER_DOMAIN}${ROOT_ROUTE}profile/card#me`; export const TEST_CONTAINER_SLUG = "test_ldo/"; export const TEST_CONTAINER_URI = - `${ROOT_CONTAINER}${TEST_CONTAINER_SLUG}` as ContainerUri; -export const SAMPLE_DATA_URI = `${TEST_CONTAINER_URI}sample.ttl` as LeafUri; + `${ROOT_CONTAINER}${TEST_CONTAINER_SLUG}` as SolidContainerUri; +export const SAMPLE_DATA_URI = + `${TEST_CONTAINER_URI}sample.ttl` as SolidLeafUri; export const SAMPLE2_DATA_SLUG = "sample2.ttl"; export const SAMPLE2_DATA_URI = - `${TEST_CONTAINER_URI}${SAMPLE2_DATA_SLUG}` as LeafUri; -export const SAMPLE_BINARY_URI = `${TEST_CONTAINER_URI}sample.txt` as LeafUri; + `${TEST_CONTAINER_URI}${SAMPLE2_DATA_SLUG}` as SolidLeafUri; +export const SAMPLE_BINARY_URI = + `${TEST_CONTAINER_URI}sample.txt` as SolidLeafUri; export const SAMPLE2_BINARY_SLUG = `sample2.txt`; export const SAMPLE2_BINARY_URI = - `${TEST_CONTAINER_URI}${SAMPLE2_BINARY_SLUG}` as LeafUri; + `${TEST_CONTAINER_URI}${SAMPLE2_BINARY_SLUG}` as SolidLeafUri; export const SAMPLE_CONTAINER_URI = - `${TEST_CONTAINER_URI}sample_container/` as ContainerUri; + `${TEST_CONTAINER_URI}sample_container/` as SolidContainerUri; export const EXAMPLE_POST_TTL = `@prefix schema: . <#Post1>