Skip to content

Commit

Permalink
update effect
Browse files Browse the repository at this point in the history
  • Loading branch information
tim-smart committed Feb 9, 2024
1 parent eb6e20f commit bb681ad
Show file tree
Hide file tree
Showing 32 changed files with 328 additions and 349 deletions.
2 changes: 1 addition & 1 deletion examples/readme.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { runMain } from "@effect/platform-node/Runtime"
import { runMain } from "@effect/platform-node/NodeRuntime"
import { DiscordConfig, Ix } from "dfx"
import { DiscordIxLive, InteractionsRegistry } from "dfx/gateway"
import * as Dotenv from "dotenv"
Expand Down
13 changes: 7 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@
"ws": "^8.16.0"
},
"peerDependencies": {
"@effect/platform": "^0.43.11",
"effect": "^2.2.0"
"@effect/platform": "^0.44.0",
"effect": "^2.3.0"
},
"optionalDependencies": {
"bufferutil": "^4.0.8",
Expand All @@ -64,8 +64,8 @@
"@effect/babel-plugin": "^0.2.0",
"@effect/build-utils": "^0.7.2",
"@effect/language-service": "^0.1.0",
"@effect/platform": "^0.43.11",
"@effect/platform-node": "^0.42.11",
"@effect/platform": "^0.44.0",
"@effect/platform-node": "^0.43.0",
"@tim-smart/discord-api-docs-parser": "^0.5.10",
"@types/chai": "^4.3.11",
"@types/node": "^20.11.17",
Expand All @@ -77,21 +77,22 @@
"babel-plugin-annotate-pure-calls": "^0.4.0",
"concurrently": "^8.2.2",
"dotenv": "^16.4.1",
"effect": "^2.2.5",
"effect": "^2.3.0",
"eslint": "^8.56.0",
"eslint-config-prettier": "^9.1.0",
"eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-codegen": "0.23.0",
"eslint-plugin-deprecation": "^2.0.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-simple-import-sort": "^10.0.0",
"eslint-plugin-simple-import-sort": "^11.0.0",
"eslint-plugin-sort-destructure-keys": "^1.5.0",
"lerna": "^8.1.2",
"madge": "^6.1.0",
"prettier": "^3.2.5",
"rimraf": "^5.0.5",
"ts-node": "^10.9.2",
"tsx": "^4.7.0",
"typescript": "^5.3.3",
"vite": "^5.1.0",
"vitest": "1.2.2"
Expand Down
83 changes: 54 additions & 29 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

62 changes: 31 additions & 31 deletions src/Cache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,36 +34,36 @@ export interface ParentCache<EDriver, EMiss, EPMiss, A> {
readonly get: (
parentId: string,
id: string,
) => Effect.Effect<never, EDriver | EMiss, A>
readonly put: (_: A) => Effect.Effect<never, EDriver | EMiss, void>
) => Effect.Effect<A, EDriver | EMiss>
readonly put: (_: A) => Effect.Effect<void, EDriver | EMiss>
readonly update: <R, E>(
parentId: string,
id: string,
f: (_: A) => Effect.Effect<R, E, A>,
) => Effect.Effect<R, EDriver | EMiss | E, A>
f: (_: A) => Effect.Effect<A, E, R>,
) => Effect.Effect<A, EDriver | EMiss | E, R>
readonly getForParent: (
parentId: string,
) => Effect.Effect<never, EDriver | EPMiss, ReadonlyMap<string, A>>
readonly size: Effect.Effect<never, EDriver, number>
) => Effect.Effect<ReadonlyMap<string, A>, EDriver | EPMiss>
readonly size: Effect.Effect<number, EDriver>
readonly sizeForParent: (
parentId: string,
) => Effect.Effect<never, EDriver, number>
) => Effect.Effect<number, EDriver>
readonly set: (
parentId: string,
resourceId: string,
resource: A,
) => Effect.Effect<never, EDriver, void>
) => Effect.Effect<void, EDriver>
readonly delete: (
parentId: string,
resourceId: string,
) => Effect.Effect<never, EDriver, void>
) => Effect.Effect<void, EDriver>
readonly parentDelete: (
parentId: string,
) => Effect.Effect<never, EDriver, void>
) => Effect.Effect<void, EDriver>
readonly refreshTTL: (
parentId: string,
resourceId: string,
) => Effect.Effect<never, EDriver, void>
) => Effect.Effect<void, EDriver>
}

