@effect-app/infra 4.0.0-beta.304 → 4.0.0-beta.305

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 CHANGED
@@ -1,5 +1,13 @@
1
1
  # @effect-app/infra
2
2
 
3
+ ## 4.0.0-beta.305
4
+
5
+ ### Patch Changes
6
+
7
+ - 8bd9a11: Support ID-scoped signal dependencies and additive repository dependencies derived from previous and current entities.
8
+ - Updated dependencies [8bd9a11]
9
+ - effect-app@4.0.0-beta.305
10
+
3
11
  ## 4.0.0-beta.304
4
12
 
5
13
  ### Patch Changes
package/dist/logger.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  export declare const InfraLogger: {
2
- logWarning: (...message: readonly any[]) => import("effect/Effect").Effect<void, never, never>;
3
- logError: (...message: readonly any[]) => import("effect/Effect").Effect<void, never, never>;
4
- logFatal: (...message: readonly any[]) => import("effect/Effect").Effect<void, never, never>;
2
+ logWarning: (...message: ReadonlyArray<any>) => import("effect/Effect").Effect<void, never, never>;
3
+ logError: (...message: ReadonlyArray<any>) => import("effect/Effect").Effect<void, never, never>;
4
+ logFatal: (...message: ReadonlyArray<any>) => import("effect/Effect").Effect<void, never, never>;
5
5
  logInfo: (...message: ReadonlyArray<any>) => import("effect/Effect").Effect<void, never, never>;
6
6
  logDebug: (...message: ReadonlyArray<any>) => import("effect/Effect").Effect<void, never, never>;
7
- logWithLevel: (level: import("effect/LogLevel").Severity, ...message: readonly any[]) => import("effect/Effect").Effect<void, never, never>;
7
+ logWithLevel: (level: import("effect/LogLevel").Severity, ...message: ReadonlyArray<any>) => import("effect/Effect").Effect<void, never, never>;
8
8
  };
9
9
  //# sourceMappingURL=logger.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/infra",
3
- "version": "4.0.0-beta.304",
3
+ "version": "4.0.0-beta.305",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "repository": {
@@ -15,7 +15,7 @@
15
15
  "proper-lockfile": "^4.1.2",
16
16
  "pure-rand": "8.4.0",
17
17
  "query-string": "^9.4.0",
18
- "effect-app": "4.0.0-beta.304"
18
+ "effect-app": "4.0.0-beta.305"
19
19
  },
20
20
  "devDependencies": {
21
21
  "@azure/cosmos": "^4.9.3",
@@ -245,6 +245,81 @@ describe("repository ext save/remove batching", () => {
245
245
  Effect.provide(TestStoreLive)
246
246
  ))
247
247
 
248
+ it.effect("records repository and affected-query write dependencies", () =>
249
+ Effect
250
+ .gen(function*() {
251
+ const readsRef = yield* Ref.make(DataDependencies.empty())
252
+ const writesRef = yield* Ref.make(DataDependencies.empty())
253
+ const recorder = DataDependencies.makeDataDependencyRecorder(readsRef, writesRef)
254
+
255
+ yield* Effect
256
+ .gen(function*() {
257
+ const repo = yield* makeRepo("DependencyItem", BatchItem, {
258
+ dependencyIds: (item) => [item.id, `alias-${item.id}`],
259
+ additionalWriteDependencies: (item) => [
260
+ DataDependencies.signal("DependencyItem.List", [item.label])
261
+ ]
262
+ })
263
+ yield* repo.save(new BatchItem({ id: "1", label: "one" }))
264
+ yield* DataDependencies.read(DataDependencies.signal("DependencyItem.List", ["one"]))
265
+ })
266
+ .pipe(Effect.provideService(DataDependencies.DataDependencyRecorder, recorder))
267
+
268
+ expect(yield* Ref.get(readsRef)).toEqual(
269
+ new Set([DataDependencies.signal("DependencyItem.List", ["one"])])
270
+ )
271
+ expect(yield* Ref.get(writesRef)).toEqual(
272
+ new Set([
273
+ DataDependencies.repo("DependencyItem", ["1", "alias-1"]),
274
+ DataDependencies.signal("DependencyItem.List", ["one"])
275
+ ])
276
+ )
277
+ })
278
+ .pipe(
279
+ setupRequestContextFromCurrent(),
280
+ Effect.provide(TestStoreLive)
281
+ ))
282
+
283
+ it.effect("invalidates derived dependencies from previous saves and removeById", () =>
284
+ Effect
285
+ .gen(function*() {
286
+ const readsRef = yield* Ref.make(DataDependencies.empty())
287
+ const writesRef = yield* Ref.make(DataDependencies.empty())
288
+ const recorder = DataDependencies.makeDataDependencyRecorder(readsRef, writesRef)
289
+
290
+ yield* Effect
291
+ .gen(function*() {
292
+ const repo = yield* makeRepo("DerivedDependencyItem", BatchItem, {
293
+ additionalWriteDependencies: (item) => [
294
+ DataDependencies.signal("DerivedDependencyItem.List", [item.label])
295
+ ]
296
+ })
297
+ yield* repo.save(new BatchItem({ id: "1", label: "old" }))
298
+ yield* recorder.drainWrites
299
+
300
+ yield* repo.save(new BatchItem({ id: "1", label: "new" }))
301
+ expect(yield* recorder.drainWrites).toEqual(
302
+ new Set([
303
+ DataDependencies.repo("DerivedDependencyItem", ["1"]),
304
+ DataDependencies.signal("DerivedDependencyItem.List", ["new", "old"])
305
+ ])
306
+ )
307
+
308
+ yield* repo.removeById("1")
309
+ expect(yield* recorder.drainWrites).toEqual(
310
+ new Set([
311
+ DataDependencies.repo("DerivedDependencyItem", ["1"]),
312
+ DataDependencies.signal("DerivedDependencyItem.List", ["new"])
313
+ ])
314
+ )
315
+ })
316
+ .pipe(Effect.provideService(DataDependencies.DataDependencyRecorder, recorder))
317
+ })
318
+ .pipe(
319
+ setupRequestContextFromCurrent(),
320
+ Effect.provide(TestStoreLive)
321
+ ))
322
+
248
323
  it.effect("records schema timing on repository spans without codec child spans", () =>
249
324
  Effect
250
325
  .gen(function*() {