Skip to content

Commit

Permalink
Unify runtimes under one package
Browse files Browse the repository at this point in the history
  • Loading branch information
sleepyfran committed Aug 29, 2024
1 parent 6b3df1d commit 4852f35
Show file tree
Hide file tree
Showing 9 changed files with 55 additions and 30 deletions.
3 changes: 1 addition & 2 deletions packages/components/add-provider/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@
},
"dependencies": {
"@echo/core-types": "^1.0.0",
"@echo/services-bootstrap": "^1.0.0",
"@echo/services-add-provider-workflow": "^1.0.0",
"@echo/services-bootstrap-runtime": "^1.0.0",
"effect": "^3.6.5",
"lit": "^3.2.0",
"@lit/task": "^1.0.1"
Expand Down
10 changes: 2 additions & 8 deletions packages/components/add-provider/src/add-provider.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,9 @@
import { AddProviderWorkflow } from "@echo/core-types";
import { AddProviderWorkflowLive } from "@echo/services-add-provider-workflow";
import { MainLive } from "@echo/services-bootstrap";
import { Task } from "@lit/task";
import { Layer, ManagedRuntime } from "effect";
import { LitElement, html } from "lit";
import { customElement } from "lit/decorators.js";
import "./provider-loader";

const managedRuntime = ManagedRuntime.make(
AddProviderWorkflowLive.pipe(Layer.provide(MainLive)),
);
import { getOrCreateRuntime } from "@echo/services-bootstrap-runtime";

/**
* Component that displays a list of providers that can be added to the application
Expand All @@ -19,7 +13,7 @@ const managedRuntime = ManagedRuntime.make(
export class AddProvider extends LitElement {
private _availableProvidersTask = new Task(this, {
task: () =>
managedRuntime.runPromise(AddProviderWorkflow.availableProviders),
getOrCreateRuntime().runPromise(AddProviderWorkflow.availableProviders),
args: () => [],
});

Expand Down
14 changes: 5 additions & 9 deletions packages/components/add-provider/src/provider-loader.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,9 @@
import { AddProviderWorkflow, type ProviderMetadata } from "@echo/core-types";
import { AddProviderWorkflowLive } from "@echo/services-add-provider-workflow";
import { MainLive } from "@echo/services-bootstrap";
import { getOrCreateRuntime } from "@echo/services-bootstrap-runtime";
import { Task } from "@lit/task";
import { Layer, ManagedRuntime } from "effect";
import { LitElement, html } from "lit";
import { customElement, property } from "lit/decorators.js";

const managedRuntime = ManagedRuntime.make(
AddProviderWorkflowLive.pipe(Layer.provide(MainLive)),
);

/**
* Component that displays a list of available providers and loads them upon selection.
*/
Expand All @@ -20,13 +14,15 @@ export class ProviderLoader extends LitElement {

private _loadProvider = new Task(this, {
task: ([provider]: [ProviderMetadata]) =>
managedRuntime.runPromise(AddProviderWorkflow.loadProvider(provider)),
getOrCreateRuntime().runPromise(
AddProviderWorkflow.loadProvider(provider),
),
autoRun: false,
});

private _connectToProvider = new Task(this, {
task: () =>
managedRuntime.runPromise(AddProviderWorkflow.connectToProvider()),
getOrCreateRuntime().runPromise(AddProviderWorkflow.connectToProvider()),
autoRun: false,
});

Expand Down
18 changes: 18 additions & 0 deletions packages/services/bootstrap-runtime/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { AddProviderWorkflowLive } from "@echo/services-add-provider-workflow";
import { AppInitLive } from "@echo/services-app-init";
import { MainLive } from "@echo/services-bootstrap";
import { Layer, ManagedRuntime } from "effect";
import { globalValue } from "effect/GlobalValue";

/**
* Runtime for the application that exposes the services that can be used
* from the UI layer.
*/
export const getOrCreateRuntime = () =>
globalValue("echo-runtime", () =>
ManagedRuntime.make(
Layer.mergeAll(AppInitLive, AddProviderWorkflowLive).pipe(
Layer.provide(MainLive),
),
),
);
18 changes: 18 additions & 0 deletions packages/services/bootstrap-runtime/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "@echo/services-bootstrap-runtime",
"private": true,
"version": "1.0.0",
"description": "Contains the implementation for the BootstrapRuntime service",
"main": "index.js",
"scripts": {
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@echo/core-types": "^1.0.0",
"@echo/services-add-provider-workflow": "^1.0.0",
"@echo/services-app-init": "^1.0.0",
"@echo/services-bootstrap": "^1.0.0",
"effect": "^3.6.5"
}
}
7 changes: 7 additions & 0 deletions packages/services/bootstrap-runtime/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"extends": "../../../tsconfig.json",
"include": [
"src",
"index.ts"
]
}
2 changes: 1 addition & 1 deletion packages/web/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script type="module" src="/src/main.tsx"></script>
<script type="module" src="/src/main.ts"></script>
<title>🎧 Echo</title>
</head>
<body>
Expand Down
3 changes: 1 addition & 2 deletions packages/web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@
"dependencies": {
"@echo/components-add-provider": "^1.0.0",
"@echo/core-types": "^1.0.0",
"@echo/services-app-init": "^1.0.0",
"@echo/services-bootstrap": "^1.0.0",
"@echo/services-bootstrap-runtime": "^1.0.0",
"@echo/services-bootstrap-workers": "^1.0.0",
"effect": "^3.6.5",
"lit": "^3.2.0",
Expand Down
10 changes: 2 additions & 8 deletions packages/web/src/main.tsx → packages/web/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,20 @@
import { LitElement, html } from "lit";
import { customElement } from "lit/decorators.js";
import { initializeWorkers } from "@echo/services-bootstrap-workers";
import { ManagedRuntime, Layer } from "effect";
import { MainLive } from "@echo/services-bootstrap";
import { AppInitLive } from "@echo/services-app-init";
import { getOrCreateRuntime } from "@echo/services-bootstrap-runtime";
import { Task } from "@lit/task";
import { AppInit } from "@echo/core-types";
import "@echo/components-add-provider";

initializeWorkers();

const managedRuntime = ManagedRuntime.make(
AppInitLive.pipe(Layer.provide(MainLive)),
);

/**
* Root element of the application.
*/
@customElement("app-root")
export class MyElement extends LitElement {
private _initTask = new Task(this, {
task: () => managedRuntime.runPromise(AppInit.init),
task: () => getOrCreateRuntime().runPromise(AppInit.init),
args: () => [],
});

Expand Down

0 comments on commit 4852f35

Please sign in to comment.