@effect-app/infra 2.4.1 → 2.5.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/CHANGELOG.md +6 -0
- package/_cjs/services/Repository/ext.cjs +12 -12
- package/_cjs/services/Repository/ext.cjs.map +1 -1
- package/_cjs/services/Repository/legacy.cjs.map +1 -1
- package/_cjs/services/RepositoryBase.cjs +15 -10
- package/_cjs/services/RepositoryBase.cjs.map +1 -1
- package/dist/services/Operations.d.ts +11 -11
- package/dist/services/OperationsRepo.d.ts +1 -1
- package/dist/services/Repository/ext.d.ts +10 -10
- package/dist/services/Repository/ext.d.ts.map +1 -1
- package/dist/services/Repository/ext.js +16 -16
- package/dist/services/Repository/legacy.d.ts +22 -22
- package/dist/services/Repository/legacy.d.ts.map +1 -1
- package/dist/services/Repository/legacy.js +1 -1
- package/dist/services/Repository/service.d.ts +5 -5
- package/dist/services/Repository/service.d.ts.map +1 -1
- package/dist/services/RepositoryBase.d.ts +6 -6
- package/dist/services/RepositoryBase.d.ts.map +1 -1
- package/dist/services/RepositoryBase.js +19 -24
- package/package.json +1 -1
- package/src/services/Repository/ext.ts +21 -43
- package/src/services/Repository/legacy.ts +18 -11
- package/src/services/Repository/service.ts +6 -5
- package/src/services/RepositoryBase.ts +28 -37
- package/vitest.config.ts.timestamp-1711656440838-19c636fe320df.mjs +0 -0
- package/vitest.config.ts.timestamp-1711724061890-6ecedb0a07fdd.mjs +0 -0
- package/vitest.config.ts.timestamp-1711743489537-da8d9e5f66c9f.mjs +0 -0
- package/vitest.config.ts.timestamp-1711744615239-dcf257a844e01.mjs +0 -37
|
@@ -82,16 +82,13 @@ export function makeRepoInternal<
|
|
|
82
82
|
) {
|
|
83
83
|
return Effect
|
|
84
84
|
.gen(function*() {
|
|
85
|
-
const rctx = yield* Effect.context<R>()
|
|
86
85
|
const encodeMany = flow(
|
|
87
86
|
S.encode(S.Array(schema)),
|
|
88
|
-
Effect.provide(rctx),
|
|
89
87
|
Effect.withSpan("encodeMany", { captureStackTrace: false })
|
|
90
88
|
)
|
|
91
|
-
const decode =
|
|
89
|
+
const decode = S.decode(schema)
|
|
92
90
|
const decodeMany = flow(
|
|
93
91
|
S.decode(S.Array(schema)),
|
|
94
|
-
Effect.provide(rctx),
|
|
95
92
|
Effect.withSpan("decodeMany", { captureStackTrace: false })
|
|
96
93
|
)
|
|
97
94
|
|
|
@@ -118,30 +115,25 @@ export function makeRepoInternal<
|
|
|
118
115
|
.pipe(Effect.map((_) => _ as T[]))
|
|
119
116
|
|
|
120
117
|
const fieldsSchema = schema as unknown as { fields: any }
|
|
118
|
+
// assumes the id field never needs a service...
|
|
121
119
|
const i = ("fields" in fieldsSchema ? S.Struct(fieldsSchema["fields"]) as unknown as typeof schema : schema)
|
|
122
|
-
.pipe((_) =>
|
|
123
|
-
_.ast
|
|
120
|
+
.pipe((_) => {
|
|
121
|
+
let ast = _.ast
|
|
122
|
+
if (ast._tag === "Declaration") ast = ast.typeParameters[0]!
|
|
123
|
+
|
|
124
|
+
const s = S.make(ast) as unknown as Schema<T, Encoded, R>
|
|
125
|
+
|
|
126
|
+
return ast._tag === "Union"
|
|
124
127
|
// we need to get the TypeLiteral, incase of class it's behind a transform...
|
|
125
|
-
? S.Union(
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
_
|
|
135
|
-
.ast
|
|
136
|
-
.from
|
|
137
|
-
) as unknown as Schema<T, Encoded>)
|
|
138
|
-
.pipe(S
|
|
139
|
-
.pick(idKey as any))
|
|
140
|
-
: _
|
|
141
|
-
.pipe(S
|
|
142
|
-
.pick(idKey as any))
|
|
143
|
-
)
|
|
144
|
-
const encodeId = flow(S.encode(i), Effect.provide(rctx))
|
|
128
|
+
? S.Union(
|
|
129
|
+
...ast.types.map((_) =>
|
|
130
|
+
(S.make(_._tag === "Transformation" ? _.from : _) as unknown as Schema<T, Encoded>)
|
|
131
|
+
.pipe(S.pick(idKey as any))
|
|
132
|
+
)
|
|
133
|
+
)
|
|
134
|
+
: s.pipe(S.pick(idKey as any))
|
|
135
|
+
})
|
|
136
|
+
const encodeId = S.encode(i)
|
|
145
137
|
function findEId(id: Encoded["id"]) {
|
|
146
138
|
return Effect.flatMap(
|
|
147
139
|
store.find(id),
|
|
@@ -267,7 +259,7 @@ export function makeRepoInternal<
|
|
|
267
259
|
? filter(a)
|
|
268
260
|
// TODO: mapFrom but need to support per field and dependencies
|
|
269
261
|
.pipe(
|
|
270
|
-
Effect.andThen(
|
|
262
|
+
Effect.andThen(S.decode(S.Array(a.schema ?? schema)))
|
|
271
263
|
)
|
|
272
264
|
: a.mode === "collect"
|
|
273
265
|
? filter(a)
|
|
@@ -275,8 +267,7 @@ export function makeRepoInternal<
|
|
|
275
267
|
.pipe(
|
|
276
268
|
Effect.flatMap(flow(
|
|
277
269
|
S.decode(S.Array(a.schema)),
|
|
278
|
-
Effect.map(Array.getSomes)
|
|
279
|
-
Effect.provide(rctx)
|
|
270
|
+
Effect.map(Array.getSomes)
|
|
280
271
|
))
|
|
281
272
|
)
|
|
282
273
|
: Effect.flatMap(
|
|
@@ -313,7 +304,7 @@ export function makeRepoInternal<
|
|
|
313
304
|
)
|
|
314
305
|
}) as any
|
|
315
306
|
|
|
316
|
-
const r: Repository<T, Encoded, Evt, ItemType, IdKey> = {
|
|
307
|
+
const r: Repository<T, Encoded, Evt, ItemType, IdKey, R> = {
|
|
317
308
|
changeFeed,
|
|
318
309
|
itemType: name,
|
|
319
310
|
idKey,
|
|
@@ -417,7 +408,7 @@ export function makeStore<
|
|
|
417
408
|
return Effect.gen(function*() {
|
|
418
409
|
const { make } = yield* StoreMaker
|
|
419
410
|
|
|
420
|
-
const store = yield* make<Encoded, string,
|
|
411
|
+
const store = yield* make<Encoded, string, RInitial | R, EInitial>(
|
|
421
412
|
pluralize(name),
|
|
422
413
|
makeInitial
|
|
423
414
|
? makeInitial
|
|
@@ -465,7 +456,7 @@ export interface Repos<
|
|
|
465
456
|
partitionValue?: (a: Encoded) => string
|
|
466
457
|
}
|
|
467
458
|
}
|
|
468
|
-
): Effect<Repository<T, Encoded, Evt, ItemType, IdKey>, E, StoreMaker |
|
|
459
|
+
): Effect<Repository<T, Encoded, Evt, ItemType, IdKey, R>, E, StoreMaker | RInitial | R2>
|
|
469
460
|
makeWith<Out, RInitial = never, E = never, R2 = never>(
|
|
470
461
|
args: [Evt] extends [never] ? {
|
|
471
462
|
makeInitial?: Effect<readonly T[], E, RInitial>
|
|
@@ -480,10 +471,10 @@ export interface Repos<
|
|
|
480
471
|
partitionValue?: (a: Encoded) => string
|
|
481
472
|
}
|
|
482
473
|
},
|
|
483
|
-
f: (r: Repository<T, Encoded, Evt, ItemType, IdKey>) => Out
|
|
484
|
-
): Effect<Out, E, StoreMaker |
|
|
474
|
+
f: (r: Repository<T, Encoded, Evt, ItemType, IdKey, R>) => Out
|
|
475
|
+
): Effect<Out, E, StoreMaker | RInitial | R2>
|
|
485
476
|
readonly Q: ReturnType<typeof Q.make<Encoded>>
|
|
486
|
-
readonly type: Repository<T, Encoded, Evt, ItemType, IdKey>
|
|
477
|
+
readonly type: Repository<T, Encoded, Evt, ItemType, IdKey, R>
|
|
487
478
|
}
|
|
488
479
|
|
|
489
480
|
export type GetRepoType<T> = T extends { type: infer R } ? R : never
|
|
@@ -511,7 +502,7 @@ export const makeRepo: {
|
|
|
511
502
|
publishEvents?: (evt: NonEmptyReadonlyArray<Evt>) => Effect<void, never, R2>
|
|
512
503
|
makeInitial?: Effect<readonly T[], E, RInitial>
|
|
513
504
|
}
|
|
514
|
-
): Effect.Effect<ExtendedRepository<T, Encoded, Evt, ItemType, IdKey>, E,
|
|
505
|
+
): Effect.Effect<ExtendedRepository<T, Encoded, Evt, ItemType, IdKey, R>, E, RInitial | R2 | StoreMaker>
|
|
515
506
|
<
|
|
516
507
|
ItemType extends string,
|
|
517
508
|
R,
|
|
@@ -532,7 +523,7 @@ export const makeRepo: {
|
|
|
532
523
|
publishEvents?: (evt: NonEmptyReadonlyArray<Evt>) => Effect<void, never, R2>
|
|
533
524
|
makeInitial?: Effect<readonly T[], E, RInitial>
|
|
534
525
|
}
|
|
535
|
-
): Effect.Effect<ExtendedRepository<T, Encoded, Evt, ItemType, "id">, E,
|
|
526
|
+
): Effect.Effect<ExtendedRepository<T, Encoded, Evt, ItemType, "id", R>, E, RInitial | R2 | StoreMaker>
|
|
536
527
|
} = <
|
|
537
528
|
ItemType extends string,
|
|
538
529
|
R,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -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=
|