better-effect 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +301 -19
- package/dist/adapters/iti.d.mts +1 -1
- package/dist/adapters/iti.d.mts.map +1 -1
- package/dist/adapters/iti.mjs +0 -1
- package/dist/adapters/iti.mjs.map +1 -1
- package/dist/index-Bg6ofRE1.d.mts +232 -0
- package/dist/index-Bg6ofRE1.d.mts.map +1 -0
- package/dist/index.d.mts +55 -65
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +410 -31
- package/dist/index.mjs.map +1 -1
- package/dist/testing.d.mts +1 -2
- package/dist/testing.d.mts.map +1 -1
- package/dist/testing.mjs +1 -17
- package/dist/testing.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/backend-CNAls62W.d.mts +0 -39
- package/dist/backend-CNAls62W.d.mts.map +0 -1
package/dist/testing.d.mts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { U as AnyServiceToken, b as LayerProvider, r as LayerBackend } from "./index-Bg6ofRE1.mjs";
|
|
2
2
|
//#region src/testing/memory-layer-backend.d.ts
|
|
3
3
|
declare class MemoryLayerBackend implements LayerBackend {
|
|
4
4
|
private readonly providers;
|
|
5
5
|
private readonly instances;
|
|
6
6
|
private readonly pending;
|
|
7
|
-
private readonly resolutionOrder;
|
|
8
7
|
register(provider: LayerProvider): void;
|
|
9
8
|
resolve<T extends AnyServiceToken>(token: T): Promise<InstanceType<T>>;
|
|
10
9
|
disposeAll(): Promise<void>;
|
package/dist/testing.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.mts","names":[],"sources":["../src/testing/memory-layer-backend.ts"],"mappings":";;cAIa,8BAA8B;mBACxB;mBAEA;mBAEA;
|
|
1
|
+
{"version":3,"file":"testing.d.mts","names":[],"sources":["../src/testing/memory-layer-backend.ts"],"mappings":";;cAIa,8BAA8B;mBACxB;mBAEA;mBAEA;EAEjB,SAAS,UAAU;EAQb,QAAQ,UAAU,iBAAiB,OAAO,IAAI,QAAQ,aAAa;EAgCnE,cAAc"}
|
package/dist/testing.mjs
CHANGED
|
@@ -4,7 +4,6 @@ var MemoryLayerBackend = class {
|
|
|
4
4
|
providers = /* @__PURE__ */ new Map();
|
|
5
5
|
instances = /* @__PURE__ */ new Map();
|
|
6
6
|
pending = /* @__PURE__ */ new Map();
|
|
7
|
-
resolutionOrder = [];
|
|
8
7
|
register(provider) {
|
|
9
8
|
if (this.providers.has(provider.service)) throw new DuplicateServiceError(provider.service);
|
|
10
9
|
this.providers.set(provider.service, provider);
|
|
@@ -17,7 +16,6 @@ var MemoryLayerBackend = class {
|
|
|
17
16
|
if (!provider) throw new ServiceNotFoundError(token);
|
|
18
17
|
const acquisition = Promise.resolve(provider.acquire()).then((instance) => {
|
|
19
18
|
this.instances.set(token, instance);
|
|
20
|
-
this.resolutionOrder.push(token);
|
|
21
19
|
return instance;
|
|
22
20
|
}).finally(() => {
|
|
23
21
|
this.pending.delete(token);
|
|
@@ -27,23 +25,9 @@ var MemoryLayerBackend = class {
|
|
|
27
25
|
}
|
|
28
26
|
async disposeAll() {
|
|
29
27
|
if (this.pending.size > 0) await Promise.allSettled(this.pending.values());
|
|
30
|
-
const errors = [];
|
|
31
|
-
for (let index = this.resolutionOrder.length - 1; index >= 0; index--) {
|
|
32
|
-
const token = this.resolutionOrder[index];
|
|
33
|
-
if (!token) continue;
|
|
34
|
-
const instance = this.instances.get(token);
|
|
35
|
-
const provider = this.providers.get(token);
|
|
36
|
-
if (instance === void 0 || !provider?.release) continue;
|
|
37
|
-
try {
|
|
38
|
-
await provider.release(instance);
|
|
39
|
-
} catch (cause) {
|
|
40
|
-
errors.push(cause);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
28
|
this.instances.clear();
|
|
44
29
|
this.pending.clear();
|
|
45
|
-
this.
|
|
46
|
-
if (errors.length > 0) throw new AggregateError(errors, "Failed to dispose one or more services");
|
|
30
|
+
this.providers.clear();
|
|
47
31
|
}
|
|
48
32
|
};
|
|
49
33
|
//#endregion
|
package/dist/testing.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.mjs","names":[],"sources":["../src/testing/memory-layer-backend.ts"],"sourcesContent":["import { DuplicateServiceError, type LayerBackend, type LayerProvider } from '../layer'\n\nimport { ServiceNotFoundError, type AnyServiceToken } from '../service'\n\nexport class MemoryLayerBackend implements LayerBackend {\n private readonly providers = new Map<AnyServiceToken, LayerProvider>()\n\n private readonly instances = new Map<AnyServiceToken, unknown>()\n\n private readonly pending = new Map<AnyServiceToken, Promise<unknown>>()\n\n
|
|
1
|
+
{"version":3,"file":"testing.mjs","names":[],"sources":["../src/testing/memory-layer-backend.ts"],"sourcesContent":["import { DuplicateServiceError, type LayerBackend, type LayerProvider } from '../layer'\n\nimport { ServiceNotFoundError, type AnyServiceToken } from '../service'\n\nexport class MemoryLayerBackend implements LayerBackend {\n private readonly providers = new Map<AnyServiceToken, LayerProvider>()\n\n private readonly instances = new Map<AnyServiceToken, unknown>()\n\n private readonly pending = new Map<AnyServiceToken, Promise<unknown>>()\n\n register(provider: LayerProvider): void {\n if (this.providers.has(provider.service)) {\n throw new DuplicateServiceError(provider.service)\n }\n\n this.providers.set(provider.service, provider)\n }\n\n async resolve<T extends AnyServiceToken>(token: T): Promise<InstanceType<T>> {\n if (this.instances.has(token)) {\n return this.instances.get(token) as InstanceType<T>\n }\n\n const pending = this.pending.get(token)\n\n if (pending) {\n return (await pending) as InstanceType<T>\n }\n\n const provider = this.providers.get(token)\n\n if (!provider) {\n throw new ServiceNotFoundError(token)\n }\n\n const acquisition = Promise.resolve(provider.acquire())\n .then((instance) => {\n this.instances.set(token, instance)\n\n return instance\n })\n .finally(() => {\n this.pending.delete(token)\n })\n\n this.pending.set(token, acquisition)\n\n return (await acquisition) as InstanceType<T>\n }\n\n async disposeAll(): Promise<void> {\n if (this.pending.size > 0) {\n await Promise.allSettled(this.pending.values())\n }\n\n this.instances.clear()\n this.pending.clear()\n this.providers.clear()\n }\n}\n"],"mappings":";;AAIA,IAAa,qBAAb,MAAwD;CACtD,4BAA6B,IAAI,IAAoC;CAErE,4BAA6B,IAAI,IAA8B;CAE/D,0BAA2B,IAAI,IAAuC;CAEtE,SAAS,UAA+B;EACtC,IAAI,KAAK,UAAU,IAAI,SAAS,OAAO,GACrC,MAAM,IAAI,sBAAsB,SAAS,OAAO;EAGlD,KAAK,UAAU,IAAI,SAAS,SAAS,QAAQ;CAC/C;CAEA,MAAM,QAAmC,OAAoC;EAC3E,IAAI,KAAK,UAAU,IAAI,KAAK,GAC1B,OAAO,KAAK,UAAU,IAAI,KAAK;EAGjC,MAAM,UAAU,KAAK,QAAQ,IAAI,KAAK;EAEtC,IAAI,SACF,OAAQ,MAAM;EAGhB,MAAM,WAAW,KAAK,UAAU,IAAI,KAAK;EAEzC,IAAI,CAAC,UACH,MAAM,IAAI,qBAAqB,KAAK;EAGtC,MAAM,cAAc,QAAQ,QAAQ,SAAS,QAAQ,CAAC,CAAC,CACpD,MAAM,aAAa;GAClB,KAAK,UAAU,IAAI,OAAO,QAAQ;GAElC,OAAO;EACT,CAAC,CAAC,CACD,cAAc;GACb,KAAK,QAAQ,OAAO,KAAK;EAC3B,CAAC;EAEH,KAAK,QAAQ,IAAI,OAAO,WAAW;EAEnC,OAAQ,MAAM;CAChB;CAEA,MAAM,aAA4B;EAChC,IAAI,KAAK,QAAQ,OAAO,GACtB,MAAM,QAAQ,WAAW,KAAK,QAAQ,OAAO,CAAC;EAGhD,KAAK,UAAU,MAAM;EACrB,KAAK,QAAQ,MAAM;EACnB,KAAK,UAAU,MAAM;CACvB;AACF"}
|
package/package.json
CHANGED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
//#region src/service/types.d.ts
|
|
2
|
-
type ServiceToken<A = unknown> = (abstract new (...args: any[]) => A) & {
|
|
3
|
-
readonly name: string;
|
|
4
|
-
};
|
|
5
|
-
type AnyServiceToken = ServiceToken<any>;
|
|
6
|
-
type ServiceClass<A = unknown> = (new (...args: any[]) => A) & {
|
|
7
|
-
readonly name: string;
|
|
8
|
-
};
|
|
9
|
-
type ServiceInstance<T extends AnyServiceToken> = InstanceType<T>;
|
|
10
|
-
//#endregion
|
|
11
|
-
//#region src/service/runtime.d.ts
|
|
12
|
-
interface ServiceResolver {
|
|
13
|
-
resolve<T extends AnyServiceToken>(token: T): InstanceType<T> | PromiseLike<InstanceType<T>>;
|
|
14
|
-
}
|
|
15
|
-
declare class ServiceRuntime {
|
|
16
|
-
static run<A>(resolver: ServiceResolver, program: () => A): A;
|
|
17
|
-
static current(): ServiceResolver;
|
|
18
|
-
static resolve<T extends AnyServiceToken>(token: T): Promise<InstanceType<T>>;
|
|
19
|
-
}
|
|
20
|
-
//#endregion
|
|
21
|
-
//#region src/utils/types.d.ts
|
|
22
|
-
type MaybePromise<T> = T | PromiseLike<T>;
|
|
23
|
-
//#endregion
|
|
24
|
-
//#region src/layer/types.d.ts
|
|
25
|
-
interface LayerProvider {
|
|
26
|
-
readonly service: ServiceClass<any>;
|
|
27
|
-
readonly acquire: () => MaybePromise<unknown>;
|
|
28
|
-
readonly release?: (instance: unknown) => MaybePromise<void>;
|
|
29
|
-
}
|
|
30
|
-
type LayerGenerator<S extends ServiceClass<any>> = () => AsyncGenerator<never, InstanceType<S>, unknown>;
|
|
31
|
-
//#endregion
|
|
32
|
-
//#region src/layer/backend.d.ts
|
|
33
|
-
interface LayerBackend extends ServiceResolver {
|
|
34
|
-
register(provider: LayerProvider): void | PromiseLike<void>;
|
|
35
|
-
disposeAll(): void | PromiseLike<void>;
|
|
36
|
-
}
|
|
37
|
-
//#endregion
|
|
38
|
-
export { ServiceResolver as a, ServiceClass as c, MaybePromise as i, ServiceInstance as l, LayerGenerator as n, ServiceRuntime as o, LayerProvider as r, AnyServiceToken as s, LayerBackend as t, ServiceToken as u };
|
|
39
|
-
//# sourceMappingURL=backend-CNAls62W.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"backend-CNAls62W.d.mts","names":[],"sources":["../src/service/types.ts","../src/service/runtime.ts","../src/utils/types.ts","../src/layer/types.ts","../src/layer/backend.ts"],"mappings":";KAAY,aAAa,iCAAiC,gBAAgB;WAC/D;;KAGC,kBAAkB;KAElB,aAAa,wBAAwB,gBAAgB;WACtD;;KAGC,gBAAgB,UAAU,mBAAmB,aAAa;;;UCJrD;EACf,QAAQ,UAAU,iBAAiB,OAAO,IAAI,aAAa,KAAK,YAAY,aAAa;;cAK9E;SACJ,IAAI,GAAG,UAAU,iBAAiB,eAAe,IAAI;SAIrD,WAAW;SAUL,QAAQ,UAAU,iBAAiB,OAAO,IAAI,QAAQ,aAAa;;;;KC3BtE,aAAa,KAAK,IAAI,YAAY;;;UCG7B;WACN,SAAS;WAET,eAAe;WAEf,WAAW,sBAAsB;;KAGhC,eAAe,UAAU,2BAA2B,sBAE9D,aAAa;;;UCTE,qBAAqB;EACpC,SAAS,UAAU,uBAAuB;EAC1C,qBAAqB"}
|