@effect-app/infra 1.46.2 → 1.47.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.
Files changed (47) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/_cjs/api/setupRequest.cjs +1 -1
  3. package/_cjs/api/setupRequest.cjs.map +1 -1
  4. package/_cjs/logger/jsonLogger.cjs +2 -1
  5. package/_cjs/logger/jsonLogger.cjs.map +1 -1
  6. package/_cjs/services/QueueMaker/service.cjs.map +1 -1
  7. package/_cjs/services/RepositoryBase.cjs +1 -4
  8. package/_cjs/services/RepositoryBase.cjs.map +1 -1
  9. package/_cjs/services/Store/ContextMapContainer.cjs +6 -16
  10. package/_cjs/services/Store/ContextMapContainer.cjs.map +1 -1
  11. package/dist/RequestContext.d.ts.map +1 -1
  12. package/dist/api/internal/RequestContextMiddleware.d.ts +1 -1
  13. package/dist/api/internal/RequestContextMiddleware.d.ts.map +1 -1
  14. package/dist/api/internal/events.d.ts +1 -1
  15. package/dist/api/internal/events.d.ts.map +1 -1
  16. package/dist/api/setupRequest.d.ts +2 -3
  17. package/dist/api/setupRequest.d.ts.map +1 -1
  18. package/dist/api/setupRequest.js +3 -3
  19. package/dist/logger/jsonLogger.d.ts.map +1 -1
  20. package/dist/logger/jsonLogger.js +3 -2
  21. package/dist/services/QueueMaker/SQLQueue.d.ts +1 -1
  22. package/dist/services/QueueMaker/memQueue.d.ts +1 -1
  23. package/dist/services/QueueMaker/sbqueue.d.ts +1 -1
  24. package/dist/services/QueueMaker/service.d.ts +1 -2
  25. package/dist/services/QueueMaker/service.d.ts.map +1 -1
  26. package/dist/services/QueueMaker/service.js +1 -1
  27. package/dist/services/Repository/ext.d.ts +11 -11
  28. package/dist/services/RepositoryBase.d.ts +12 -13
  29. package/dist/services/RepositoryBase.d.ts.map +1 -1
  30. package/dist/services/RepositoryBase.js +3 -4
  31. package/dist/services/RequestFiberSet.d.ts +1 -1
  32. package/dist/services/Store/ContextMapContainer.d.ts +7 -31
  33. package/dist/services/Store/ContextMapContainer.d.ts.map +1 -1
  34. package/dist/services/Store/ContextMapContainer.js +6 -21
  35. package/examples/query.ts +1 -2
  36. package/package.json +1 -1
  37. package/src/api/setupRequest.ts +2 -2
  38. package/src/logger/jsonLogger.ts +2 -1
  39. package/src/services/QueueMaker/service.ts +1 -2
  40. package/src/services/RepositoryBase.ts +8 -9
  41. package/src/services/Store/ContextMapContainer.ts +8 -36
  42. package/test/dist/query.test.d.ts.map +1 -1
  43. package/test/query.test.ts +1 -2
  44. package/vitest.config.ts.timestamp-1711656440838-19c636fe320df.mjs +0 -0
  45. package/vitest.config.ts.timestamp-1711724061890-6ecedb0a07fdd.mjs +0 -0
  46. package/vitest.config.ts.timestamp-1711743489537-da8d9e5f66c9f.mjs +0 -0
  47. package/vitest.config.ts.timestamp-1711744615239-dcf257a844e01.mjs +0 -37
@@ -48,7 +48,7 @@ import type { FieldValues } from "../filter/types.js"
48
48
  import { make as makeQuery } from "./query.js"
49
49
  import type { QAll, Query, QueryEnd, QueryProjection, QueryWhere } from "./query.js"
50
50
  import * as Q from "./query.js"
51
- import { ContextMapContainer } from "./Store/ContextMapContainer.js"
51
+ import { getContextMap } from "./Store/ContextMapContainer.js"
52
52
 
