solid-react builds

main
Jackson Morgan 6 months ago
parent 108b1d677b
commit e3582de92b
  1. 5
      package-lock.json
  2. 4
      packages/connected-solid/src/wac/setWacRule.ts
  3. 0
      packages/react/src/createLdoReactMethods.tsx
  4. 12
      packages/react/src/index.ts
  5. 20
      packages/solid-react/src/createBrowserSolidReactMethods.tsx
  6. 5
      packages/solid-react/src/defaultIntance.ts
  7. 7
      packages/solid-react/src/index.ts
  8. 31
      packages/solid-react/src/useRootContainer.ts
  9. 38
      packages/solid-react/src/useRootContainerFor.ts
  10. 16
      packages/solid-react/test/Solid-Integration.test.tsx
  11. 16
      packages/solid-react/test/setUpServer.ts

5
package-lock.json generated

@ -21612,10 +21612,7 @@
"dependencies": { "dependencies": {
"@inrupt/solid-client-authn-browser": "^2.0.0", "@inrupt/solid-client-authn-browser": "^2.0.0",
"@ldo/connected": "^1.0.0-alpha.1", "@ldo/connected": "^1.0.0-alpha.1",
"@ldo/dataset": "^1.0.0-alpha.1", "@ldo/connected-solid": "^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",
"@rdfjs/data-model": "^1.2.0", "@rdfjs/data-model": "^1.2.0",
"cross-fetch": "^3.1.6" "cross-fetch": "^3.1.6"
}, },

@ -14,7 +14,7 @@ import {
} from "../requester/results/error/HttpErrorResult"; } from "../requester/results/error/HttpErrorResult";
import type { UnexpectedResourceError } from "@ldo/connected"; import type { UnexpectedResourceError } from "@ldo/connected";
import type { BasicRequestOptions } from "../requester/requests/requestOptions"; import type { BasicRequestOptions } from "../requester/requests/requestOptions";
import { isContainerUri } from "@ldo/solid"; import { isSolidContainerUri } from "../util/isSolidUri";
export type SetWacRuleError<ResourceType extends SolidContainer | SolidLeaf> = export type SetWacRuleError<ResourceType extends SolidContainer | SolidLeaf> =
| HttpErrorResultType<ResourceType> | HttpErrorResultType<ResourceType>
@ -82,7 +82,7 @@ export async function setWacRuleForAclUri(
if (accessModeList.append) authorization.mode?.add({ "@id": "Append" }); if (accessModeList.append) authorization.mode?.add({ "@id": "Append" });
if (accessModeList.control) authorization.mode?.add({ "@id": "Control" }); if (accessModeList.control) authorization.mode?.add({ "@id": "Control" });
authorization.accessTo = { "@id": resource.uri }; authorization.accessTo = { "@id": resource.uri };
if (isContainerUri(resource.uri)) { if (isSolidContainerUri(resource.uri)) {
authorization.default = { "@id": resource.uri }; authorization.default = { "@id": resource.uri };
} }
ruleMap[accessModeListHash] = authorization; ruleMap[accessModeListHash] = authorization;

@ -1 +1,13 @@
export * from "./createLdoReactMethods"; 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";

@ -1,7 +1,7 @@
import React, { useCallback, useEffect, useMemo, useState } from "react"; import React, { useCallback, useEffect, useMemo, useState } from "react";
import type { FunctionComponent, PropsWithChildren } from "react"; import type { FunctionComponent, PropsWithChildren } from "react";
import type { LoginOptions, SessionInfo } from "./SolidAuthContext"; import type { LoginOptions, SessionInfo } from "./SolidAuthContext";
import { SolidAuthContext } from "./SolidAuthContext"; import { SolidAuthContext, useSolidAuth } from "./SolidAuthContext";
import { import {
getDefaultSession, getDefaultSession,
handleIncomingRedirect, handleIncomingRedirect,
@ -9,13 +9,15 @@ import {
logout as libraryLogout, logout as libraryLogout,
fetch as libraryFetch, fetch as libraryFetch,
} from "@inrupt/solid-client-authn-browser"; } 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 type { SolidConnectedPlugin } from "@ldo/connected-solid";
import { createUseRootContainerFor } from "./useRootContainerFor";
import { createUseResource } from "@ldo/react";
const PRE_REDIRECT_URI = "PRE_REDIRECT_URI"; const PRE_REDIRECT_URI = "PRE_REDIRECT_URI";
export function createBrowserSolidLdoProvider( export function createBrowserSolidReactMethods(
dataset: ConnectedLdoDataset<(SolidConnectedPlugin | SolidConnectedPlugin)[]>, dataset: ConnectedLdoDataset<(SolidConnectedPlugin | ConnectedPlugin)[]>,
) { ) {
dataset.setContext("solid", { fetch: libraryFetch }); dataset.setContext("solid", { fetch: libraryFetch });
@ -113,5 +115,13 @@ export function createBrowserSolidLdoProvider(
</SolidAuthContext.Provider> </SolidAuthContext.Provider>
); );
}; };
return BrowserSolidLdoProvider;
return {
BrowserSolidLdoProvider,
useSolidAuth: useSolidAuth,
useRootContainerFor: createUseRootContainerFor(
dataset as ConnectedLdoDataset<SolidConnectedPlugin[]>,
createUseResource(dataset as ConnectedLdoDataset<ConnectedPlugin[]>),
),
};
} }

