@dxos/effect 0.8.4-main.66e292d → 0.8.4-main.69d29f4

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 (46) hide show
  1. package/dist/lib/browser/chunk-CGS2ULMK.mjs +11 -0
  2. package/dist/lib/browser/chunk-CGS2ULMK.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +330 -221
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing.mjs +38 -0
  7. package/dist/lib/browser/testing.mjs.map +7 -0
  8. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  9. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +330 -221
  11. package/dist/lib/node-esm/index.mjs.map +4 -4
  12. package/dist/lib/node-esm/meta.json +1 -1
  13. package/dist/lib/node-esm/testing.mjs +38 -0
  14. package/dist/lib/node-esm/testing.mjs.map +7 -0
  15. package/dist/types/src/RuntimeProvider.d.ts +21 -0
  16. package/dist/types/src/RuntimeProvider.d.ts.map +1 -0
  17. package/dist/types/src/ast.d.ts +33 -20
  18. package/dist/types/src/ast.d.ts.map +1 -1
  19. package/dist/types/src/atom-kvs.d.ts +19 -0
  20. package/dist/types/src/atom-kvs.d.ts.map +1 -0
  21. package/dist/types/src/dynamic-runtime.d.ts +56 -0
  22. package/dist/types/src/dynamic-runtime.d.ts.map +1 -0
  23. package/dist/types/src/dynamic-runtime.test.d.ts +2 -0
  24. package/dist/types/src/dynamic-runtime.test.d.ts.map +1 -0
  25. package/dist/types/src/errors.d.ts +4 -0
  26. package/dist/types/src/errors.d.ts.map +1 -1
  27. package/dist/types/src/index.d.ts +5 -3
  28. package/dist/types/src/index.d.ts.map +1 -1
  29. package/dist/types/src/json-path.d.ts +2 -2
  30. package/dist/types/src/json-path.d.ts.map +1 -1
  31. package/dist/types/tsconfig.tsbuildinfo +1 -1
  32. package/package.json +26 -10
  33. package/src/RuntimeProvider.ts +35 -0
  34. package/src/ast.test.ts +9 -7
  35. package/src/ast.ts +78 -86
  36. package/src/atom-kvs.ts +35 -0
  37. package/src/dynamic-runtime.test.ts +465 -0
  38. package/src/dynamic-runtime.ts +195 -0
  39. package/src/errors.ts +17 -2
  40. package/src/index.ts +5 -3
  41. package/src/interrupt.test.ts +3 -1
  42. package/src/json-path.test.ts +7 -7
  43. package/src/json-path.ts +9 -12
  44. package/src/layers.test.ts +4 -2
  45. package/src/resource.ts +2 -2
  46. package/src/sanity.test.ts +6 -4