53
53
  export interface Mapped1<A, IdKey extends keyof A, R> {
54
54
  all: Effect<A[], ParseResult.ParseError, R>
@@ -393,8 +393,7 @@ export function makeRepo<
393
393
  )
394
394
 
395
395
  const store = yield* mkStore(args.makeInitial, args.config)
396
- const { get } = yield* ContextMapContainer
397
- const cms = Effect.andThen(get, (_) => ({
396
+ const cms = Effect.andThen(getContextMap.pipe(Effect.orDie), (_) => ({
398
397
  get: (id: string) => _.get(`${name}.${id}`),
399
398
  set: (id: string, etag: string | undefined) => _.set(`${name}.${id}`, etag)
400
399
  }))
@@ -763,7 +762,7 @@ export interface Repos<
763
762
  partitionValue?: (a: Encoded) => string
764
763
  }
765
764
  }
766
- ): Effect<Repository<T, Encoded, Evt, ItemType, IdKey>, E, StoreMaker | ContextMapContainer | R | RInitial | R2>
765
+ ): Effect<Repository<T, Encoded, Evt, ItemType, IdKey>, E, StoreMaker | R | RInitial | R2>
767
766
  makeWith<Out, RInitial = never, E = never, R2 = never>(
768
767
  args: [Evt] extends [never] ? {
769
768
  makeInitial?: Effect<readonly T[], E, RInitial>
@@ -779,7 +778,7 @@ export interface Repos<
779
778
  }
780
779
  },
781
780
  f: (r: Repository<T, Encoded, Evt, ItemType, IdKey>) => Out
782
- ): Effect<Out, E, StoreMaker | ContextMapContainer | R | RInitial | R2>
781
+ ): Effect<Out, E, StoreMaker | R | RInitial | R2>
783
782
  readonly Q: ReturnType<typeof Q.make<Encoded>>
784
783
  readonly type: Repository<T, Encoded, Evt, ItemType, IdKey>
785
784
  }
@@ -1145,14 +1144,14 @@ export const RepositoryDefaultImpl2 = <Service, Evt = never>() => {
1145
1144
  Service,
1146
1145
  E1 | Layer.Layer.Error<Layers[number]>,
1147
1146
  Exclude<
1148
- R1 | R | StoreMaker | ContextMapContainer,
1147
+ R1 | R | StoreMaker,
1149
1148
  { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number]
1150
1149
  >
1151
1150
  >
1152
1151
  DefaultWithoutDependencies: Layer.Layer<
1153
1152
  Service,
1154
1153
  E1,
1155
- R1 | R | StoreMaker | ContextMapContainer
1154
+ R1 | R | StoreMaker
1156
1155
  >
1157
1156
  }
1158
1157
  & Repos<
@@ -1221,14 +1220,14 @@ export const RepositoryDefaultImpl2 = <Service, Evt = never>() => {
1221
1220
  Service,
1222
1221
  E1 | Layer.Layer.Error<Layers[number]>,
1223
1222
  Exclude<
1224
- R1 | R | StoreMaker | ContextMapContainer,
1223
+ R1 | R | StoreMaker,
1225
1224
  { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number]
1226
1225
  >
1227
1226
  >
1228
1227
  DefaultWithoutDependencies: Layer.Layer<
1229
1228
  Service,
1230
1229
  E1,
1231
- R1 | R | StoreMaker | ContextMapContainer
1230
+ R1 | R | StoreMaker
1232
1231
  >
1233
1232
  }
1234
1233
  & Repos<
@@ -1,4 +1,4 @@
1
- import { Context, Effect, FiberRef, Layer, Option } from "effect-app"
1
+ import { Data, Effect, FiberRef } from "effect-app"
2
2
  import { ContextMap } from "./service.js"
3
3
 
4
4
  // TODO: we have to create a new contextmap on every request.
@@ -7,40 +7,12 @@ import { ContextMap } from "./service.js"
7
7
  // we can call another start after startup. but it would be even better if we could Die on accessing rootmap
8
8
  // we could also make the ContextMap optional, and when missing, issue a warning instead?
