@dxos/effect 0.8.3 → 0.8.4-main.16b68245aa

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 (91) 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 +536 -154
  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 +31 -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 +536 -154
  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 +31 -0
  14. package/dist/lib/node-esm/testing.mjs.map +7 -0
  15. package/dist/types/src/Performance.d.ts +25 -0
  16. package/dist/types/src/Performance.d.ts.map +1 -0
  17. package/dist/types/src/RuntimeProvider.d.ts +21 -0
  18. package/dist/types/src/RuntimeProvider.d.ts.map +1 -0
  19. package/dist/types/src/ast.d.ts +42 -18
  20. package/dist/types/src/ast.d.ts.map +1 -1
  21. package/dist/types/src/async-task-tagging.d.ts +6 -0
  22. package/dist/types/src/async-task-tagging.d.ts.map +1 -0
  23. package/dist/types/src/atom-kvs.d.ts +19 -0
  24. package/dist/types/src/atom-kvs.d.ts.map +1 -0
  25. package/dist/types/src/context.d.ts +5 -0
  26. package/dist/types/src/context.d.ts.map +1 -0
  27. package/dist/types/src/dynamic-runtime.d.ts +56 -0
  28. package/dist/types/src/dynamic-runtime.d.ts.map +1 -0
  29. package/dist/types/src/dynamic-runtime.test.d.ts +2 -0
  30. package/dist/types/src/dynamic-runtime.test.d.ts.map +1 -0
  31. package/dist/types/src/errors.d.ts +57 -0
  32. package/dist/types/src/errors.d.ts.map +1 -0
  33. package/dist/types/src/errors.test.d.ts +2 -0
  34. package/dist/types/src/errors.test.d.ts.map +1 -0
  35. package/dist/types/src/index.d.ts +10 -1
  36. package/dist/types/src/index.d.ts.map +1 -1
  37. package/dist/types/src/interrupt.test.d.ts +2 -0
  38. package/dist/types/src/interrupt.test.d.ts.map +1 -0
  39. package/dist/types/src/{jsonPath.d.ts → json-path.d.ts} +12 -4
  40. package/dist/types/src/json-path.d.ts.map +1 -0
  41. package/dist/types/src/json-path.test.d.ts +2 -0
  42. package/dist/types/src/json-path.test.d.ts.map +1 -0
  43. package/dist/types/src/layers.test.d.ts +2 -0
  44. package/dist/types/src/layers.test.d.ts.map +1 -0
  45. package/dist/types/src/otel.d.ts +17 -0
  46. package/dist/types/src/otel.d.ts.map +1 -0
  47. package/dist/types/src/otel.test.d.ts +2 -0
  48. package/dist/types/src/otel.test.d.ts.map +1 -0
  49. package/dist/types/src/resource.d.ts +8 -0
  50. package/dist/types/src/resource.d.ts.map +1 -0
  51. package/dist/types/src/resource.test.d.ts +2 -0
  52. package/dist/types/src/resource.test.d.ts.map +1 -0
  53. package/dist/types/src/testing.d.ts +58 -0
  54. package/dist/types/src/testing.d.ts.map +1 -0
  55. package/dist/types/src/types.d.ts +8 -0
  56. package/dist/types/src/types.d.ts.map +1 -0
  57. package/dist/types/src/url.d.ts +3 -1
  58. package/dist/types/src/url.d.ts.map +1 -1
  59. package/dist/types/tsconfig.tsbuildinfo +1 -1
  60. package/package.json +33 -11
  61. package/src/Performance.ts +45 -0
  62. package/src/RuntimeProvider.ts +35 -0
  63. package/src/ast.test.ts +55 -10
  64. package/src/ast.ts +151 -84
  65. package/src/async-task-tagging.ts +51 -0
  66. package/src/atom-kvs.ts +35 -0
  67. package/src/context.ts +16 -0
  68. package/src/dynamic-runtime.test.ts +465 -0
  69. package/src/dynamic-runtime.ts +195 -0
  70. package/src/errors.test.ts +22 -0
  71. package/src/errors.ts +252 -0
  72. package/src/index.ts +10 -1
  73. package/src/interrupt.test.ts +35 -0
  74. package/src/{jsonPath.test.ts → json-path.test.ts} +47 -8
  75. package/src/{jsonPath.ts → json-path.ts} +29 -4
  76. package/src/layers.test.ts +112 -0
  77. package/src/otel.test.ts +126 -0
  78. package/src/otel.ts +45 -0
  79. package/src/resource.test.ts +32 -0
  80. package/src/resource.ts +30 -0
  81. package/src/sanity.test.ts +30 -15
  82. package/src/testing.ts +86 -0
  83. package/src/types.ts +11 -0
  84. package/src/url.test.ts +1 -1
  85. package/src/url.ts +5 -2
  86. package/dist/lib/node/index.cjs +0 -487
  87. package/dist/lib/node/index.cjs.map +0 -7
  88. package/dist/lib/node/meta.json +0 -1
  89. package/dist/types/src/jsonPath.d.ts.map +0 -1
  90. package/dist/types/src/jsonPath.test.d.ts +0 -2
  91. package/dist/types/src/jsonPath.test.d.ts.map +0 -1
@@ -1,69 +1,72 @@
1
1
  import "@dxos/node-std/globals";
2
+ import {
3
+ __export
4
+ } from "./chunk-CGS2ULMK.mjs";
2
5
 
