From ab9211097082ac729861b147129f0afbd1d13320 Mon Sep 17 00:00:00 2001 From: Samuel Andert Date: Tue, 25 Jul 2023 11:20:51 +0200 Subject: [PATCH] Added auto import of services to the composite --- src/lib/components/Composite.svelte | 39 ++++++++++++++++--- src/lib/components/GoogleAuth.svelte | 8 ++-- .../components/HelloEarth/HelloEarth.svelte | 10 +++++ src/lib/servicesLoader.ts | 10 +++++ src/routes/+page.svelte | 8 ++-- vite.config.ts | 39 +++++++++++++++++++ 6 files changed, 101 insertions(+), 13 deletions(-) create mode 100644 src/lib/servicesLoader.ts diff --git a/src/lib/components/Composite.svelte b/src/lib/components/Composite.svelte index 773bde4..c6d9501 100644 --- a/src/lib/components/Composite.svelte +++ b/src/lib/components/Composite.svelte @@ -1,6 +1,7 @@
{#each componentsData.children as component (component.id)} - {#await getComponent(component.componentName) then Component} + {#await Promise.all( [getComponent(component.componentName), getServiceProps(component)] ) then [Component, loadedServices]} {#if Component}
- + { + acc[component.services[idx]] = currFn; + return acc; + }, {})} + /> {#if component.actions}
@@ -88,7 +116,6 @@
{/if} - {#if component.children && component.children.length} {/if} diff --git a/src/lib/components/GoogleAuth.svelte b/src/lib/components/GoogleAuth.svelte index d27a920..c34f706 100644 --- a/src/lib/components/GoogleAuth.svelte +++ b/src/lib/components/GoogleAuth.svelte @@ -5,7 +5,7 @@ import { ProviderType } from '@lit-protocol/constants'; import { LitAccessControlConditionResource, LitAbility } from '@lit-protocol/auth-helpers'; import { createMessage } from '$lib/services/messages'; - import { setupLitProvider } from '$lib/services/provider/setupLitProvider'; + // import { setupLitProvider } from '$lib/services/provider/setupLitProvider.ts'; const redirectUri = 'http://localhost:5173/'; let view = 'sign_in'; @@ -17,9 +17,12 @@ let sessionSigs; let isLoading = false; + export let setupLitProvider; + let provider; onMount(async () => { + provider = await setupLitProvider.setupLitProvider(); isLoading = true; console.log('Component mounted.'); createMessage({ @@ -29,9 +32,6 @@ }); try { - // Globally set the provider during the component's mount - provider = await setupLitProvider(); - console.log('Checking if isSignInRedirect...'); if (!authMethod && isSignInRedirect(redirectUri)) { console.log('Redirect detected, handling...'); diff --git a/src/lib/components/HelloEarth/HelloEarth.svelte b/src/lib/components/HelloEarth/HelloEarth.svelte index f9ef1e3..f789709 100644 --- a/src/lib/components/HelloEarth/HelloEarth.svelte +++ b/src/lib/components/HelloEarth/HelloEarth.svelte @@ -2,9 +2,19 @@ export let id; import { getComponentStore } from '$lib/stores/componentStores.ts'; + import { onMount } from 'svelte'; const store = getComponentStore(id); $: console.log('store:', $store); + + export let setupLitProvider; + + let provider; + + onMount(async () => { + provider = await setupLitProvider.setupLitProvider(); + console.log('provider ' + JSON.stringify(provider)); + });
Hello Earth {JSON.stringify($store)}
diff --git a/src/lib/servicesLoader.ts b/src/lib/servicesLoader.ts new file mode 100644 index 0000000..64cb6f0 --- /dev/null +++ b/src/lib/servicesLoader.ts @@ -0,0 +1,10 @@ +import serviceNames from 'virtual:services-list'; + +const services = {}; + +serviceNames.forEach(path => { + const name = path.split('/').pop().replace('.ts', ''); // Extract just the file name from the path without .ts + services[name] = () => import(/* @vite-ignore */ `/src/lib/services/${path}`); +}); + +export default services; \ No newline at end of file diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 71a8073..c8cc7c7 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -6,7 +6,8 @@ grid-template-areas: "auth", "login", - "play" + "play", + "hello" grid-template-rows: auto 1fr 1fr; `, children: [ @@ -26,9 +27,10 @@ } }, { - id: 'login1', + id: 'hello', componentName: 'GoogleAuth', - slot: 'login' + slot: 'hello', + services: ['setupLitProvider'] } ] }; diff --git a/vite.config.ts b/vite.config.ts index d148f65..326f53b 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -19,6 +19,21 @@ function getRecursiveSvelteFiles(dir) { return files; } +function getRecursiveServiceFiles(dir) { + const dirents = fs.readdirSync(dir, { withFileTypes: true }); + const files = Array.from(dirents).flatMap((dirent) => { + const res = resolve(dir, dirent.name); + if (dirent.isDirectory()) { + return getRecursiveServiceFiles(res); + } else if (res.endsWith('.ts')) { + return [res]; + } else { + return []; + } + }); + return files; +} + export default defineConfig({ plugins: [ sveltekit(), @@ -45,6 +60,30 @@ export default defineConfig({ } return null; } + }, + { + name: 'services-resolver', + resolveId(source) { + if (source === 'virtual:services-list') return source; + return null; + }, + load(id) { + if (id === 'virtual:services-list') { + const servicesDir = resolve(__dirname, 'src/lib/services'); + const serviceFiles = getRecursiveServiceFiles(servicesDir); + + const services = serviceFiles.map(file => + file + .replace(servicesDir, '') + .replace(/\.ts$/, '') + .replace(/\\/g, '/') // Fix Windows path separators + .slice(1) // Remove leading "/" + ); + + return `export default ${JSON.stringify(services)};`; + } + return null; + } } ], test: {