9
9
 
10
- /**
11
- * @tsplus companion ContextMapContainer.Ops
12
- */
13
- export abstract class ContextMapContainer extends Context.TagId("effect-app/ContextMapContainer")<ContextMapContainer, {
14
- get: Effect<ContextMap>
15
- start: Effect<void>
16
- }>() {
17
- static get getOption() {
18
- return Effect.flatMap(
19
- Effect
20
- .contextWith((_: Context<never>) => Context.getOption(_, ContextMapContainer)),
21
- (ctx) =>
22
- Option.isSome(ctx)
23
- ? Effect.map(ctx.value.get, Option.some)
24
- : Effect.sync(() => Option.none())
25
- )
26
- }
10
+ const ContextMapContainer = FiberRef.unsafeMake<ContextMap | "root">("root")
27
11
 
28
- static readonly live = Effect
29
- .flatMap(
30
- ContextMap.make,
31
- FiberRef.make<ContextMap>
32
- )
33
- .pipe(
34
- Effect
35
- .map((ref) =>
36
- ContextMapContainer.of({
37
- get: FiberRef.get(ref),
38
- start: Effect.flatMap(ContextMap.make, (_) => FiberRef.set(ref, _))
39
- })
40
- ),
41
- Layer.scoped(this)
42
- )
43
- }
12
+ export class ContextMapNotStartedError extends Data.TaggedError("ContextMapNotStartedError") {}
44
13
 
