@dxos/effect 0.8.4-main.5ea62a8 → 0.8.4-main.60689f5b1c
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/LICENSE +102 -5
- package/README.md +1 -1
- package/dist/lib/browser/chunk-CGS2ULMK.mjs +11 -0
- package/dist/lib/browser/chunk-CGS2ULMK.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +492 -312
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing.mjs +31 -0
- package/dist/lib/browser/testing.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +492 -312
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing.mjs +31 -0
- package/dist/lib/node-esm/testing.mjs.map +7 -0
- package/dist/types/src/Performance.d.ts +25 -0
- package/dist/types/src/Performance.d.ts.map +1 -0
- package/dist/types/src/RuntimeProvider.d.ts +21 -0
- package/dist/types/src/RuntimeProvider.d.ts.map +1 -0
- package/dist/types/src/ast.d.ts +42 -22
- package/dist/types/src/ast.d.ts.map +1 -1
- package/dist/types/src/async-task-tagging.d.ts +6 -0
- package/dist/types/src/async-task-tagging.d.ts.map +1 -0
- package/dist/types/src/atom-kvs.d.ts +19 -0
- package/dist/types/src/atom-kvs.d.ts.map +1 -0
- package/dist/types/src/context.d.ts +2 -1
- package/dist/types/src/context.d.ts.map +1 -1
- package/dist/types/src/dynamic-runtime.d.ts +56 -0
- package/dist/types/src/dynamic-runtime.d.ts.map +1 -0
- package/dist/types/src/dynamic-runtime.test.d.ts +2 -0
- package/dist/types/src/dynamic-runtime.test.d.ts.map +1 -0
- package/dist/types/src/errors.d.ts +15 -1
- package/dist/types/src/errors.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +8 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/{jsonPath.d.ts → json-path.d.ts} +12 -4
- package/dist/types/src/json-path.d.ts.map +1 -0
- package/dist/types/src/json-path.test.d.ts +2 -0
- package/dist/types/src/json-path.test.d.ts.map +1 -0
- package/dist/types/src/otel.d.ts +17 -0
- package/dist/types/src/otel.d.ts.map +1 -0
- package/dist/types/src/otel.test.d.ts +2 -0
- package/dist/types/src/otel.test.d.ts.map +1 -0
- package/dist/types/src/resource.d.ts +6 -2
- package/dist/types/src/resource.d.ts.map +1 -1
- package/dist/types/src/testing.d.ts +23 -9
- package/dist/types/src/testing.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +8 -0
- package/dist/types/src/types.d.ts.map +1 -0
- package/dist/types/src/url.d.ts +3 -1
- package/dist/types/src/url.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +33 -13
- package/src/Performance.ts +45 -0
- package/src/RuntimeProvider.ts +35 -0
- package/src/ast.test.ts +37 -9
- package/src/ast.ts +144 -99
- package/src/async-task-tagging.ts +51 -0
- package/src/atom-kvs.ts +35 -0
- package/src/context.ts +2 -1
- package/src/dynamic-runtime.test.ts +465 -0
- package/src/dynamic-runtime.ts +195 -0
- package/src/errors.test.ts +1 -1
- package/src/errors.ts +81 -15
- package/src/index.ts +8 -3
- package/src/interrupt.test.ts +7 -6
- package/src/{jsonPath.test.ts → json-path.test.ts} +47 -8
- package/src/{jsonPath.ts → json-path.ts} +29 -4
- package/src/layers.test.ts +10 -4
- package/src/otel.test.ts +126 -0
- package/src/otel.ts +45 -0
- package/src/resource.test.ts +3 -3
- package/src/resource.ts +10 -5
- package/src/sanity.test.ts +30 -15
- package/src/testing.ts +27 -23
- package/src/types.ts +11 -0
- package/src/url.test.ts +1 -1
- package/src/url.ts +5 -2
- package/dist/types/src/jsonPath.d.ts.map +0 -1
- package/dist/types/src/jsonPath.test.d.ts +0 -2
- package/dist/types/src/jsonPath.test.d.ts.map +0 -1
|
@@ -1,70 +1,68 @@
|
|
|
1
1
|
import "@dxos/node-std/globals";
|
|
2
|
+
import {
|
|
3
|
+
__export
|
|
4
|
+
} from "./chunk-CGS2ULMK.mjs";
|
|
2
5
|
|
|
3
6
|
// src/ast.ts
|
|
4
|
-
import
|
|
5
|
-
import
|
|
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";
|
|
6
11
|
import { invariant } from "@dxos/invariant";
|
|
7
12
|
import { isNonNullable } from "@dxos/util";
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
if (SchemaAST.isBooleanKeyword(node)) {
|
|
24
|
-
return "boolean";
|
|
25
|
-
}
|
|
26
|
-
if (SchemaAST.isEnums(node)) {
|
|
27
|
-
return "enum";
|
|
28
|
-
}
|
|
29
|
-
if (SchemaAST.isLiteral(node)) {
|
|
30
|
-
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
|
+
]);
|
|
31
27
|
}
|
|
28
|
+
return {
|
|
29
|
+
type,
|
|
30
|
+
refinements
|
|
31
|
+
};
|
|
32
32
|
};
|
|
33
|
-
var
|
|
34
|
-
(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return {};
|
|
48
|
-
}
|
|
49
|
-
default: {
|
|
50
|
-
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
|
|
51
47
|
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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) {
|
|
56
59
|
VisitResult2[VisitResult2["CONTINUE"] = 0] = "CONTINUE";
|
|
57
60
|
VisitResult2[VisitResult2["SKIP"] = 1] = "SKIP";
|
|
58
61
|
VisitResult2[VisitResult2["EXIT"] = 2] = "EXIT";
|
|
59
62
|
return VisitResult2;
|
|
60
|
-
}({});
|
|
61
|
-
var defaultTest = isSimpleType;
|
|
63
|
+
})({});
|
|
62
64
|
var visit = (node, testOrVisitor, visitor) => {
|
|
63
|
-
|
|
64
|
-
visitNode(node, defaultTest, testOrVisitor);
|
|
65
|
-
} else {
|
|
66
|
-
visitNode(node, testOrVisitor, visitor);
|
|
67
|
-
}
|
|
65
|
+
visitNode(node, testOrVisitor, visitor);
|
|
68
66
|
};
|
|
69
67
|
var visitNode = (node, test, visitor, path = [], depth = 0) => {
|
|
70
68
|
const $result = test?.(node, path, depth);
|
|
@@ -121,6 +119,12 @@ var findNode = (node, test) => {
|
|
|
121
119
|
return child;
|
|
122
120
|
}
|
|
123
121
|
}
|
|
122
|
+
for (const prop of getIndexSignatures(node)) {
|
|
123
|
+
const child = findNode(prop.type, test);
|
|
124
|
+
if (child) {
|
|
125
|
+
return child;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
124
128
|
} else if (SchemaAST.isTupleType(node)) {
|
|
125
129
|
for (const [_, element] of node.elements.entries()) {
|
|
126
130
|
const child = findNode(element.type, test);
|
|
@@ -129,12 +133,13 @@ var findNode = (node, test) => {
|
|
|
129
133
|
}
|
|
130
134
|
}
|
|
131
135
|
} else if (SchemaAST.isUnion(node)) {
|
|
132
|
-
if (
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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;
|
|
138
143
|
}
|
|
139
144
|
}
|
|
140
145
|
} else if (SchemaAST.isRefinement(node)) {
|
|
@@ -145,15 +150,7 @@ var findProperty = (schema, path) => {
|
|
|
145
150
|
const getProp = (node, path2) => {
|
|
146
151
|
const [name, ...rest] = path2;
|
|
147
152
|
const typeNode = findNode(node, SchemaAST.isTypeLiteral);
|
|
148
|
-
invariant(typeNode
|
|
149
|
-
F: __dxlog_file,
|
|
150
|
-
L: 255,
|
|
151
|
-
S: void 0,
|
|
152
|
-
A: [
|
|
153
|
-
"typeNode",
|
|
154
|
-
""
|
|
155
|
-
]
|
|
156
|
-
});
|
|
153
|
+
invariant(typeNode);
|
|
157
154
|
for (const prop of SchemaAST.getPropertySignatures(typeNode)) {
|
|
158
155
|
if (prop.name === name) {
|
|
159
156
|
if (rest.length) {
|
|
@@ -167,21 +164,21 @@ var findProperty = (schema, path) => {
|
|
|
167
164
|
return getProp(schema.ast, path.split("."));
|
|
168
165
|
};
|
|
169
166
|
var defaultAnnotations = {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
};
|
|
175
|
-
var
|
|
176
|
-
const id = pipe(SchemaAST.getIdentifierAnnotation(node), Option.getOrUndefined);
|
|
177
|
-
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);
|
|
178
175
|
if (noDefault && (value === defaultAnnotations[node._tag]?.annotations[annotationId] || value === id)) {
|
|
179
176
|
return void 0;
|
|
180
177
|
}
|
|
181
178
|
return value;
|
|
182
179
|
};
|
|
183
180
|
var findAnnotation = (node, annotationId, noDefault = true) => {
|
|
184
|
-
const getAnnotationById =
|
|
181
|
+
const getAnnotationById = getAnnotation2(annotationId, noDefault);
|
|
185
182
|
const getBaseAnnotation = (node2) => {
|
|
186
183
|
const value = getAnnotationById(node2);
|
|
187
184
|
if (value !== void 0) {
|
|
@@ -201,19 +198,26 @@ var isOption = (node) => {
|
|
|
201
198
|
var isLiteralUnion = (node) => {
|
|
202
199
|
return SchemaAST.isUnion(node) && node.types.every(SchemaAST.isLiteral);
|
|
203
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
|
+
};
|
|
204
216
|
var isDiscriminatedUnion = (node) => {
|
|
205
217
|
return SchemaAST.isUnion(node) && !!getDiscriminatingProps(node)?.length;
|
|
206
218
|
};
|
|
207
219
|
var getDiscriminatingProps = (node) => {
|
|
208
|
-
invariant(SchemaAST.isUnion(node)
|
|
209
|
-
F: __dxlog_file,
|
|
210
|
-
L: 352,
|
|
211
|
-
S: void 0,
|
|
212
|
-
A: [
|
|
213
|
-
"SchemaAST.isUnion(node)",
|
|
214
|
-
""
|
|
215
|
-
]
|
|
216
|
-
});
|
|
220
|
+
invariant(SchemaAST.isUnion(node));
|
|
217
221
|
if (isOption(node)) {
|
|
218
222
|
return;
|
|
219
223
|
}
|
|
@@ -223,39 +227,15 @@ var getDiscriminatingProps = (node) => {
|
|
|
223
227
|
}, []);
|
|
224
228
|
};
|
|
225
229
|
var getDiscriminatedType = (node, value = {}) => {
|
|
226
|
-
invariant(SchemaAST.isUnion(node)
|
|
227
|
-
|
|
228
|
-
L: 376,
|
|
229
|
-
S: void 0,
|
|
230
|
-
A: [
|
|
231
|
-
"SchemaAST.isUnion(node)",
|
|
232
|
-
""
|
|
233
|
-
]
|
|
234
|
-
});
|
|
235
|
-
invariant(value, void 0, {
|
|
236
|
-
F: __dxlog_file,
|
|
237
|
-
L: 377,
|
|
238
|
-
S: void 0,
|
|
239
|
-
A: [
|
|
240
|
-
"value",
|
|
241
|
-
""
|
|
242
|
-
]
|
|
243
|
-
});
|
|
230
|
+
invariant(SchemaAST.isUnion(node));
|
|
231
|
+
invariant(value);
|
|
244
232
|
const props = getDiscriminatingProps(node);
|
|
245
233
|
if (!props?.length) {
|
|
246
234
|
return;
|
|
247
235
|
}
|
|
248
236
|
for (const type of node.types) {
|
|
249
237
|
const match = SchemaAST.getPropertySignatures(type).filter((prop) => props?.includes(prop.name.toString())).every((prop) => {
|
|
250
|
-
invariant(SchemaAST.isLiteral(prop.type)
|
|
251
|
-
F: __dxlog_file,
|
|
252
|
-
L: 388,
|
|
253
|
-
S: void 0,
|
|
254
|
-
A: [
|
|
255
|
-
"SchemaAST.isLiteral(prop.type)",
|
|
256
|
-
""
|
|
257
|
-
]
|
|
258
|
-
});
|
|
238
|
+
invariant(SchemaAST.isLiteral(prop.type));
|
|
259
239
|
return prop.type.literal === value[prop.name.toString()];
|
|
260
240
|
});
|
|
261
241
|
if (match) {
|
|
@@ -265,15 +245,7 @@ var getDiscriminatedType = (node, value = {}) => {
|
|
|
265
245
|
const fields = Object.fromEntries(props.map((prop) => {
|
|
266
246
|
const literals = node.types.map((type) => {
|
|
267
247
|
const literal = SchemaAST.getPropertySignatures(type).find((p) => p.name.toString() === prop);
|
|
268
|
-
invariant(SchemaAST.isLiteral(literal.type)
|
|
269
|
-
F: __dxlog_file,
|
|
270
|
-
L: 406,
|
|
271
|
-
S: void 0,
|
|
272
|
-
A: [
|
|
273
|
-
"SchemaAST.isLiteral(literal.type)",
|
|
274
|
-
""
|
|
275
|
-
]
|
|
276
|
-
});
|
|
248
|
+
invariant(SchemaAST.isLiteral(literal.type));
|
|
277
249
|
return literal.type.literal;
|
|
278
250
|
}).filter(isNonNullable);
|
|
279
251
|
return literals.length ? [
|
|
@@ -284,10 +256,14 @@ var getDiscriminatedType = (node, value = {}) => {
|
|
|
284
256
|
const schema = Schema.Struct(fields);
|
|
285
257
|
return schema.ast;
|
|
286
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
|
+
};
|
|
287
263
|
var mapAst = (ast, f) => {
|
|
288
264
|
switch (ast._tag) {
|
|
289
265
|
case "TypeLiteral": {
|
|
290
|
-
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);
|
|
291
267
|
}
|
|
292
268
|
case "Union": {
|
|
293
269
|
return SchemaAST.Union.make(ast.types.map(f), ast.annotations);
|
|
@@ -304,165 +280,75 @@ var mapAst = (ast, f) => {
|
|
|
304
280
|
}
|
|
305
281
|
}
|
|
306
282
|
};
|
|
307
|
-
var
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
// src/jsonPath.ts
|
|
313
|
-
import { Option as Option2, Schema as Schema2 } from "effect";
|
|
314
|
-
import { JSONPath } from "jsonpath-plus";
|
|
315
|
-
import { invariant as invariant2 } from "@dxos/invariant";
|
|
316
|
-
var __dxlog_file2 = "/__w/dxos/dxos/packages/common/effect/src/jsonPath.ts";
|
|
317
|
-
var PATH_REGEX = /^($|[a-zA-Z_$][\w$]*(?:\.[a-zA-Z_$][\w$]*|\[\d+\](?:\.)?)*$)/;
|
|
318
|
-
var PROP_REGEX = /^\w+$/;
|
|
319
|
-
var JsonPath = Schema2.String.pipe(Schema2.pattern(PATH_REGEX)).annotations({
|
|
320
|
-
title: "JSON path",
|
|
321
|
-
description: "JSON path to a property"
|
|
322
|
-
});
|
|
323
|
-
var JsonProp = Schema2.NonEmptyString.pipe(Schema2.pattern(PROP_REGEX, {
|
|
324
|
-
message: () => "Property name must contain only letters, numbers, and underscores"
|
|
325
|
-
}));
|
|
326
|
-
var isJsonPath = (value) => {
|
|
327
|
-
return Option2.isSome(Schema2.validateOption(JsonPath)(value));
|
|
328
|
-
};
|
|
329
|
-
var createJsonPath = (path) => {
|
|
330
|
-
const candidatePath = path.map((p, i) => {
|
|
331
|
-
if (typeof p === "number") {
|
|
332
|
-
return `[${p}]`;
|
|
333
|
-
} else {
|
|
334
|
-
return i === 0 ? p : `.${p}`;
|
|
335
|
-
}
|
|
336
|
-
}).join("");
|
|
337
|
-
invariant2(isJsonPath(candidatePath), `Invalid JsonPath: ${candidatePath}`, {
|
|
338
|
-
F: __dxlog_file2,
|
|
339
|
-
L: 63,
|
|
340
|
-
S: void 0,
|
|
341
|
-
A: [
|
|
342
|
-
"isJsonPath(candidatePath)",
|
|
343
|
-
"`Invalid JsonPath: ${candidatePath}`"
|
|
344
|
-
]
|
|
345
|
-
});
|
|
346
|
-
return candidatePath;
|
|
347
|
-
};
|
|
348
|
-
var fromEffectValidationPath = (effectPath) => {
|
|
349
|
-
const jsonPath = effectPath.replace(/\.\[(\d+)\]/g, "[$1]");
|
|
350
|
-
invariant2(isJsonPath(jsonPath), `Invalid JsonPath: ${jsonPath}`, {
|
|
351
|
-
F: __dxlog_file2,
|
|
352
|
-
L: 74,
|
|
353
|
-
S: void 0,
|
|
354
|
-
A: [
|
|
355
|
-
"isJsonPath(jsonPath)",
|
|
356
|
-
"`Invalid JsonPath: ${jsonPath}`"
|
|
357
|
-
]
|
|
358
|
-
});
|
|
359
|
-
return jsonPath;
|
|
360
|
-
};
|
|
361
|
-
var splitJsonPath = (path) => {
|
|
362
|
-
if (!isJsonPath(path)) {
|
|
363
|
-
return [];
|
|
283
|
+
var getIndexSignatures = (ast) => {
|
|
284
|
+
const annotation = SchemaAST.getSurrogateAnnotation(ast);
|
|
285
|
+
if (Option.isSome(annotation)) {
|
|
286
|
+
return getIndexSignatures(annotation.value);
|
|
364
287
|
}
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
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 [];
|
|
372
297
|
};
|
|
373
298
|
|
|
374
|
-
// src/
|
|
375
|
-
import {
|
|
376
|
-
import
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
}
|
|
386
|
-
obj[key] = value;
|
|
387
|
-
}
|
|
388
|
-
return obj;
|
|
389
|
-
}
|
|
390
|
-
var ParamKeyAnnotationId = Symbol.for("@dxos/schema/annotation/ParamKey");
|
|
391
|
-
var getParamKeyAnnotation = SchemaAST2.getAnnotation(ParamKeyAnnotationId);
|
|
392
|
-
var ParamKeyAnnotation = (value) => (self) => self.annotations({
|
|
393
|
-
[ParamKeyAnnotationId]: value
|
|
394
|
-
});
|
|
395
|
-
var UrlParser = class {
|
|
396
|
-
/**
|
|
397
|
-
* Parse URL params.
|
|
398
|
-
*/
|
|
399
|
-
parse(_url) {
|
|
400
|
-
const url = new URL(_url);
|
|
401
|
-
return Object.entries(this._schema.fields).reduce((params, [key, type]) => {
|
|
402
|
-
let value = url.searchParams.get(decamelize(key));
|
|
403
|
-
if (value == null) {
|
|
404
|
-
value = url.searchParams.get(key);
|
|
405
|
-
}
|
|
406
|
-
if (value != null) {
|
|
407
|
-
if (SchemaAST2.isNumberKeyword(type.ast)) {
|
|
408
|
-
params[key] = parseInt(value);
|
|
409
|
-
} else if (SchemaAST2.isBooleanKeyword(type.ast)) {
|
|
410
|
-
params[key] = value === "true" || value === "1";
|
|
411
|
-
} else {
|
|
412
|
-
params[key] = value;
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
return params;
|
|
416
|
-
}, {});
|
|
417
|
-
}
|
|
418
|
-
/**
|
|
419
|
-
* Return URL with encoded params.
|
|
420
|
-
*/
|
|
421
|
-
create(_url, params) {
|
|
422
|
-
const url = new URL(_url);
|
|
423
|
-
Object.entries(params).forEach(([key, value]) => {
|
|
424
|
-
if (value !== void 0) {
|
|
425
|
-
const field = this._schema.fields[key];
|
|
426
|
-
if (field) {
|
|
427
|
-
const { key: serializedKey } = pipe2(getParamKeyAnnotation(field.ast), Option3.getOrElse(() => ({
|
|
428
|
-
key: decamelize(key)
|
|
429
|
-
})));
|
|
430
|
-
url.searchParams.set(serializedKey, String(value));
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
});
|
|
434
|
-
return url;
|
|
435
|
-
}
|
|
436
|
-
constructor(_schema) {
|
|
437
|
-
_define_property(this, "_schema", void 0);
|
|
438
|
-
this._schema = _schema;
|
|
439
|
-
}
|
|
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);
|
|
440
311
|
};
|
|
441
312
|
|
|
442
313
|
// src/context.ts
|
|
443
|
-
import
|
|
314
|
+
import * as Effect from "effect/Effect";
|
|
444
315
|
import { Context } from "@dxos/context";
|
|
445
|
-
var __dxlog_file3 = "/__w/dxos/dxos/packages/common/effect/src/context.ts";
|
|
446
316
|
var contextFromScope = () => Effect.gen(function* () {
|
|
447
|
-
const ctx = new Context(
|
|
448
|
-
F: __dxlog_file3,
|
|
449
|
-
L: 12
|
|
450
|
-
});
|
|
317
|
+
const ctx = new Context();
|
|
451
318
|
yield* Effect.addFinalizer(() => Effect.promise(() => ctx.dispose()));
|
|
452
319
|
return ctx;
|
|
453
320
|
});
|
|
454
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
|
+
|
|
455
333
|
// src/errors.ts
|
|
456
|
-
import
|
|
457
|
-
|
|
458
|
-
|
|
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");
|
|
459
342
|
var spanToTrace = GlobalValue.globalValue("effect/Tracer/spanToTrace", () => /* @__PURE__ */ new WeakMap());
|
|
460
343
|
var locationRegex = /\((.*)\)/g;
|
|
461
344
|
var prettyErrorStack = (error, appendStacks = []) => {
|
|
345
|
+
if (typeof error !== "object" || error === null) {
|
|
346
|
+
return error;
|
|
347
|
+
}
|
|
462
348
|
const span = error[spanSymbol];
|
|
463
349
|
const lines = typeof error.stack === "string" ? error.stack.split("\n") : [];
|
|
464
350
|
const out = [];
|
|
465
|
-
let atStack = false;
|
|
351
|
+
let atStack = false, inCore = false, passedScheduler = false;
|
|
466
352
|
for (let i = 0; i < lines.length; i++) {
|
|
467
353
|
if (!atStack && !lines[i].startsWith(" at ")) {
|
|
468
354
|
out.push(lines[i]);
|
|
@@ -479,6 +365,26 @@ var prettyErrorStack = (error, appendStacks = []) => {
|
|
|
479
365
|
if (lines[i].includes("effect_internal_function")) {
|
|
480
366
|
break;
|
|
481
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
|
+
}
|
|
482
388
|
out.push(lines[i].replace(/at .*effect_instruction_i.*\((.*)\)/, "at $1").replace(/EffectPrimitive\.\w+/, "<anonymous>").replace(/at Arguments\./, "at "));
|
|
483
389
|
}
|
|
484
390
|
if (span) {
|
|
@@ -504,14 +410,12 @@ var prettyErrorStack = (error, appendStacks = []) => {
|
|
|
504
410
|
} else {
|
|
505
411
|
out.push(` at ${current.name}`);
|
|
506
412
|
}
|
|
507
|
-
current =
|
|
413
|
+
current = Option2.getOrUndefined(current.parent);
|
|
508
414
|
i++;
|
|
509
415
|
}
|
|
510
416
|
}
|
|
511
417
|
out.push(...appendStacks);
|
|
512
|
-
|
|
513
|
-
error = error[originalSymbol];
|
|
514
|
-
}
|
|
418
|
+
error = Cause.originalError(error);
|
|
515
419
|
if (error.cause) {
|
|
516
420
|
error.cause = prettyErrorStack(error.cause);
|
|
517
421
|
}
|
|
@@ -525,40 +429,55 @@ var prettyErrorStack = (error, appendStacks = []) => {
|
|
|
525
429
|
};
|
|
526
430
|
var causeToError = (cause) => {
|
|
527
431
|
if (Cause.isEmpty(cause)) {
|
|
528
|
-
|
|
432
|
+
return new Error("Fiber failed without a cause");
|
|
529
433
|
} else if (Cause.isInterruptedOnly(cause)) {
|
|
530
|
-
|
|
434
|
+
return new Error("Fiber was interrupted");
|
|
531
435
|
} else {
|
|
532
436
|
const errors = [
|
|
533
437
|
...Chunk.toArray(Cause.failures(cause)),
|
|
534
438
|
...Chunk.toArray(Cause.defects(cause))
|
|
535
439
|
];
|
|
536
440
|
const getStackFrames = () => {
|
|
537
|
-
const o =
|
|
538
|
-
Error.captureStackTrace(o,
|
|
441
|
+
const o = new Error();
|
|
442
|
+
Error.captureStackTrace(o, causeToError);
|
|
539
443
|
return o.stack.split("\n").slice(1);
|
|
540
444
|
};
|
|
541
445
|
const stackFrames = getStackFrames();
|
|
542
446
|
const newErrors = errors.map((error) => prettyErrorStack(error, stackFrames));
|
|
543
447
|
if (newErrors.length === 1) {
|
|
544
|
-
|
|
448
|
+
return newErrors[0];
|
|
545
449
|
} else {
|
|
546
|
-
|
|
450
|
+
return new AggregateError(newErrors);
|
|
547
451
|
}
|
|
548
452
|
}
|
|
549
453
|
};
|
|
550
454
|
var throwCause = (cause) => {
|
|
551
455
|
throw causeToError(cause);
|
|
552
456
|
};
|
|
553
|
-
var unwrapExit = (
|
|
554
|
-
if (Exit.isSuccess(
|
|
555
|
-
return
|
|
457
|
+
var unwrapExit = (exit2) => {
|
|
458
|
+
if (Exit.isSuccess(exit2)) {
|
|
459
|
+
return exit2.value;
|
|
556
460
|
}
|
|
557
|
-
return throwCause(
|
|
461
|
+
return throwCause(exit2.cause);
|
|
558
462
|
};
|
|
559
463
|
var runAndForwardErrors = async (effect, options) => {
|
|
560
|
-
const
|
|
561
|
-
return unwrapExit(
|
|
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
|
+
}
|
|
562
481
|
};
|
|
563
482
|
var promiseWithCauseCapture = (evaluate) => Effect2.promise(async (signal) => {
|
|
564
483
|
try {
|
|
@@ -569,77 +488,338 @@ var promiseWithCauseCapture = (evaluate) => Effect2.promise(async (signal) => {
|
|
|
569
488
|
}
|
|
570
489
|
}).pipe(Effect2.flatten);
|
|
571
490
|
|
|
572
|
-
// src/
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
return yield* effect;
|
|
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);
|
|
580
498
|
}
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
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
|
+
}));
|
|
587
515
|
}
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
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
|
+
}
|
|
578
|
+
|
|
579
|
+
// src/json-path.ts
|
|
580
|
+
import * as Option4 from "effect/Option";
|
|
581
|
+
import * as Schema2 from "effect/Schema";
|
|
582
|
+
import { JSONPath } from "jsonpath-plus";
|
|
583
|
+
import { invariant as invariant2 } from "@dxos/invariant";
|
|
584
|
+
import { getDeep, setDeep } from "@dxos/util";
|
|
585
|
+
var PATH_REGEX = /^($|[a-zA-Z_$][\w$]*(?:\.[a-zA-Z_$][\w$]*|\[\d+\](?:\.)?)*$)/;
|
|
586
|
+
var PROP_REGEX = /^\w+$/;
|
|
587
|
+
var JsonPath = Schema2.String.pipe(Schema2.pattern(PATH_REGEX)).annotations({
|
|
588
|
+
title: "JSON path",
|
|
589
|
+
description: "JSON path to a property"
|
|
590
|
+
});
|
|
591
|
+
var JsonProp = Schema2.NonEmptyString.pipe(Schema2.pattern(PROP_REGEX, {
|
|
592
|
+
message: () => "Property name must contain only letters, numbers, and underscores"
|
|
593
|
+
}));
|
|
594
|
+
var isJsonPath = (value) => {
|
|
595
|
+
return Option4.isSome(Schema2.validateOption(JsonPath)(value));
|
|
596
|
+
};
|
|
597
|
+
var createJsonPath = (path) => {
|
|
598
|
+
const candidatePath = path.map((p, i) => {
|
|
599
|
+
if (typeof p === "number") {
|
|
600
|
+
return `[${p}]`;
|
|
592
601
|
} else {
|
|
593
|
-
return
|
|
602
|
+
return i === 0 ? p : `.${p}`;
|
|
594
603
|
}
|
|
595
|
-
});
|
|
596
|
-
|
|
597
|
-
|
|
604
|
+
}).join("");
|
|
605
|
+
invariant2(isJsonPath(candidatePath), `Invalid JsonPath: ${candidatePath}`);
|
|
606
|
+
return candidatePath;
|
|
607
|
+
};
|
|
608
|
+
var fromEffectValidationPath = (effectPath) => {
|
|
609
|
+
const jsonPath = effectPath.replace(/\.\[(\d+)\]/g, "[$1]");
|
|
610
|
+
invariant2(isJsonPath(jsonPath), `Invalid JsonPath: ${jsonPath}`);
|
|
611
|
+
return jsonPath;
|
|
612
|
+
};
|
|
613
|
+
var splitJsonPath = (path) => {
|
|
614
|
+
if (!isJsonPath(path)) {
|
|
615
|
+
return [];
|
|
616
|
+
}
|
|
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
|
+
}) ?? [];
|
|
621
|
+
};
|
|
622
|
+
var getField = (object, path) => {
|
|
623
|
+
return JSONPath({
|
|
624
|
+
path,
|
|
625
|
+
json: object
|
|
626
|
+
})[0];
|
|
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
|
+
};
|
|
598
634
|
|
|
599
635
|
// src/resource.ts
|
|
600
|
-
import
|
|
601
|
-
var
|
|
636
|
+
import * as Effect4 from "effect/Effect";
|
|
637
|
+
var acquireReleaseResource = (getResource) => Effect4.acquireRelease(Effect4.gen(function* () {
|
|
602
638
|
const resource = getResource();
|
|
603
639
|
yield* Effect4.promise(async () => {
|
|
604
|
-
resource.open?.();
|
|
640
|
+
await resource.open?.();
|
|
605
641
|
return void 0;
|
|
606
642
|
});
|
|
607
643
|
return resource;
|
|
608
644
|
}), (resource) => Effect4.promise(async () => {
|
|
609
|
-
resource.close?.();
|
|
645
|
+
await resource.close?.();
|
|
610
646
|
return void 0;
|
|
611
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";
|
|
653
|
+
import { decamelize } from "@dxos/util";
|
|
654
|
+
var ParamKeyAnnotationId = /* @__PURE__ */ Symbol.for("@dxos/schema/annotation/ParamKey");
|
|
655
|
+
var getParamKeyAnnotation = SchemaAST2.getAnnotation(ParamKeyAnnotationId);
|
|
656
|
+
var ParamKeyAnnotation = (value) => (self) => self.annotations({
|
|
657
|
+
[ParamKeyAnnotationId]: value
|
|
658
|
+
});
|
|
659
|
+
var UrlParser = class {
|
|
660
|
+
_schema;
|
|
661
|
+
constructor(_schema) {
|
|
662
|
+
this._schema = _schema;
|
|
663
|
+
}
|
|
664
|
+
/**
|
|
665
|
+
* Parse URL params.
|
|
666
|
+
*/
|
|
667
|
+
parse(_url) {
|
|
668
|
+
const url = new URL(_url);
|
|
669
|
+
return Object.entries(this._schema.fields).reduce((params, [key, type]) => {
|
|
670
|
+
let value = url.searchParams.get(decamelize(key));
|
|
671
|
+
if (value == null) {
|
|
672
|
+
value = url.searchParams.get(key);
|
|
673
|
+
}
|
|
674
|
+
if (value != null) {
|
|
675
|
+
if (SchemaAST2.isNumberKeyword(type.ast)) {
|
|
676
|
+
params[key] = parseInt(value);
|
|
677
|
+
} else if (SchemaAST2.isBooleanKeyword(type.ast)) {
|
|
678
|
+
params[key] = value === "true" || value === "1";
|
|
679
|
+
} else {
|
|
680
|
+
params[key] = value;
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
return params;
|
|
684
|
+
}, {});
|
|
685
|
+
}
|
|
686
|
+
/**
|
|
687
|
+
* Return URL with encoded params.
|
|
688
|
+
*/
|
|
689
|
+
create(_url, params) {
|
|
690
|
+
const url = new URL(_url);
|
|
691
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
692
|
+
if (value !== void 0) {
|
|
693
|
+
const field = this._schema.fields[key];
|
|
694
|
+
if (field) {
|
|
695
|
+
const { key: serializedKey } = Function2.pipe(getParamKeyAnnotation(field.ast), Option5.getOrElse(() => ({
|
|
696
|
+
key: decamelize(key)
|
|
697
|
+
})));
|
|
698
|
+
url.searchParams.set(serializedKey, String(value));
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
});
|
|
702
|
+
return url;
|
|
703
|
+
}
|
|
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
|
+
};
|
|
612
782
|
export {
|
|
783
|
+
dynamic_runtime_exports as DynamicRuntime,
|
|
613
784
|
JsonPath,
|
|
614
785
|
JsonProp,
|
|
615
786
|
ParamKeyAnnotation,
|
|
616
|
-
|
|
617
|
-
|
|
787
|
+
Performance_exports as Performance,
|
|
788
|
+
RuntimeProvider_exports as RuntimeProvider,
|
|
618
789
|
UrlParser,
|
|
619
790
|
VisitResult,
|
|
620
|
-
|
|
791
|
+
acquireReleaseResource,
|
|
792
|
+
asyncTaskTaggingLayer,
|
|
621
793
|
causeToError,
|
|
622
794
|
contextFromScope,
|
|
623
795
|
createJsonPath,
|
|
796
|
+
createKvsStore,
|
|
624
797
|
findAnnotation,
|
|
625
798
|
findNode,
|
|
626
799
|
findProperty,
|
|
627
800
|
fromEffectValidationPath,
|
|
628
|
-
getAnnotation,
|
|
801
|
+
getAnnotation2 as getAnnotation,
|
|
802
|
+
getArrayElementType,
|
|
803
|
+
getBaseType,
|
|
629
804
|
getDiscriminatedType,
|
|
630
805
|
getDiscriminatingProps,
|
|
631
806
|
getField,
|
|
807
|
+
getLiteralValues,
|
|
632
808
|
getParamKeyAnnotation,
|
|
633
|
-
|
|
809
|
+
getProperties,
|
|
810
|
+
getValue,
|
|
634
811
|
isArrayType,
|
|
635
812
|
isDiscriminatedUnion,
|
|
636
813
|
isJsonPath,
|
|
637
814
|
isLiteralUnion,
|
|
815
|
+
isNestedType,
|
|
638
816
|
isOption,
|
|
639
|
-
|
|
817
|
+
isTupleType2 as isTupleType,
|
|
640
818
|
mapAst,
|
|
641
819
|
promiseWithCauseCapture,
|
|
642
820
|
runAndForwardErrors,
|
|
821
|
+
runInRuntime,
|
|
822
|
+
setValue,
|
|
643
823
|
splitJsonPath,
|
|
644
824
|
throwCause,
|
|
645
825
|
unwrapExit,
|