@@ -0,0 +1,56 @@
1
+ import * as Context from 'effect/Context';
2
+ import * as Effect from 'effect/Effect';
3
+ import * as Exit from 'effect/Exit';
4
+ import type * as Fiber from 'effect/Fiber';
5
+ import type * as ManagedRuntime from 'effect/ManagedRuntime';
6
+ import * as Runtime from 'effect/Runtime';
7
+ /**
8
+ * Helper type to construct a union of tag identifiers from an array of tags.
9
+ */
10
+ export type TagsToContext<Tags extends ReadonlyArray<Context.Tag<any, any>>> = Tags extends readonly [
11
+ infer Head,
12
+ ...infer Tail
13
+ ] ? Head extends Context.Tag<infer Id, any> ? Tail extends ReadonlyArray<Context.Tag<any, any>> ? Id | TagsToContext<Tail> : Id : never : never;
14
+ /**
15
+ * A runtime wrapper that validates required tags are available at runtime
16
+ * while providing type-level guarantees that effects require those tags.
17
+ */
18
+ export interface DynamicRuntime<Tags extends ReadonlyArray<Context.Tag<any, any>>> {
19
+ /**
20
+ * Run an effect as a promise that requires the specified tags.
21
+ */
22
+ readonly runPromise: <A, E>(effect: Effect.Effect<A, E, TagsToContext<Tags>>) => Promise<A>;
23
+ /**
24
+ * Run an effect synchronously that requires the specified tags.
25
+ */
26
+ readonly runSync: <A, E>(effect: Effect.Effect<A, E, TagsToContext<Tags>>) => A;
27
+ /**
28
+ * Run an effect synchronously returning exit that requires the specified tags.
29
+ */
30
+ readonly runSyncExit: <A, E>(effect: Effect.Effect<A, E, TagsToContext<Tags>>) => Exit.Exit<A, E>;
31
+ /**
32
+ * Run an effect as a promise returning exit that requires the specified tags.
33
+ */
34
+ readonly runPromiseExit: <A, E>(effect: Effect.Effect<A, E, TagsToContext<Tags>>) => Promise<Exit.Exit<A, E>>;
35
+ /**
36
+ * Fork an effect that requires the specified tags.
37
+ */
38
+ readonly runFork: <A, E>(effect: Effect.Effect<A, E, TagsToContext<Tags>>) => Fiber.RuntimeFiber<A, E>;
39
+ /**
40
+ * Get the runtime as an effect that requires the specified tags.
41
+ */
42
+ readonly runtimeEffect: Effect.Effect<Runtime.Runtime<TagsToContext<Tags>>, never, never>;
43
+ /**
44
+ * Dispose the underlying managed runtime.
45
+ */
46
+ readonly dispose: () => Promise<void>;
47
+ /**
48
+ * Get the underlying managed runtime.
49
+ */
50
+ readonly managedRuntime: ManagedRuntime.ManagedRuntime<any, any>;
51
+ }
52
+ /**
53
+ * Create a dynamic runtime from a managed runtime and validate required tags.
54
+ */
55
+ export declare function make<const Tags extends ReadonlyArray<Context.Tag<any, any>>>(managedRuntime: ManagedRuntime.ManagedRuntime<any, any> | ManagedRuntime.ManagedRuntime<never, never>, tags: Tags): DynamicRuntime<Tags>;
56
+ //# sourceMappingURL=dynamic-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-runtime.d.ts","sourceRoot":"","sources":["../../../src/dynamic-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dynamic-runtime.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-runtime.test.d.ts","sourceRoot":"","sources":["../../../src/dynamic-runtime.test.ts"],"names":[],"mappings":""}
@@ -1,6 +1,7 @@
1
1
  import * as Cause from 'effect/Cause';
2
2
  import * as Effect from 'effect/Effect';
3
3
  import * as Exit from 'effect/Exit';
4
+ import * as Runtime from 'effect/Runtime';
4
5
  /**
5
6
  * Converts a cause to an error.
6
7
  * Inserts effect spans as stack frames.
@@ -37,6 +38,9 @@ export declare const unwrapExit: <A>(exit: Exit.Exit<A, any>) => A;
37
38
  export declare const runAndForwardErrors: <A, E>(effect: Effect.Effect<A, E, never>, options?: {
38
39
  signal?: AbortSignal;
39
40
  }) => Promise<A>;
41
+ export declare const runInRuntime: <A, E, R>(runtime: Runtime.Runtime<R>, effect: Effect.Effect<A, E, R>, options?: {
42
+ signal?: AbortSignal;
43
+ }) => Promise<A>;
40
44
  /**
41
45
  * Like `Effect.promise` but also caputes spans for defects.
42
46
  * Workaround for: https://github.com/Effect-TS/effect/issues/5436
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/errors.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AA8FpC;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAG,KAuBtD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAG,KAEpD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,KAAG,CAMvD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAAU,CAAC,EAAE,CAAC,EAC5C,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAClC,UAAU;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KACjC,OAAO,CAAC,CAAC,CAGX,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAUtF,CAAC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/errors.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAGpC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAgG1C;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAG,KAwBtD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAG,KAEpD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,KAAG,CAMvD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAAU,CAAC,EAAE,CAAC,EAC5C,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAClC,UAAU;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KACjC,OAAO,CAAC,CAAC,CAGX,CAAC;AAEF,eAAO,MAAM,YAAY,GAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EACxC,SAAS,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAC3B,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,UAAU;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KACjC,OAAO,CAAC,CAAC,CAGX,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAUtF,CAAC"}
@@ -1,8 +1,10 @@
1
1
  export * from './ast';
2
- export * from './json-path';
3
- export * from './url';
2
+ export * from './atom-kvs';
4
3
  export * from './context';
4
+ export * as DynamicRuntime from './dynamic-runtime';
5
5
  export * from './errors';
6
- export * from './testing';
6
+ export * from './json-path';
7
7
  export * from './resource';
8
+ export * from './url';
9
+ export * as RuntimeProvider from './RuntimeProvider';
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,KAAK,cAAc,MAAM,mBAAmB,CAAC;AACpD,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,OAAO,CAAC;AACtB,OAAO,KAAK,eAAe,MAAM,mBAAmB,CAAC"}
@@ -31,7 +31,7 @@ export declare const isJsonPath: (value: unknown) => value is JsonPath;
31
31
  * @param path Array of string or number segments
32
32
  * @returns Valid JsonPath or undefined if invalid
33
33
  */