45
- /** @tsplus static ContextMap.Ops Tag */
46
- export const RCTag = Context.GenericTag<ContextMap>("@services/RCTag")
14
+ export const getContextMap = FiberRef.get(ContextMapContainer).pipe(
15
+ Effect.filterOrFail((_) => _ !== "root", () => new ContextMapNotStartedError())
16
+ )
17
+
18
+ export const startContextMap = Effect.flatMap(ContextMap.make, (_) => FiberRef.set(ContextMapContainer, _))
@@ -1 +1 @@
1
- {"version":3,"file":"query.test.d.ts","sourceRoot":"","sources":["../query.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAQ,KAAK,EAAgB,CAAC,EAAU,MAAM,YAAY,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYlF,qBAAa,SAAU,SAAQ,cAK7B;CAAG;AACL,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,UAAiB,OAAQ,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,SAAS,CAAC;KAAG;CACvE;;;;;;;;;;;;;;;;;;;;;;;;;AAGD,qBAAa,WAAY,SAAQ,gBAAgE;CAAG"}
1
+ {"version":3,"file":"query.test.d.ts","sourceRoot":"","sources":["../query.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAQ,KAAK,EAAgB,CAAC,EAAU,MAAM,YAAY,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWlF,qBAAa,SAAU,SAAQ,cAK7B;CAAG;AACL,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,UAAiB,OAAQ,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,SAAS,CAAC;KAAG;CACvE;;;;;;;;;;;;;;;;;;;;;;;;;AAGD,qBAAa,WAAY,SAAQ,gBAAgE;CAAG"}
@@ -3,7 +3,6 @@ import { inspect } from "util"
3
3
  import { expect, it } from "vitest"
4
4
  import { and, make, one, or, order, page, project, toFilter, where } from "../src/services/query.js"
5
5
  import { RepositoryDefaultImpl2 } from "../src/services/RepositoryBase.js"
6
- import { ContextMapContainer } from "../src/services/Store/ContextMapContainer.js"
7
6
  import { memFilter, MemoryStoreLive } from "../src/services/Store/Memory.js"
8
7
 
9
8
  const str = S.Struct({ _tag: S.Literal("string"), value: S.String })
@@ -91,7 +90,7 @@ class SomethingRepo extends RepositoryDefaultImpl2<SomethingRepo>()(
91
90
  { idKey: "id" }
92
91
  ) {
93
92
  static readonly Test = Layer.effect(SomethingRepo, SomethingRepo.makeWith({}, (_) => new SomethingRepo(_))).pipe(
94
- Layer.provide(Layer.merge(MemoryStoreLive, ContextMapContainer.live))
93
+ Layer.provide(MemoryStoreLive)
95
94
  )
96
95
  }
97
96
 
@@ -1,37 +0,0 @@
1
- // packages/infra/vitest.config.ts
2
- import { defineConfig } from "file:///Users/patrickroza/pj/effect-app/libs/node_modules/.pnpm/vite@5.2.6_@types+node@20.11.30/node_modules/vite/dist/node/index.js";
3
-
4
- // vite.config.base.ts
5
- import path from "path";
6
- import fs from "fs";
7
- var __vite_injected_original_dirname = "/Users/patrickroza/pj/effect-app/libs";
8
- function makeConfig(dirName) {
9
- const prefix = path.resolve(__vite_injected_original_dirname, "packages");
10
- const packages = fs.readdirSync(prefix).map((f) => prefix + "/" + f).filter((f) => fs.lstatSync(f).isDirectory());
11
- const cfg = {
12
- // eslint-disable-next-line @typescript-eslint/no-var-requires
13
- //plugins: [autoImport],
14
- test: {
15
- include: ["./test/**/*.test.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
16
- reporters: "verbose",
17
- globals: true
18
- },
19
- resolve: {
20
- alias: packages.reduce((acc, cur) => {
21
- acc[JSON.parse(fs.readFileSync(cur + "/package.json", "utf-8")).name] = path.resolve(cur, cur.endsWith("core") ? "dist" : "src");
22
- return acc;
23
- }, {})
24
- // "@effect-app/core/Prelude": path.join(__dirname, "packages/core/src/Prelude.code.ts")
25
- }
26
- };
27
- console.log(cfg);
28
- return cfg;
29
- }
30
-
31
- // packages/infra/vitest.config.ts
32
- var __vite_injected_original_dirname2 = "/Users/patrickroza/pj/effect-app/libs/packages/infra";
33
- var vitest_config_default = defineConfig(makeConfig(__vite_injected_original_dirname2));
34
- export {
35
- vitest_config_default as default
36
- };
37
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsicGFja2FnZXMvaW5mcmEvdml0ZXN0LmNvbmZpZy50cyIsICJ2aXRlLmNvbmZpZy5iYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy9wYWNrYWdlcy9pbmZyYVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy9wYWNrYWdlcy9pbmZyYS92aXRlc3QuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvcGFja2FnZXMvaW5mcmEvdml0ZXN0LmNvbmZpZy50c1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCBtYWtlQ29uZmlnIGZyb20gXCIuLi8uLi92aXRlLmNvbmZpZy5iYXNlXCJcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKG1ha2VDb25maWcoX19kaXJuYW1lKSlcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlic1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy92aXRlLmNvbmZpZy5iYXNlLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvdml0ZS5jb25maWcuYmFzZS50c1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IEF1dG9JbXBvcnQgZnJvbSBcInVucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGVcIlxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVzdC9jb25maWdcIlxuXG4vLyBjb25zdCBhdXRvSW1wb3J0ID0gQXV0b0ltcG9ydCh7XG4vLyAgIGR0czogXCIuL3Rlc3QvYXV0by1pbXBvcnRzLmQudHNcIixcbi8vICAgLy8gaW5jbHVkZTogW1xuLy8gICAvLyAgIC9cXC50ZXN0XFwuW3RqXXN4PyQvIC8vIC50cywgLnRzeCwgLmpzLCAuanN4XG4vLyAgIC8vIF0sXG4vLyAgIGltcG9ydHM6IFtcbi8vICAgICBcInZpdGVzdFwiXG4vLyAgIF1cbi8vIH0pXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VDb25maWcoZGlyTmFtZT86IHN0cmluZykge1xuICBjb25zdCBwcmVmaXggPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBcInBhY2thZ2VzXCIpXG4gIGNvbnN0IHBhY2thZ2VzID0gZnMucmVhZGRpclN5bmMocHJlZml4KS5tYXAoZiA9PiBwcmVmaXggKyBcIi9cIiArIGYpLmZpbHRlcihmID0+IGZzLmxzdGF0U3luYyhmKS5pc0RpcmVjdG9yeSgpIClcbiAgY29uc3QgY2ZnID0ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgLy9wbHVnaW5zOiBbYXV0b0ltcG9ydF0sXG4gICAgdGVzdDoge1xuICAgICAgaW5jbHVkZTogIFtcIi4vdGVzdC8qKi8qLnRlc3Que2pzLG1qcyxjanMsdHMsbXRzLGN0cyxqc3gsdHN4fVwiXSxcbiAgICAgIHJlcG9ydGVyczogXCJ2ZXJib3NlXCIsXG4gICAgICBnbG9iYWxzOiB0cnVlXG4gICAgfSxcbiAgICByZXNvbHZlOiB7XG4gICAgICBhbGlhczogcGFja2FnZXMucmVkdWNlKChhY2MsIGN1cikgPT4geyAvLyB3b3JrYXJvdW5kIGZvciAvUHJlbHVkZSBpc3N1ZVxuICAgICAgYWNjW0pTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGN1ciArIFwiL3BhY2thZ2UuanNvblwiLCBcInV0Zi04XCIpKS5uYW1lXSA9IHBhdGgucmVzb2x2ZShjdXIsIGN1ci5lbmRzV2l0aChcImNvcmVcIikgPyBcImRpc3RcIiA6IFwic3JjXCIpXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwgeyB9KSAvLyBcIkBlZmZlY3QtYXBwL2NvcmUvUHJlbHVkZVwiOiBwYXRoLmpvaW4oX19kaXJuYW1lLCBcInBhY2thZ2VzL2NvcmUvc3JjL1ByZWx1ZGUuY29kZS50c1wiKVxuICB9XG4gIH1cbiAgY29uc29sZS5sb2coY2ZnKVxuICByZXR1cm4gY2ZnXG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsU0FBUyxvQkFBb0I7OztBQ0E3QixPQUFPLFVBQVU7QUFDakIsT0FBTyxRQUFRO0FBRmYsSUFBTSxtQ0FBbUM7QUFnQjFCLFNBQVIsV0FBNEIsU0FBa0I7QUFDbkQsUUFBTSxTQUFTLEtBQUssUUFBUSxrQ0FBVyxVQUFVO0FBQ2pELFFBQU0sV0FBVyxHQUFHLFlBQVksTUFBTSxFQUFFLElBQUksT0FBSyxTQUFTLE1BQU0sQ0FBQyxFQUFFLE9BQU8sT0FBSyxHQUFHLFVBQVUsQ0FBQyxFQUFFLFlBQVksQ0FBRTtBQUM3RyxRQUFNLE1BQU07QUFBQTtBQUFBO0FBQUEsSUFHVixNQUFNO0FBQUEsTUFDSixTQUFVLENBQUMsa0RBQWtEO0FBQUEsTUFDN0QsV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLElBQ1g7QUFBQSxJQUNBLFNBQVM7QUFBQSxNQUNQLE9BQU8sU0FBUyxPQUFPLENBQUMsS0FBSyxRQUFRO0FBQ3JDLFlBQUksS0FBSyxNQUFNLEdBQUcsYUFBYSxNQUFNLGlCQUFpQixPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxRQUFRLEtBQUssSUFBSSxTQUFTLE1BQU0sSUFBSSxTQUFTLEtBQUs7QUFDL0gsZUFBTztBQUFBLE1BQ1QsR0FBRyxDQUFFLENBQUM7QUFBQTtBQUFBLElBQ1I7QUFBQSxFQUNBO0FBQ0EsVUFBUSxJQUFJLEdBQUc7QUFDZixTQUFPO0FBQ1Q7OztBRHBDQSxJQUFNQSxvQ0FBbUM7QUFJekMsSUFBTyx3QkFBUSxhQUFhLFdBQVdDLGlDQUFTLENBQUM7IiwKICAibmFtZXMiOiBbIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIiwgIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIl0KfQo=