Skip to content

Instantly share code, notes, and snippets.

View mattiamanzati's full-sized avatar
💭
undefined is not a function

Mattia Manzati mattiamanzati

💭
undefined is not a function
  • Effectful Technologies Inc
  • Ferrara, Italy
  • 05:43 (UTC +02:00)
  • X @mattiamanzati
View GitHub Profile
import { Show } from "@fp-ts/codec/Show"
import * as C from "@fp-ts/data/Context"
interface Meta<P> {
meta: P
}
interface MetaSchema<C> extends Meta<unknown> {
_tag: unknown
_C?: C
import * as T from "@effect/core/io/Effect"
import * as SE from "@effect/core/stm/TSemaphore"
import * as HM from "@tsplus/stdlib/collections/HashMap"
import { pipe } from "@tsplus/stdlib/data/Function"
import * as O from "@tsplus/stdlib/data/Maybe"
/**
* Given a function (key: K) => Effect<R, E, A> this DataLoader
* batches and caches requests such as concurrent lookups
* for the same key cannot happen.
import * as T from "@effect/core/io/Effect"
import type * as EX from "@effect/core/io/Exit"
import * as FID from "@effect/core/io/FiberId"
import * as HUB from "@effect/core/io/Hub"
import type * as RU from "@effect/core/io/Runtime"
import * as S from "@effect/core/stream/Stream"
import * as C from "@effect-ts/core/Case"
import { pipe } from "@tsplus/stdlib/data/Function"
import * as O from "@tsplus/stdlib/data/Maybe"
import * as ENV from "@tsplus/stdlib/service/Env"
import * as T from "@effect/core/io/Effect"
import type * as EX from "@effect/core/io/Exit"
import * as FID from "@effect/core/io/FiberId"
import * as HUB from "@effect/core/io/Hub"
import * as S from "@effect/core/stream/Stream"
import * as C from "@effect-ts/core/Case"
import { pipe } from "@tsplus/stdlib/data/Function"
import * as O from "@tsplus/stdlib/data/Maybe"
import * as ENV from "@tsplus/stdlib/service/Env"
import { Tag } from "@tsplus/stdlib/service/Tag"
import { pipe } from "@effect-ts/core"
import * as T from "@effect-ts/core/Effect"
import * as P from "@effect-ts/core/Effect/Promise"
import { tuple } from "@effect-ts/core/Function"
import * as O from "@effect-ts/core/Option"
export class ConcurrencyLock {
executing: P.Promise<never, void>[] = []
constructor(readonly maxConcurrency: number) {}
class DataLoader<K, R, E, A> {
hitMap: HM.HashMap<K, number> = HM.make();
promiseMap: HM.HashMap<K, P.Promise<E, A>> = HM.make();
constructor(readonly resolve: (key: K) => T.Effect<R, E, A>) {}
acquire(key: K): readonly [isFirst: boolean, promise: P.Promise<E, A>] {
return pipe(
HM.get_(this.promiseMap, key),
/**
* @tsplus type Codec
*/
export interface Codec<A> {
decode: (value: unknown) => E.Either<string, A>;
encode: (value: A) => unknown;
}
/**
/* Just a fake NodeJS db api exposed by mysql, mssql, etc...*/
interface FakeTrans {}
interface FakeConnection {
query(sql: string, trans?: FakeTrans): Promise<ResultSet>;
beginTransaction(): Promise<FakeTrans>;
commitTransaction(trans: FakeTrans): Promise<void>;
rollbackTransaction(trans: FakeTrans): Promise<void>;
close(): Promise<void>;
}
declare function fakeConnect(): Promise<FakeConnection>;
/* Just a fake NodeJS db api exposed by mysql, mssql, etc...*/
interface FakeTrans {}
interface FakeConnection {
query(sql: string, trans?: FakeTrans): Promise<ResultSet>;
beginTransaction(): Promise<FakeTrans>;
commitTransaction(trans: FakeTrans): Promise<void>;
rollbackTransaction(trans: FakeTrans): Promise<void>;
}
declare function fakeConnect(): Promise<FakeConnection>;
import * as E from "@effect-ts/core/Either";
import * as O from "@effect-ts/core/Option";
import * as D from "@effect-ts/core/Collections/Immutable/Dictionary";
import * as CA from "@effect-ts/core/Case";
import * as C from "@effect-ts/core/Collections/Immutable/Chunk";
import * as Q from "@effect-ts/query/Query";
import * as T from "@effect-ts/core/Effect";
import * as CRM from "@effect-ts/query/CompletedRequestMap";
import * as RQ from "@effect-ts/query/Request";
import * as DS from "@effect-ts/query/DataSource";