3
- // packages/common/effect/src/ast.ts
4
- import { Option, pipe, SchemaAST, Schema } from "effect";
6
+ // src/ast.ts
7
+ import * as Function from "effect/Function";
8
+ import * as Option from "effect/Option";
9
+ import * as Schema from "effect/Schema";
10
+ import * as SchemaAST from "effect/SchemaAST";
5
11
  import { invariant } from "@dxos/invariant";
6
12
  import { isNonNullable } from "@dxos/util";
7
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/common/effect/src/ast.ts";
8
- var getSimpleType = (node) => {
9
- if (SchemaAST.isDeclaration(node) || SchemaAST.isObjectKeyword(node) || SchemaAST.isTypeLiteral(node) || isDiscriminatedUnion(node)) {
10
- return "object";
11
- }
12
- if (SchemaAST.isStringKeyword(node)) {
13
- return "string";
14
- }
15
- if (SchemaAST.isNumberKeyword(node)) {
16
- return "number";
17
- }
18
- if (SchemaAST.isBooleanKeyword(node)) {
19
- return "boolean";
20
- }
21
- if (SchemaAST.isEnums(node)) {
22
- return "enum";
23
- }
24
- if (SchemaAST.isLiteral(node)) {
25
- return "literal";
13
+ var reduceRefinements = (type, refinements = []) => {
14
+ if (SchemaAST.isRefinement(type)) {
15
+ const filter = type.filter;
16
+ const nextType = {
17
+ ...type.from,
18
+ annotations: {
19
+ ...type.from.annotations,
20
+ ...type.annotations
21
+ }
22
+ };
23
+ return reduceRefinements(nextType, [
24
+ ...refinements,
25
+ filter
26
+ ]);
26
27
  }
28
+ return {
29
+ type,
30
+ refinements
31
+ };
27
32
  };
28
- var isSimpleType = (node) => !!getSimpleType(node);
29
- (function(SimpleType2) {
30
- SimpleType2.getDefaultValue = (type) => {
31
- switch (type) {
32
- case "string": {
33
- return "";
34
- }
35
- case "number": {
36
- return 0;
37
- }
38
- case "boolean": {
39
- return false;
40
- }
41
- case "object": {
42
- return {};
43
- }
44
- default: {
45
- throw new Error(`Unsupported type for default value: ${type}`);
33
+ var getBaseType = (prop) => {
34
+ const encoded = SchemaAST.encodedBoundAST(prop.type);
35
+ const unwrapped = prop.isOptional && encoded._tag === "Union" ? encoded.types[0] : encoded;
36
+ return reduceRefinements(unwrapped);
37
+ };
38
+ var getProperties = (ast) => {
39
+ const properties = SchemaAST.getPropertySignatures(ast);
40
+ return properties.map((prop) => {
41
+ const { type, refinements } = getBaseType(prop);
42
+ const mergedType = prop.annotations && Reflect.ownKeys(prop.annotations).length > 0 ? {
43
+ ...type,
44
+ annotations: {
45
+ ...type.annotations,
46
+ ...prop.annotations
46
47
  }
47
- }
48
- };
49
- })(SimpleType || (SimpleType = {}));
50
- var VisitResult = /* @__PURE__ */ function(VisitResult2) {
48
+ } : type;
49
+ return {
50
+ type: mergedType,
51
+ refinements,
52
+ name: prop.name,
53
+ isOptional: prop.isOptional,
54
+ isReadonly: prop.isReadonly
55
+ };
56
+ });
57
+ };
58
+ var VisitResult = /* @__PURE__ */ (function(VisitResult2) {
51
59
  VisitResult2[VisitResult2["CONTINUE"] = 0] = "CONTINUE";
52
60
  VisitResult2[VisitResult2["SKIP"] = 1] = "SKIP";
53
61
  VisitResult2[VisitResult2["EXIT"] = 2] = "EXIT";
54
62
  return VisitResult2;
55
- }({});
56
- var defaultTest = isSimpleType;
63
+ })({});
57
64
  var visit = (node, testOrVisitor, visitor) => {
58
- if (!visitor) {
59
- visitNode(node, defaultTest, testOrVisitor);
60
- } else {
61
- visitNode(node, testOrVisitor, visitor);
62
- }
65
+ visitNode(node, testOrVisitor, visitor);
63
66
  };
64
67
  var visitNode = (node, test, visitor, path = [], depth = 0) => {
65
- const _result = test?.(node, path, depth);
66
- const result = _result === void 0 ? 0 : typeof _result === "boolean" ? _result ? 0 : 1 : _result;
68
+ const $result = test?.(node, path, depth);
69
+ const result = $result === void 0 ? 0 : typeof $result === "boolean" ? $result ? 0 : 1 : $result;
67
70
  if (result === 2) {
68
71
  return result;
69
72
  }
@@ -116,6 +119,12 @@ var findNode = (node, test) => {
116
119
  return child;
117
120
  }
118
121
  }
122
+ for (const prop of getIndexSignatures(node)) {
123
+ const child = findNode(prop.type, test);
124
+ if (child) {
125
+ return child;
126
+ }
127
+ }
119
128
  } else if (SchemaAST.isTupleType(node)) {
120
129
  for (const [_, element] of node.elements.entries()) {
121
130
  const child = findNode(element.type, test);
@@ -124,12 +133,13 @@ var findNode = (node, test) => {
124
133
  }
125
134
  }
126
135
  } else if (SchemaAST.isUnion(node)) {
127
- if (isOption(node)) {
128
- for (const type of node.types) {
129
- const child = findNode(type, test);
130
- if (child) {
131
- return child;
132
- }
136
+ if (isLiteralUnion(node)) {
137
+ return void 0;
138
+ }
139
+ for (const type of node.types) {
140
+ const child = findNode(type, test);
141
+ if (child) {
142
+ return child;
133
143
  }
134
144
  }
135
145
  } else if (SchemaAST.isRefinement(node)) {
@@ -140,15 +150,7 @@ var findProperty = (schema, path) => {
140
150
  const getProp = (node, path2) => {
141
151
  const [name, ...rest] = path2;
142
152
  const typeNode = findNode(node, SchemaAST.isTypeLiteral);
143
- invariant(typeNode, void 0, {
144
- F: __dxlog_file,
145
- L: 246,
146
- S: void 0,
147
- A: [
148
- "typeNode",
149
- ""
150
- ]
151
- });
153
+ invariant(typeNode);
152
154
  for (const prop of SchemaAST.getPropertySignatures(typeNode)) {
153
155
  if (prop.name === name) {
154
156
  if (rest.length) {
@@ -162,21 +164,21 @@ var findProperty = (schema, path) => {
162
164
  return getProp(schema.ast, path.split("."));
163
165
  };
164
166
  var defaultAnnotations = {
165
- ["ObjectKeyword"]: SchemaAST.objectKeyword,
166
- ["StringKeyword"]: SchemaAST.stringKeyword,
167
- ["NumberKeyword"]: SchemaAST.numberKeyword,
168
- ["BooleanKeyword"]: SchemaAST.booleanKeyword
169
- };
170
- var getAnnotation = (annotationId, noDefault = true) => (node) => {
171
- const id = pipe(SchemaAST.getIdentifierAnnotation(node), Option.getOrUndefined);
172
- const value = pipe(SchemaAST.getAnnotation(annotationId)(node), Option.getOrUndefined);
167
+ ObjectKeyword: SchemaAST.objectKeyword,
168
+ StringKeyword: SchemaAST.stringKeyword,
169
+ NumberKeyword: SchemaAST.numberKeyword,
170
+ BooleanKeyword: SchemaAST.booleanKeyword
171
+ };
172
+ var getAnnotation2 = (annotationId, noDefault = true) => (node) => {
173
+ const id = Function.pipe(SchemaAST.getIdentifierAnnotation(node), Option.getOrUndefined);
174
+ const value = Function.pipe(SchemaAST.getAnnotation(annotationId)(node), Option.getOrUndefined);
173
175
  if (noDefault && (value === defaultAnnotations[node._tag]?.annotations[annotationId] || value === id)) {
174
176
  return void 0;
175
177
  }
176
178
  return value;
177
179
  };
178
180
  var findAnnotation = (node, annotationId, noDefault = true) => {
179
- const getAnnotationById = getAnnotation(annotationId, noDefault);
181
+ const getAnnotationById = getAnnotation2(annotationId, noDefault);
180
182
  const getBaseAnnotation = (node2) => {
181
183
  const value = getAnnotationById(node2);
182
184
  if (value !== void 0) {
@@ -196,19 +198,26 @@ var isOption = (node) => {
196
198
  var isLiteralUnion = (node) => {
197
199
  return SchemaAST.isUnion(node) && node.types.every(SchemaAST.isLiteral);
198
200
  };
201
+ var getLiteralValues = (schema) => {
202
+ if (!isLiteralUnion(schema.ast)) {
203
+ return [];
204
+ }
205
+ return schema.ast.types.map((node) => node.literal);
206
+ };
207
+ var isArrayType = (node) => {
208
+ return SchemaAST.isTupleType(node) && node.elements.length === 0 && node.rest.length === 1;
209
+ };
210
+ var getArrayElementType = (node) => {
211
+ return isArrayType(node) ? node.rest.at(0)?.type : void 0;
212
+ };
213
+ var isTupleType2 = (node) => {
214
+ return SchemaAST.isTupleType(node) && node.elements.length > 0;
215
+ };
199
216
  var isDiscriminatedUnion = (node) => {
200
217
  return SchemaAST.isUnion(node) && !!getDiscriminatingProps(node)?.length;
201
218
  };
202
219
  var getDiscriminatingProps = (node) => {
203
- invariant(SchemaAST.isUnion(node), void 0, {
204
- F: __dxlog_file,
205
- L: 343,
206
- S: void 0,
207
- A: [
208
- "SchemaAST.isUnion(node)",
209
- ""
210
- ]
211
- });
220
+ invariant(SchemaAST.isUnion(node));
212
221
  if (isOption(node)) {
213
222
  return;
214
223
  }
@@ -218,39 +227,15 @@ var getDiscriminatingProps = (node) => {
218
227
  }, []);
219
228
  };
220
229
  var getDiscriminatedType = (node, value = {}) => {
221
- invariant(SchemaAST.isUnion(node), void 0, {
222
- F: __dxlog_file,
223
- L: 367,
224
- S: void 0,
225
- A: [
226
- "SchemaAST.isUnion(node)",
227
- ""
228
- ]
229
- });
230
- invariant(value, void 0, {
231
- F: __dxlog_file,
232
- L: 368,
233
- S: void 0,
234
- A: [
235
- "value",
236
- ""
237
- ]
238
- });
230
+ invariant(SchemaAST.isUnion(node));
231
+ invariant(value);
239
232
  const props = getDiscriminatingProps(node);
240
233
  if (!props?.length) {
241
234
  return;
242
235
  }
243
236
  for (const type of node.types) {
244
237
  const match = SchemaAST.getPropertySignatures(type).filter((prop) => props?.includes(prop.name.toString())).every((prop) => {
245
- invariant(SchemaAST.isLiteral(prop.type), void 0, {
246
- F: __dxlog_file,
247
- L: 379,
248
- S: void 0,
249
- A: [
250
- "SchemaAST.isLiteral(prop.type)",
251
- ""
252
- ]
253
- });
238
+ invariant(SchemaAST.isLiteral(prop.type));
254
239
  return prop.type.literal === value[prop.name.toString()];
255
240
  });
256
241
  if (match) {
@@ -260,15 +245,7 @@ var getDiscriminatedType = (node, value = {}) => {
260
245
  const fields = Object.fromEntries(props.map((prop) => {
261
246
  const literals = node.types.map((type) => {
262
247
  const literal = SchemaAST.getPropertySignatures(type).find((p) => p.name.toString() === prop);
263
- invariant(SchemaAST.isLiteral(literal.type), void 0, {
264
- F: __dxlog_file,
265
- L: 397,
266
- S: void 0,
267
- A: [
268
- "SchemaAST.isLiteral(literal.type)",
269
- ""
270
- ]
271
- });
248
+ invariant(SchemaAST.isLiteral(literal.type));
272
249
  return literal.type.literal;
273
250
  }).filter(isNonNullable);
274
251
  return literals.length ? [
@@ -279,10 +256,14 @@ var getDiscriminatedType = (node, value = {}) => {
279
256
  const schema = Schema.Struct(fields);
280
257
  return schema.ast;
281
258
  };
259
+ var isNestedType = (node) => {
260
+ return SchemaAST.isDeclaration(node) || SchemaAST.isObjectKeyword(node) || SchemaAST.isTypeLiteral(node) || // TODO(wittjosiah): Tuples are actually arrays.
261
+ isTupleType2(node) || isDiscriminatedUnion(node);
262
+ };
282
263
  var mapAst = (ast, f) => {
283
264
  switch (ast._tag) {
284
265
  case "TypeLiteral": {
285
- return new SchemaAST.TypeLiteral(ast.propertySignatures.map((prop) => new SchemaAST.PropertySignature(prop.name, f(prop.type, prop.name), prop.isOptional, prop.isReadonly, prop.annotations)), ast.indexSignatures);
266
+ return new SchemaAST.TypeLiteral(ast.propertySignatures.map((prop) => new SchemaAST.PropertySignature(prop.name, f(prop.type, prop.name), prop.isOptional, prop.isReadonly, prop.annotations)), ast.indexSignatures, ast.annotations);
286
267
  }
287
268
  case "Union": {
288
269
  return SchemaAST.Union.make(ast.types.map(f), ast.annotations);
@@ -299,13 +280,308 @@ var mapAst = (ast, f) => {
299
280
  }
300
281
  }
301
282
  };
302
- var SimpleType;
283
+ var getIndexSignatures = (ast) => {
284
+ const annotation = SchemaAST.getSurrogateAnnotation(ast);
285
+ if (Option.isSome(annotation)) {
286
+ return getIndexSignatures(annotation.value);
287
+ }
288
+ switch (ast._tag) {
289
+ case "TypeLiteral":
290
+ return ast.indexSignatures.slice();
291
+ case "Suspend":
292
+ return getIndexSignatures(ast.f());
293
+ case "Refinement":
294
+ return getIndexSignatures(ast.from);
295
+ }
296
+ return [];
297
+ };
298
+
299
+ // src/atom-kvs.ts
300
+ import { Atom } from "@effect-atom/atom-react";
301
+ import * as BrowserKeyValueStore from "@effect/platform-browser/BrowserKeyValueStore";
302
+ var defaultRuntime = Atom.runtime(BrowserKeyValueStore.layerLocalStorage);
303
+ var createKvsStore = (options) => {
304
+ const runtime2 = options.runtime ?? defaultRuntime;
305
+ return Atom.kvs({
306
+ runtime: runtime2,
307
+ key: options.key,
308
+ schema: options.schema,
309
+ defaultValue: options.defaultValue
310
+ }).pipe(Atom.keepAlive);
311
+ };
312
+
313
+ // src/context.ts
314
+ import * as Effect from "effect/Effect";
315
+ import { Context } from "@dxos/context";
316
+ var contextFromScope = () => Effect.gen(function* () {
317
+ const ctx = new Context();
318
+ yield* Effect.addFinalizer(() => Effect.promise(() => ctx.dispose()));
319
+ return ctx;
320
+ });
321
+
322
+ // src/dynamic-runtime.ts
323
+ var dynamic_runtime_exports = {};
324
+ __export(dynamic_runtime_exports, {
325
+ make: () => make
326
+ });
327
+ import * as Context2 from "effect/Context";
328
+ import * as Effect3 from "effect/Effect";
329
+ import * as Exit2 from "effect/Exit";
330
+ import * as Option3 from "effect/Option";
331
+ import * as Runtime2 from "effect/Runtime";
332
+
333
+ // src/errors.ts
334
+ import * as Cause from "effect/Cause";
335
+ import * as Chunk from "effect/Chunk";
336
+ import * as Effect2 from "effect/Effect";
337
+ import * as Exit from "effect/Exit";
338
+ import * as GlobalValue from "effect/GlobalValue";
339
+ import * as Option2 from "effect/Option";
340
+ import * as Runtime from "effect/Runtime";
341
+ var spanSymbol = /* @__PURE__ */ Symbol.for("effect/SpanAnnotation");
342
+ var spanToTrace = GlobalValue.globalValue("effect/Tracer/spanToTrace", () => /* @__PURE__ */ new WeakMap());
343
+ var locationRegex = /\((.*)\)/g;
344
+ var prettyErrorStack = (error, appendStacks = []) => {
345
+ if (typeof error !== "object" || error === null) {
346
+ return error;
347
+ }
348
+ const span = error[spanSymbol];
349
+ const lines = typeof error.stack === "string" ? error.stack.split("\n") : [];
350
+ const out = [];
351
+ let atStack = false, inCore = false, passedScheduler = false;
352
+ for (let i = 0; i < lines.length; i++) {
353
+ if (!atStack && !lines[i].startsWith(" at ")) {
354
+ out.push(lines[i]);
355
+ continue;
356
+ }
357
+ atStack = true;
358
+ if (lines[i].includes(" at new BaseEffectError") || lines[i].includes(" at new YieldableError")) {
359
+ i++;
360
+ continue;
361
+ }
362
+ if (lines[i].includes("Generator.next")) {
363
+ break;
364
+ }
365
+ if (lines[i].includes("effect_internal_function")) {
366
+ break;
367
+ }
368
+ const filename = lines[i].match(/\/([a-zA-Z0-9_\-.]+):\d+:\d+\)$/)?.[1];
369
+ if (!inCore && [
370
+ "core-effect.ts"
371
+ ].includes(filename)) {
372
+ inCore = true;
373
+ }
374
+ if (inCore && !passedScheduler && [
375
+ "Scheduler.ts"
376
+ ].includes(filename)) {
377
+ passedScheduler = true;
378
+ continue;
379
+ }
380
+ if (passedScheduler && ![
381
+ "Scheduler.ts"
382
+ ].includes(filename)) {
383
+ inCore = false;
384
+ }
385
+ if (inCore) {
386
+ continue;
387
+ }
388
+ out.push(lines[i].replace(/at .*effect_instruction_i.*\((.*)\)/, "at $1").replace(/EffectPrimitive\.\w+/, "<anonymous>").replace(/at Arguments\./, "at "));
389
+ }
390
+ if (span) {
391
+ let current = span;
392
+ let i = 0;
393
+ while (current && current._tag === "Span" && i < 10) {
394
+ const stackFn = spanToTrace.get(current);
395
+ if (typeof stackFn === "function") {
396
+ const stack = stackFn();
397
+ if (typeof stack === "string") {
398
+ const locationMatchAll = stack.matchAll(locationRegex);
399
+ let match = false;
400
+ for (const [, location] of locationMatchAll) {
401
+ match = true;
402
+ out.push(` at ${current.name} (${location})`);
403
+ }
404
+ if (!match) {
405
+ out.push(` at ${current.name} (${stack.replace(/^at /, "")})`);
406
+ }
407
+ } else {
408
+ out.push(` at ${current.name}`);
409
+ }
410
+ } else {
411
+ out.push(` at ${current.name}`);
412
+ }
413
+ current = Option2.getOrUndefined(current.parent);
414
+ i++;
415
+ }
416
+ }
417
+ out.push(...appendStacks);
418
+ error = Cause.originalError(error);
419
+ if (error.cause) {
420
+ error.cause = prettyErrorStack(error.cause);
421
+ }
422
+ Object.defineProperty(error, "stack", {
423
+ value: out.join("\n"),
424
+ writable: true,
425
+ enumerable: false,
426
+ configurable: true
427
+ });
428
+ return error;
429
+ };
430
+ var causeToError = (cause) => {
431
+ if (Cause.isEmpty(cause)) {
432
+ return new Error("Fiber failed without a cause");
433
+ } else if (Cause.isInterruptedOnly(cause)) {
434
+ return new Error("Fiber was interrupted");
435
+ } else {
436
+ const errors = [
437
+ ...Chunk.toArray(Cause.failures(cause)),
438
+ ...Chunk.toArray(Cause.defects(cause))
439
+ ];
440
+ const getStackFrames = () => {
441
+ const o = new Error();
442
+ Error.captureStackTrace(o, causeToError);
443
+ return o.stack.split("\n").slice(1);
444
+ };
445
+ const stackFrames = getStackFrames();
446
+ const newErrors = errors.map((error) => prettyErrorStack(error, stackFrames));
447
+ if (newErrors.length === 1) {
448
+ return newErrors[0];
449
+ } else {
450
+ return new AggregateError(newErrors);
451
+ }
452
+ }
453
+ };
454
+ var throwCause = (cause) => {
455
+ throw causeToError(cause);
456
+ };
457
+ var unwrapExit = (exit2) => {
458
+ if (Exit.isSuccess(exit2)) {
459
+ return exit2.value;
460
+ }
461
+ return throwCause(exit2.cause);
462
+ };
463
+ var runAndForwardErrors = async (effect, options) => {
464
+ const exit2 = await Effect2.runPromiseExit(effect, options);
465
+ return unwrapExit(exit2);
466
+ };
467
+ var runInRuntime = (...args) => {
468
+ if (args.length === 1) {
469
+ const [runtime2] = args;
470
+ return async (effect, options) => {
471
+ const exit2 = await Runtime.runPromiseExit(runtime2, effect, options);
472
+ return unwrapExit(exit2);
473
+ };
474
+ } else {
475
+ const [runtime2, effect, options] = args;
476
+ return (async () => {
477
+ const exit2 = await Runtime.runPromiseExit(runtime2, effect, options);
478
+ return unwrapExit(exit2);
479
+ })();
480
+ }
481
+ };
482
+ var promiseWithCauseCapture = (evaluate) => Effect2.promise(async (signal) => {
483
+ try {
484
+ const result = await evaluate(signal);
485
+ return Effect2.succeed(result);
486
+ } catch (err) {
487
+ return Effect2.die(err);
488
+ }
489
+ }).pipe(Effect2.flatten);
490
+
491
+ // src/dynamic-runtime.ts
492
+ var validateTags = (context, tags) => Effect3.gen(function* () {
493
+ const missingTags = [];
494
+ for (const tag of tags) {
495
+ const option = Context2.getOption(context, tag);
496
+ if (Option3.isNone(option)) {
497
+ missingTags.push(tag.key);
498
+ }
499
+ }
500
+ if (missingTags.length > 0) {
501
+ return yield* Effect3.die(new Error(`Missing required tags in runtime: ${missingTags.join(", ")}`));
502
+ }
503
+ });
504
+ function make(managedRuntime, tags) {
505
+ const managedRuntimeAny = managedRuntime;
506
+ let cachedRuntime;
507
+ let validatedRuntimePromise;
508
+ const getValidatedRuntimeAsync = async () => {
509
+ if (!validatedRuntimePromise) {
510
+ validatedRuntimePromise = managedRuntimeAny.runPromise(Effect3.gen(function* () {
511
+ const rt = yield* managedRuntimeAny.runtimeEffect;
512
+ yield* validateTags(rt.context, tags);
513
+ return rt;
514
+ }));
515
+ }
516
+ return validatedRuntimePromise;
517
+ };
518
+ const getValidatedRuntime = () => {
519
+ const validationExit = managedRuntimeAny.runSyncExit(Effect3.gen(function* () {
520
+ const rt = yield* managedRuntimeAny.runtimeEffect;
521
+ yield* validateTags(rt.context, tags);
522
+ return rt;
523
+ }));
524
+ return unwrapExit(validationExit);
525
+ };
526
+ return {
527
+ managedRuntime: managedRuntimeAny,
528
+ runPromise: async (effect) => {
529
+ const runtime2 = await getValidatedRuntimeAsync();
530
+ return Runtime2.runPromise(runtime2)(effect);
531
+ },
532
+ runSync: (effect) => {
533
+ const runtime2 = getValidatedRuntime();
534
+ return Runtime2.runSync(runtime2)(effect);
535
+ },
536
+ runSyncExit: (effect) => {
537
+ const validationExit = managedRuntimeAny.runSyncExit(Effect3.gen(function* () {
538
+ const rt = yield* managedRuntimeAny.runtimeEffect;
539
+ yield* validateTags(rt.context, tags);
540
+ return rt;
541
+ }));
542
+ if (Exit2.isSuccess(validationExit)) {
543
+ const runtime2 = validationExit.value;
544
+ return Runtime2.runSyncExit(runtime2)(effect);
545
+ }
546
+ return validationExit;
547
+ },
548
+ runPromiseExit: async (effect) => {
549
+ try {
550
+ const runtime2 = await getValidatedRuntimeAsync();
551
+ return Runtime2.runPromiseExit(runtime2)(effect);
552
+ } catch (error) {
553
+ return Exit2.die(error);
554
+ }
555
+ },
556
+ runFork: (effect) => {
557
+ const runtime2 = getValidatedRuntime();
558
+ return Runtime2.runFork(runtime2)(effect);
559
+ },
560
+ runtimeEffect: Effect3.gen(function* () {
561
+ if (cachedRuntime) {
562
+ return cachedRuntime;
563
+ }
564
+ const rt = yield* managedRuntimeAny.runtimeEffect;
565
+ yield* validateTags(rt.context, tags);
566
+ const runtime2 = rt;
567
+ cachedRuntime = runtime2;
568
+ return runtime2;
569
+ }).pipe(Effect3.catchAll(() => (
570
+ // This should never happen since validateTags uses Effect.die
571
+ Effect3.die(new Error("Unexpected error in runtimeEffect validation"))
572
+ ))),
573
+ dispose: async () => {
574
+ await managedRuntimeAny.dispose();
575
+ }
576
+ };
577
+ }
303
578
 
304
- // packages/common/effect/src/jsonPath.ts
305
- import { Schema as Schema2, Option as Option2 } from "effect";
579
+ // src/json-path.ts
580
+ import * as Option4 from "effect/Option";
581
+ import * as Schema2 from "effect/Schema";
306
582
  import { JSONPath } from "jsonpath-plus";
307
583
  import { invariant as invariant2 } from "@dxos/invariant";
308
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/common/effect/src/jsonPath.ts";
584
+ import { getDeep, setDeep } from "@dxos/util";
309
585
  var PATH_REGEX = /^($|[a-zA-Z_$][\w$]*(?:\.[a-zA-Z_$][\w$]*|\[\d+\](?:\.)?)*$)/;
310
586
  var PROP_REGEX = /^\w+$/;
311
587
  var JsonPath = Schema2.String.pipe(Schema2.pattern(PATH_REGEX)).annotations({
@@ -316,7 +592,7 @@ var JsonProp = Schema2.NonEmptyString.pipe(Schema2.pattern(PROP_REGEX, {
316
592
  message: () => "Property name must contain only letters, numbers, and underscores"
317
593
  }));
318
594
  var isJsonPath = (value) => {
319
- return Option2.isSome(Schema2.validateOption(JsonPath)(value));
595
+ return Option4.isSome(Schema2.validateOption(JsonPath)(value));
320
596
  };
321
597
  var createJsonPath = (path) => {
322
598
  const candidatePath = path.map((p, i) => {
@@ -326,35 +602,22 @@ var createJsonPath = (path) => {
326
602
  return i === 0 ? p : `.${p}`;
327
603
  }
328
604
  }).join("");
329
- invariant2(isJsonPath(candidatePath), `Invalid JsonPath: ${candidatePath}`, {
330
- F: __dxlog_file2,
331
- L: 63,
332
- S: void 0,
333
- A: [
334
- "isJsonPath(candidatePath)",
335
- "`Invalid JsonPath: ${candidatePath}`"
336
- ]
337
- });
605
+ invariant2(isJsonPath(candidatePath), `Invalid JsonPath: ${candidatePath}`);
338
606
  return candidatePath;
339
607
  };
340
608
  var fromEffectValidationPath = (effectPath) => {
341
609
  const jsonPath = effectPath.replace(/\.\[(\d+)\]/g, "[$1]");
342
- invariant2(isJsonPath(jsonPath), `Invalid JsonPath: ${jsonPath}`, {
343
- F: __dxlog_file2,
344
- L: 74,
345
- S: void 0,
346
- A: [
347
- "isJsonPath(jsonPath)",
348
- "`Invalid JsonPath: ${jsonPath}`"
349
- ]
350
- });
610
+ invariant2(isJsonPath(jsonPath), `Invalid JsonPath: ${jsonPath}`);
351
611
  return jsonPath;
352
612
  };
353
613
  var splitJsonPath = (path) => {
354
614
  if (!isJsonPath(path)) {
355
615
  return [];
356
616
  }
357
- return path.match(/[a-zA-Z_$][\w$]*|\[\d+\]/g)?.map((part) => part.startsWith("[") ? part.replace(/[[\]]/g, "") : part) ?? [];
617
+ return path.match(/[a-zA-Z_$][\w$]*|\[\d+\]/g)?.map((part) => part.replace(/[[\]]/g, "")).map((part) => {
618
+ const parsed = Number.parseInt(part, 10);
619
+ return Number.isNaN(parsed) ? part : parsed;
620
+ }) ?? [];
358
621
  };
359
622
  var getField = (object, path) => {
360
623
  return JSONPath({
@@ -362,16 +625,39 @@ var getField = (object, path) => {
362
625
  json: object
363
626
  })[0];
364
627
  };
628
+ var getValue = (obj, path) => {
629
+ return getDeep(obj, splitJsonPath(path));
630
+ };
631
+ var setValue = (obj, path, value) => {
632
+ return setDeep(obj, splitJsonPath(path), value);
633
+ };
365
634
 
366
- // packages/common/effect/src/url.ts
367
- import { SchemaAST as SchemaAST2, Option as Option3, pipe as pipe2 } from "effect";
635
+ // src/resource.ts
636
+ import * as Effect4 from "effect/Effect";
637
+ var acquireReleaseResource = (getResource) => Effect4.acquireRelease(Effect4.gen(function* () {
638
+ const resource = getResource();
639
+ yield* Effect4.promise(async () => {
640
+ await resource.open?.();
641
+ return void 0;
642
+ });
643
+ return resource;
644
+ }), (resource) => Effect4.promise(async () => {
645
+ await resource.close?.();
646
+ return void 0;
647
+ }));
648
+
649
+ // src/url.ts
650
+ import * as Function2 from "effect/Function";
651
+ import * as Option5 from "effect/Option";
652
+ import * as SchemaAST2 from "effect/SchemaAST";
368
653
  import { decamelize } from "@dxos/util";
369
- var ParamKeyAnnotationId = Symbol.for("@dxos/schema/annotation/ParamKey");
654
+ var ParamKeyAnnotationId = /* @__PURE__ */ Symbol.for("@dxos/schema/annotation/ParamKey");
370
655
  var getParamKeyAnnotation = SchemaAST2.getAnnotation(ParamKeyAnnotationId);
371
656
  var ParamKeyAnnotation = (value) => (self) => self.annotations({
372
657
  [ParamKeyAnnotationId]: value
373
658
  });
374
659
  var UrlParser = class {
660
+ _schema;
375
661
  constructor(_schema) {
376
662
  this._schema = _schema;
377
663
  }
@@ -406,7 +692,7 @@ var UrlParser = class {
406
692
  if (value !== void 0) {
407
693
  const field = this._schema.fields[key];
408
694
  if (field) {
409
- const { key: serializedKey } = pipe2(getParamKeyAnnotation(field.ast), Option3.getOrElse(() => ({
695
+ const { key: serializedKey } = Function2.pipe(getParamKeyAnnotation(field.ast), Option5.getOrElse(() => ({
410
696
  key: decamelize(key)
411
697
  })));
412
698
  url.searchParams.set(serializedKey, String(value));
@@ -416,31 +702,127 @@ var UrlParser = class {
416
702
  return url;
417
703
  }
418
704
  };
705
+
706
+ // src/RuntimeProvider.ts
707
+ var RuntimeProvider_exports = {};
708
+ __export(RuntimeProvider_exports, {
709
+ currentRuntime: () => currentRuntime,
710
+ provide: () => provide2,
711
+ runPromise: () => runPromise2
712
+ });
713
+ import * as Effect5 from "effect/Effect";
714
+ import * as Runtime3 from "effect/Runtime";
715
+ var currentRuntime = () => Effect5.runtime().pipe(Effect5.map(Effect5.succeed));
716
+ var runPromise2 = (provider) => async (effect) => {
717
+ const runtime2 = await runAndForwardErrors(provider);
718
+ return unwrapExit(await effect.pipe(Runtime3.runPromiseExit(runtime2)));
719
+ };
720
+ var provide2 = (runtimeProvider) => (effect) => Effect5.flatMap(runtimeProvider, (runtime2) => Effect5.provide(effect, runtime2));
721
+
722
+ // src/Performance.ts
723
+ var Performance_exports = {};
724
+ __export(Performance_exports, {
725
+ addTrackEntry: () => addTrackEntry
726
+ });
727
+ import * as Effect6 from "effect/Effect";
728
+ var addTrackEntry = (options) => (effect) => Effect6.gen(function* () {
729
+ const start = performance.now();
730
+ const exit2 = yield* Effect6.exit(effect);
731
+ const resolvedOptions = typeof options === "function" ? options(exit2) : options;
732
+ performance.measure(resolvedOptions.name, {
733
+ start,
734
+ detail: {
735
+ ...resolvedOptions.detail,
736
+ devtools: resolvedOptions.devtools
737
+ }
738
+ });
739
+ return yield* exit2;
740
+ });
741
+
742
+ // src/async-task-tagging.ts
743
+ import * as Context3 from "effect/Context";
744
+ import * as Effect7 from "effect/Effect";
745
+ import { pipe as pipe3 } from "effect/Function";
746
+ import * as Layer from "effect/Layer";
747
+ import * as Predicate from "effect/Predicate";
748
+ import * as Tracer from "effect/Tracer";
749
+ var runInTask = /* @__PURE__ */ Symbol("runInTask");
750
+ var asyncTaskTaggingLayer = () => {
751
+ if (Predicate.hasProperty(console, "createTask") === false) {
752
+ return Layer.empty;
753
+ }
754
+ const makeTracer = Effect7.gen(function* () {
755
+ const oldTracer = yield* Effect7.tracer;
756
+ return Tracer.make({
757
+ span: (name, ...args) => {
758
+ const span = oldTracer.span(name, ...args);
759
+ const trace = console.createTask(name);
760
+ span[runInTask] = (f) => trace.run(f);
761
+ return span;
762
+ },
763
+ context: (f, fiber) => {
764
+ const maybeParentSpan = Context3.getOption(Tracer.ParentSpan)(fiber.currentContext);
765
+ if (maybeParentSpan._tag === "None") {
766
+ return oldTracer.context(f, fiber);
767
+ }
768
+ const parentSpan = maybeParentSpan.value;
769
+ if (parentSpan._tag === "ExternalSpan") {
770
+ return oldTracer.context(f, fiber);
771
+ }
772
+ const span = parentSpan;
773
+ if (runInTask in span && typeof span[runInTask] === "function") {
774
+ return span[runInTask](() => oldTracer.context(f, fiber));
775
+ }
776
+ return oldTracer.context(f, fiber);
777
+ }
778
+ });
779
+ });
780
+ return pipe3(makeTracer, Effect7.map(Layer.setTracer), Layer.unwrapEffect);
781
+ };
419
782
  export {
783
+ dynamic_runtime_exports as DynamicRuntime,
420
784
  JsonPath,
421
785
  JsonProp,
422
786
  ParamKeyAnnotation,
423
- SimpleType,
787
+ Performance_exports as Performance,
788
+ RuntimeProvider_exports as RuntimeProvider,
424
789
  UrlParser,
425
790
  VisitResult,
791
+ acquireReleaseResource,
792
+ asyncTaskTaggingLayer,
793
+ causeToError,
794
+ contextFromScope,
426
795
  createJsonPath,
796
+ createKvsStore,
427
797
  findAnnotation,
428
798
  findNode,
429
799
  findProperty,
430
800
  fromEffectValidationPath,
431
- getAnnotation,
801
+ getAnnotation2 as getAnnotation,
802
+ getArrayElementType,
803
+ getBaseType,
432
804
  getDiscriminatedType,
433
805
  getDiscriminatingProps,
434
806
  getField,
807
+ getLiteralValues,
435
808
  getParamKeyAnnotation,
436
- getSimpleType,
809
+ getProperties,
810
+ getValue,
811
+ isArrayType,
437
812
  isDiscriminatedUnion,
438
813
  isJsonPath,
439
814
  isLiteralUnion,
815
+ isNestedType,
440
816
  isOption,
441
- isSimpleType,
817
+ isTupleType2 as isTupleType,
442
818
  mapAst,
819
+ promiseWithCauseCapture,
820
+ runAndForwardErrors,
821
+ runInRuntime,
822
+ setValue,
443
823
  splitJsonPath,
824
+ throwCause,
825
+ unwrapExit,
444
826
  visit
445
827
  };
446
828
  //# sourceMappingURL=index.mjs.map