34
- export declare const createJsonPath: (path: (string | number)[]) => JsonPath;
34
+ export declare const createJsonPath: (path: readonly (string | number)[]) => JsonPath;
35
35
  /**
36
36
  * Converts Effect validation path format (e.g. "addresses.[0].zip")
37
37
  * to JsonPath format (e.g., "addresses[0].zip")
@@ -41,7 +41,7 @@ export declare const fromEffectValidationPath: (effectPath: string) => JsonPath;
41
41
  * Splits a JsonPath into its constituent parts.
42
42
  * Handles property access and array indexing.
43
43
  */
44
- export declare const splitJsonPath: (path: JsonPath) => string[];
44
+ export declare const splitJsonPath: (path: JsonPath) => (string | number)[];
45
45
  /**
46
46
  * Applies a JsonPath to an object.
47
47
  */
@@ -1 +1 @@
1
- {"version":3,"file":"json-path.d.ts","sourceRoot":"","sources":["../../../src/json-path.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAMxC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAAE,UAAU,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,CAAA;CAAE,CAAC;AACvE,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAAE,UAAU,EAAE,IAAI,CAAA;CAAE,CAAC;AAQrD;;GAEG;AAEH,eAAO,MAAM,QAAQ,EAGR,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACrC,eAAO,MAAM,QAAQ,EAIT,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEpC,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,QAEpD,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAG,QAa1D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAAI,YAAY,MAAM,KAAG,QAK7D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,QAAQ,KAAG,MAAM,EAUpD,CAAC;AAEF;;GAEG;AAEH,eAAO,MAAM,QAAQ,GAAI,QAAQ,GAAG,EAAE,MAAM,QAAQ,KAAG,GAGtD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,QAAQ,KAAG,GAKnE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,QAAQ,EAAE,OAAO,GAAG,KAAG,CAM/E,CAAC"}
1
+ {"version":3,"file":"json-path.d.ts","sourceRoot":"","sources":["../../../src/json-path.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAMxC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAAE,UAAU,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,CAAA;CAAE,CAAC;AACvE,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAAE,UAAU,EAAE,IAAI,CAAA;CAAE,CAAC;AAQrD;;GAEG;AAEH,eAAO,MAAM,QAAQ,EAGR,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACrC,eAAO,MAAM,QAAQ,EAIT,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEpC,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,QAEpD,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAG,QAanE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAAI,YAAY,MAAM,KAAG,QAK7D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,QAAQ,KAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAc/D,CAAC;AAEF;;GAEG;AAEH,eAAO,MAAM,QAAQ,GAAI,QAAQ,GAAG,EAAE,MAAM,QAAQ,KAAG,GAGtD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,QAAQ,KAAG,GAEnE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,QAAQ,EAAE,OAAO,GAAG,KAAG,CAE/E,CAAC"}