export const makeWithParent = <EOps, EDriver, EMiss, EPMiss, A>({
Expand All @@ -74,19 +74,19 @@ export const makeWithParent = <EOps, EDriver, EMiss, EPMiss, A>({
ops = Stream.empty,
}: {
driver: ParentCacheDriver<EDriver, A>
ops?: Stream.Stream<never, EOps, ParentCacheOp<A>>
ops?: Stream.Stream<ParentCacheOp<A>, EOps>
id: (
_: A,
) => Effect.Effect<never, EMiss, readonly [parentId: string, id: string]>
onMiss: (parentId: string, id: string) => Effect.Effect<never, EMiss, A>
) => Effect.Effect<readonly [parentId: string, id: string], EMiss>
onMiss: (parentId: string, id: string) => Effect.Effect<A, EMiss>
onParentMiss: (
parentId: string,
) => Effect.Effect<never, EPMiss, Array<[id: string, resource: A]>>
}): Effect.Effect<Scope.Scope, never, ParentCache<EDriver, EMiss, EPMiss, A>> =>
) => Effect.Effect<Array<[id: string, resource: A]>, EPMiss>
}): Effect.Effect<ParentCache<EDriver, EMiss, EPMiss, A>, never, Scope.Scope> =>
Effect.gen(function* (_) {
yield* _(
Stream.runDrain(
Stream.tap(ops, (op): Effect.Effect<never, EDriver, void> => {
Stream.tap(ops, (op): Effect.Effect<void, EDriver> => {
switch (op.op) {
case "create":
case "update":
Expand Down Expand Up @@ -129,7 +129,7 @@ export const makeWithParent = <EOps, EDriver, EMiss, EPMiss, A>({
const update = <R, E>(
parentId: string,
id: string,
f: (_: A) => Effect.Effect<R, E, A>,
f: (_: A) => Effect.Effect<A, E, R>,
) =>
get(parentId, id).pipe(
Effect.flatMap(f),
Expand Down Expand Up @@ -171,21 +171,21 @@ export const makeWithParent = <EOps, EDriver, EMiss, EPMiss, A>({
)

export interface Cache<EDriver, EMiss, A> {
readonly get: (id: string) => Effect.Effect<never, EDriver | EMiss, A>
readonly put: (_: A) => Effect.Effect<never, EDriver, void>
readonly get: (id: string) => Effect.Effect<A, EDriver | EMiss>
readonly put: (_: A) => Effect.Effect<void, EDriver>
readonly update: <R, E>(
id: string,
f: (_: A) => Effect.Effect<R, E, A>,
) => Effect.Effect<R, EDriver | EMiss | E, A>
readonly size: Effect.Effect<never, EDriver, number>
f: (_: A) => Effect.Effect<A, E, R>,
) => Effect.Effect<A, EDriver | EMiss | E, R>
readonly size: Effect.Effect<number, EDriver>
readonly set: (
resourceId: string,
resource: A,
) => Effect.Effect<never, EDriver, void>
readonly delete: (resourceId: string) => Effect.Effect<never, EDriver, void>
) => Effect.Effect<void, EDriver>
readonly delete: (resourceId: string) => Effect.Effect<void, EDriver>
readonly refreshTTL: (
resourceId: string,
) => Effect.Effect<never, EDriver, void>
) => Effect.Effect<void, EDriver>
}

export const make = <EOps, EDriver, EMiss, A>({
Expand All @@ -195,14 +195,14 @@ export const make = <EOps, EDriver, EMiss, A>({
ops = Stream.empty,
}: {
driver: CacheDriver<EDriver, A>
ops?: Stream.Stream<never, EOps, CacheOp<A>>
ops?: Stream.Stream<CacheOp<A>, EOps>
id: (_: A) => string
onMiss: (id: string) => Effect.Effect<never, EMiss, A>
}): Effect.Effect<Scope.Scope, never, Cache<EDriver, EMiss, A>> =>
onMiss: (id: string) => Effect.Effect<A, EMiss>
}): Effect.Effect<Cache<EDriver, EMiss, A>, never, Scope.Scope> =>
Effect.gen(function* (_) {
yield* _(
Stream.runDrain(
Stream.tap(ops, (op): Effect.Effect<never, EDriver, void> => {
Stream.tap(ops, (op): Effect.Effect<void, EDriver> => {
switch (op.op) {
case "create":
case "update":
Expand Down Expand Up @@ -238,7 +238,7 @@ export const make = <EOps, EDriver, EMiss, A>({

const put = (_: A) => driver.set(id(_), _)

const update = <R, E>(id: string, f: (_: A) => Effect.Effect<R, E, A>) =>
const update = <R, E>(id: string, f: (_: A) => Effect.Effect<A, E, R>) =>
get(id).pipe(
Effect.flatMap(f),
Effect.tap(_ => driver.set(id, _)),
Expand Down
Loading

0 comments on commit bb681ad

Please sign in to comment.