@ -1,6 +1,6 @@
import { solidConnectedPlugin } from "@ldo/connected-solid"; import { solidConnectedPlugin } from "@ldo/connected-solid";
import { createLdoReactMethods } from "@ldo/react"; import { createLdoReactMethods } from "@ldo/react";
import { createBrowserSolidLdoProvider } from "./BrowserSolidLdoProvider"; import { createBrowserSolidReactMethods } from "./createBrowserSolidReactMethods";
export const { export const {
dataset, dataset,
@ -12,4 +12,5 @@ export const {
useSubscribeToResource, useSubscribeToResource,
} = createLdoReactMethods([solidConnectedPlugin]); } = createLdoReactMethods([solidConnectedPlugin]);
export const BrowserSolidLdoProvider = createBrowserSolidLdoProvider(dataset); export const { BrowserSolidLdoProvider, useSolidAuth, useRootContainerFor } =
createBrowserSolidReactMethods(dataset);

@ -1,7 +1,2 @@
export * from "./BrowserSolidLdoProvider"; export * from "./createBrowserSolidReactMethods";
export * from "./UnauthenticatedSolidLdoProvider";
export * from "./SolidAuthContext";
export * from "./defaultIntance"; export * from "./defaultIntance";
// hooks
export * from "./useRootContainer";

@ -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);
}

@ -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<SolidConnectedPlugin[]>,
useResource: ReturnType<typeof createUseResource<ConnectedPlugin[]>>,
) {
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;
};
}

@ -8,15 +8,17 @@ import {
setUpServer, setUpServer,
} from "./setUpServer"; } from "./setUpServer";
import { UnauthenticatedSolidLdoProvider } from "../src/UnauthenticatedSolidLdoProvider"; import { UnauthenticatedSolidLdoProvider } from "../src/UnauthenticatedSolidLdoProvider";
import { useResource } from "../src/useResource"; import {
import { useRootContainerFor } from "../src/useRootContainer"; useLdo,
import { useLdo } from "../src/SolidLdoProvider"; useMatchObject,
useMatchSubject,
useResource,
useRootContainerFor,
useSubject,
useSubscribeToResource,
} from "../src";
import { PostShShapeType } from "./.ldo/post.shapeTypes"; import { PostShShapeType } from "./.ldo/post.shapeTypes";
import type { PostSh } from "./.ldo/post.typings"; 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. // Use an increased timeout, since the CSS server takes too much setup time.
jest.setTimeout(40_000); jest.setTimeout(40_000);

@ -1,4 +1,4 @@
import type { ContainerUri, LeafUri } from "@ldo/solid"; import type { SolidContainerUri, SolidLeafUri } from "@ldo/connected-solid";
import fetch from "cross-fetch"; import fetch from "cross-fetch";
export const SERVER_DOMAIN = process.env.SERVER || "http://localhost:3002/"; 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 WEB_ID = `${SERVER_DOMAIN}${ROOT_ROUTE}profile/card#me`;
export const TEST_CONTAINER_SLUG = "test_ldo/"; export const TEST_CONTAINER_SLUG = "test_ldo/";
export const TEST_CONTAINER_URI = export const TEST_CONTAINER_URI =
`${ROOT_CONTAINER}${TEST_CONTAINER_SLUG}` as ContainerUri; `${ROOT_CONTAINER}${TEST_CONTAINER_SLUG}` as SolidContainerUri;
export const SAMPLE_DATA_URI = `${TEST_CONTAINER_URI}sample.ttl` as LeafUri; export const SAMPLE_DATA_URI =
`${TEST_CONTAINER_URI}sample.ttl` as SolidLeafUri;
export const SAMPLE2_DATA_SLUG = "sample2.ttl"; export const SAMPLE2_DATA_SLUG = "sample2.ttl";
export const SAMPLE2_DATA_URI = export const SAMPLE2_DATA_URI =
`${TEST_CONTAINER_URI}${SAMPLE2_DATA_SLUG}` as LeafUri; `${TEST_CONTAINER_URI}${SAMPLE2_DATA_SLUG}` as SolidLeafUri;
export const SAMPLE_BINARY_URI = `${TEST_CONTAINER_URI}sample.txt` as LeafUri; export const SAMPLE_BINARY_URI =
`${TEST_CONTAINER_URI}sample.txt` as SolidLeafUri;
export const SAMPLE2_BINARY_SLUG = `sample2.txt`; export const SAMPLE2_BINARY_SLUG = `sample2.txt`;
export const SAMPLE2_BINARY_URI = 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 = 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: <http://schema.org/> . export const EXAMPLE_POST_TTL = `@prefix schema: <http://schema.org/> .
<#Post1> <#Post1>

Loading…
Cancel
Save