@ambarltd/core 0.1.17
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/README.md +10 -0
- package/dist/callable.d.ts +1 -0
- package/dist/callable.js +6 -0
- package/dist/future.d.ts +102 -0
- package/dist/future.js +164 -0
- package/dist/helpers/object.d.ts +9 -0
- package/dist/helpers/object.js +31 -0
- package/dist/json/decoder.d.ts +99 -0
- package/dist/json/decoder.js +213 -0
- package/dist/json/encoder.d.ts +50 -0
- package/dist/json/encoder.js +115 -0
- package/dist/json/schema.d.ts +78 -0
- package/dist/json/schema.js +168 -0
- package/dist/json/types.d.ts +6 -0
- package/dist/json/types.js +1 -0
- package/dist/list.d.ts +35 -0
- package/dist/list.js +130 -0
- package/dist/maybe.d.ts +104 -0
- package/dist/maybe.js +106 -0
- package/dist/remote-data.d.ts +117 -0
- package/dist/remote-data.js +148 -0
- package/dist/result.d.ts +75 -0
- package/dist/result.js +126 -0
- package/dist/router.d.ts +117 -0
- package/dist/router.js +106 -0
- package/dist/test.d.ts +63 -0
- package/dist/test.js +470 -0
- package/dist/time.d.ts +118 -0
- package/dist/time.js +387 -0
- package/dist/tracing/opentelemetry.d.ts +27 -0
- package/dist/tracing/opentelemetry.js +215 -0
- package/dist/tracing/proxy.d.ts +20 -0
- package/dist/tracing/proxy.js +103 -0
- package/dist/tracing/simple.d.ts +10 -0
- package/dist/tracing/simple.js +224 -0
- package/dist/tracing.d.ts +29 -0
- package/dist/tracing.js +55 -0
- package/dist/trampoline.d.ts +24 -0
- package/dist/trampoline.js +46 -0
- package/dist/tree-map.d.ts +73 -0
- package/dist/tree-map.js +169 -0
- package/dist/tree-set.d.ts +63 -0
- package/dist/tree-set.js +114 -0
- package/dist/types.d.ts +21 -0
- package/dist/types.js +1 -0
- package/package.json +49 -0
package/dist/tree-map.js
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// Handle sorted-btree's inconsistent default export across ESM/CJS
|
|
2
|
+
import sortedBtreeModule from "sorted-btree";
|
|
3
|
+
const BTree = sortedBtreeModule.default || sortedBtreeModule;
|
|
4
|
+
import { Just, Nothing } from "./maybe";
|
|
5
|
+
const stringMap = () => TreeMap.new((x, y) => x > y ? 1
|
|
6
|
+
: x < y ? -1
|
|
7
|
+
: 0);
|
|
8
|
+
/**
|
|
9
|
+
* Shared base for {@link TreeMap} and {@link ImmutableTreeMap}.
|
|
10
|
+
*
|
|
11
|
+
* Holds the BTree state, all read methods, and every bulk transformation.
|
|
12
|
+
* The only thing each subclass supplies is mutation methods and a `wrap`
|
|
13
|
+
* factory that lifts a fresh BTree back into its own kind.
|
|
14
|
+
*/
|
|
15
|
+
class TreeMapCore {
|
|
16
|
+
// @ts-expect-error Unused field to prevent instantiation by casting.
|
|
17
|
+
_ = null;
|
|
18
|
+
tree;
|
|
19
|
+
compare;
|
|
20
|
+
constructor(tree, compare) {
|
|
21
|
+
this.tree = tree;
|
|
22
|
+
this.compare = compare;
|
|
23
|
+
}
|
|
24
|
+
get(k) {
|
|
25
|
+
const found = this.tree.get(k);
|
|
26
|
+
return found !== undefined ? Just(found) : Nothing();
|
|
27
|
+
}
|
|
28
|
+
has(k) {
|
|
29
|
+
return this.tree.has(k);
|
|
30
|
+
}
|
|
31
|
+
keys() {
|
|
32
|
+
return this.tree.keys();
|
|
33
|
+
}
|
|
34
|
+
values() {
|
|
35
|
+
return this.tree.values();
|
|
36
|
+
}
|
|
37
|
+
entries() {
|
|
38
|
+
return this.tree.entries();
|
|
39
|
+
}
|
|
40
|
+
size() {
|
|
41
|
+
return this.tree.size;
|
|
42
|
+
}
|
|
43
|
+
clone() {
|
|
44
|
+
return this.wrap(this.tree.clone());
|
|
45
|
+
}
|
|
46
|
+
/** Create a new map with keys from both maps. */
|
|
47
|
+
unionWith(other, f) {
|
|
48
|
+
const t = this.tree.clone();
|
|
49
|
+
for (const [k, v] of other.entries()) {
|
|
50
|
+
const found = t.get(k);
|
|
51
|
+
t.set(k, found !== undefined ? f(found, v) : v);
|
|
52
|
+
}
|
|
53
|
+
return this.wrap(t);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Difference in the set of keys.
|
|
57
|
+
* `A.difference(B)` equals A minus all keys present in B.
|
|
58
|
+
*/
|
|
59
|
+
difference(other) {
|
|
60
|
+
const t = this.tree.clone();
|
|
61
|
+
for (const k of other.keys())
|
|
62
|
+
t.delete(k);
|
|
63
|
+
return this.wrap(t);
|
|
64
|
+
}
|
|
65
|
+
/** Create a new map from keys common to two other maps. */
|
|
66
|
+
intersectionWith(other, f) {
|
|
67
|
+
const result = new BTree([], this.compare);
|
|
68
|
+
for (const [k, v] of this.entries()) {
|
|
69
|
+
const found = other.tree.get(k);
|
|
70
|
+
if (found !== undefined)
|
|
71
|
+
result.set(k, f(v, found));
|
|
72
|
+
}
|
|
73
|
+
return this.wrap(result);
|
|
74
|
+
}
|
|
75
|
+
mapWithKeys(f) {
|
|
76
|
+
return this.wrap(this.tree.mapValues((v, k) => f(k, v)));
|
|
77
|
+
}
|
|
78
|
+
map(f) {
|
|
79
|
+
return this.mapWithKeys((_, v) => f(v));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* A mutable Map type that requires a comparison function.
|
|
84
|
+
*
|
|
85
|
+
* This is just a wrapper around BTree which requires the comparison function.
|
|
86
|
+
*/
|
|
87
|
+
class TreeMap extends TreeMapCore {
|
|
88
|
+
static new(compare) {
|
|
89
|
+
return new TreeMap(new BTree([], compare), compare);
|
|
90
|
+
}
|
|
91
|
+
static new_() {
|
|
92
|
+
const compare = (x, y) => x.compare(y);
|
|
93
|
+
return new TreeMap(new BTree([], compare), compare);
|
|
94
|
+
}
|
|
95
|
+
static from(compare, xs) {
|
|
96
|
+
return TreeMap.new(compare).setEntries(xs[Symbol.iterator]());
|
|
97
|
+
}
|
|
98
|
+
static from_(xs) {
|
|
99
|
+
return TreeMap.new_().setEntries(xs[Symbol.iterator]());
|
|
100
|
+
}
|
|
101
|
+
wrap(tree) {
|
|
102
|
+
return new TreeMap(tree, this.compare);
|
|
103
|
+
}
|
|
104
|
+
set(k, v) {
|
|
105
|
+
this.tree.set(k, v);
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
setWith(k, v, f) {
|
|
109
|
+
const found = this.tree.get(k);
|
|
110
|
+
this.tree.set(k, found !== undefined ? f(found, v) : v);
|
|
111
|
+
return this;
|
|
112
|
+
}
|
|
113
|
+
remove(k) {
|
|
114
|
+
this.tree.delete(k);
|
|
115
|
+
return this;
|
|
116
|
+
}
|
|
117
|
+
setEntries(it) {
|
|
118
|
+
for (const [k, v] of it)
|
|
119
|
+
this.tree.set(k, v);
|
|
120
|
+
return this;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* An immutable Map type that requires a comparison function.
|
|
125
|
+
*
|
|
126
|
+
* Every update returns a new ImmutableTreeMap; the receiver is untouched.
|
|
127
|
+
* Each update clones the underlying BTree before mutating the copy.
|
|
128
|
+
*/
|
|
129
|
+
class ImmutableTreeMap extends TreeMapCore {
|
|
130
|
+
static new(compare) {
|
|
131
|
+
return new ImmutableTreeMap(new BTree([], compare), compare);
|
|
132
|
+
}
|
|
133
|
+
static new_() {
|
|
134
|
+
const compare = (x, y) => x.compare(y);
|
|
135
|
+
return new ImmutableTreeMap(new BTree([], compare), compare);
|
|
136
|
+
}
|
|
137
|
+
static from(compare, xs) {
|
|
138
|
+
return ImmutableTreeMap.new(compare).setEntries(xs[Symbol.iterator]());
|
|
139
|
+
}
|
|
140
|
+
static from_(xs) {
|
|
141
|
+
return ImmutableTreeMap.new_().setEntries(xs[Symbol.iterator]());
|
|
142
|
+
}
|
|
143
|
+
wrap(tree) {
|
|
144
|
+
return new ImmutableTreeMap(tree, this.compare);
|
|
145
|
+
}
|
|
146
|
+
set(k, v) {
|
|
147
|
+
const t = this.tree.clone();
|
|
148
|
+
t.set(k, v);
|
|
149
|
+
return new ImmutableTreeMap(t, this.compare);
|
|
150
|
+
}
|
|
151
|
+
setWith(k, v, f) {
|
|
152
|
+
const t = this.tree.clone();
|
|
153
|
+
const found = t.get(k);
|
|
154
|
+
t.set(k, found !== undefined ? f(found, v) : v);
|
|
155
|
+
return new ImmutableTreeMap(t, this.compare);
|
|
156
|
+
}
|
|
157
|
+
remove(k) {
|
|
158
|
+
const t = this.tree.clone();
|
|
159
|
+
t.delete(k);
|
|
160
|
+
return new ImmutableTreeMap(t, this.compare);
|
|
161
|
+
}
|
|
162
|
+
setEntries(it) {
|
|
163
|
+
const t = this.tree.clone();
|
|
164
|
+
for (const [k, v] of it)
|
|
165
|
+
t.set(k, v);
|
|
166
|
+
return new ImmutableTreeMap(t, this.compare);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
export { TreeMap, ImmutableTreeMap, TreeMapCore, stringMap };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { TreeMap, ImmutableTreeMap, TreeMapCore } from "./tree-map";
|
|
2
|
+
interface Comparable<T> {
|
|
3
|
+
compare(other: T): number;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Shared base for {@link TreeSet} and {@link ImmutableTreeSet}.
|
|
7
|
+
*
|
|
8
|
+
* Holds a {@link TreeMapCore} keyed on the set's elements (with `null`
|
|
9
|
+
* values), all read methods, and every set-algebra method. Subclasses
|
|
10
|
+
* supply their mutation methods and a `wrap` factory that lifts a fresh
|
|
11
|
+
* underlying map back into their own kind.
|
|
12
|
+
*/
|
|
13
|
+
declare abstract class TreeSetCore<K> {
|
|
14
|
+
private readonly _;
|
|
15
|
+
protected tree: TreeMapCore<K, null>;
|
|
16
|
+
protected constructor(tree: TreeMapCore<K, null>);
|
|
17
|
+
/** Construct a new instance of the same subclass around a fresh map. */
|
|
18
|
+
protected abstract wrap(tree: TreeMapCore<K, null>): TreeSetCore<K>;
|
|
19
|
+
has(k: K): boolean;
|
|
20
|
+
values(): Array<K>;
|
|
21
|
+
size(): number;
|
|
22
|
+
union(other: TreeSetCore<K>): this;
|
|
23
|
+
difference(other: TreeSetCore<K>): this;
|
|
24
|
+
intersection(other: TreeSetCore<K>): this;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* A mutable Set type that requires a comparison function.
|
|
28
|
+
*
|
|
29
|
+
* This is a wrapper around {@link TreeMap} keyed on the elements.
|
|
30
|
+
*/
|
|
31
|
+
declare class TreeSet<K> extends TreeSetCore<K> {
|
|
32
|
+
protected tree: TreeMap<K, null>;
|
|
33
|
+
static new<K>(compare: (l: K, r: K) => number): TreeSet<K>;
|
|
34
|
+
static new_<K extends Comparable<K>>(): TreeSet<K>;
|
|
35
|
+
/** Return a clone of the set. */
|
|
36
|
+
static from<K>(set: TreeSet<K>): TreeSet<K>;
|
|
37
|
+
static from_<K extends Comparable<K>>(xs: Array<K>): TreeSet<K>;
|
|
38
|
+
private constructor();
|
|
39
|
+
protected wrap(tree: TreeMapCore<K, null>): TreeSet<K>;
|
|
40
|
+
insert(k: K): this;
|
|
41
|
+
remove(k: K): this;
|
|
42
|
+
insertValues(it: Array<K>): this;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* An immutable Set type that requires a comparison function.
|
|
46
|
+
*
|
|
47
|
+
* Every update returns a new ImmutableTreeSet; the receiver is untouched.
|
|
48
|
+
* Single-element updates use ImmutableTreeMap's structural-sharing primitives,
|
|
49
|
+
* so they don't copy the entire tree.
|
|
50
|
+
*/
|
|
51
|
+
declare class ImmutableTreeSet<K> extends TreeSetCore<K> {
|
|
52
|
+
protected tree: ImmutableTreeMap<K, null>;
|
|
53
|
+
static new<K>(compare: (l: K, r: K) => number): ImmutableTreeSet<K>;
|
|
54
|
+
static new_<K extends Comparable<K>>(): ImmutableTreeSet<K>;
|
|
55
|
+
static from<K>(compare: (l: K, r: K) => number, xs: Array<K>): ImmutableTreeSet<K>;
|
|
56
|
+
static from_<K extends Comparable<K>>(xs: Array<K>): ImmutableTreeSet<K>;
|
|
57
|
+
private constructor();
|
|
58
|
+
protected wrap(tree: TreeMapCore<K, null>): ImmutableTreeSet<K>;
|
|
59
|
+
insert(k: K): ImmutableTreeSet<K>;
|
|
60
|
+
remove(k: K): ImmutableTreeSet<K>;
|
|
61
|
+
insertValues(xs: Array<K>): ImmutableTreeSet<K>;
|
|
62
|
+
}
|
|
63
|
+
export { TreeSet, ImmutableTreeSet };
|
package/dist/tree-set.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { TreeMap, ImmutableTreeMap } from "./tree-map";
|
|
2
|
+
/**
|
|
3
|
+
* Shared base for {@link TreeSet} and {@link ImmutableTreeSet}.
|
|
4
|
+
*
|
|
5
|
+
* Holds a {@link TreeMapCore} keyed on the set's elements (with `null`
|
|
6
|
+
* values), all read methods, and every set-algebra method. Subclasses
|
|
7
|
+
* supply their mutation methods and a `wrap` factory that lifts a fresh
|
|
8
|
+
* underlying map back into their own kind.
|
|
9
|
+
*/
|
|
10
|
+
class TreeSetCore {
|
|
11
|
+
// @ts-expect-error Unused field to prevent instantiation by casting.
|
|
12
|
+
_ = null;
|
|
13
|
+
tree;
|
|
14
|
+
constructor(tree) {
|
|
15
|
+
this.tree = tree;
|
|
16
|
+
}
|
|
17
|
+
has(k) {
|
|
18
|
+
return this.tree.has(k);
|
|
19
|
+
}
|
|
20
|
+
values() {
|
|
21
|
+
return Array.from(this.tree.keys());
|
|
22
|
+
}
|
|
23
|
+
size() {
|
|
24
|
+
return this.tree.size();
|
|
25
|
+
}
|
|
26
|
+
union(other) {
|
|
27
|
+
return this.wrap(this.tree.unionWith(other.tree, (l, _) => l));
|
|
28
|
+
}
|
|
29
|
+
difference(other) {
|
|
30
|
+
return this.wrap(this.tree.difference(other.tree));
|
|
31
|
+
}
|
|
32
|
+
intersection(other) {
|
|
33
|
+
return this.wrap(this.tree.intersectionWith(other.tree, (v, _) => v));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* A mutable Set type that requires a comparison function.
|
|
38
|
+
*
|
|
39
|
+
* This is a wrapper around {@link TreeMap} keyed on the elements.
|
|
40
|
+
*/
|
|
41
|
+
class TreeSet extends TreeSetCore {
|
|
42
|
+
static new(compare) {
|
|
43
|
+
return new TreeSet(TreeMap.new(compare));
|
|
44
|
+
}
|
|
45
|
+
static new_() {
|
|
46
|
+
const compare = (x, y) => x.compare(y);
|
|
47
|
+
return new TreeSet(TreeMap.new(compare));
|
|
48
|
+
}
|
|
49
|
+
/** Return a clone of the set. */
|
|
50
|
+
static from(set) {
|
|
51
|
+
return new TreeSet(set.tree.clone());
|
|
52
|
+
}
|
|
53
|
+
static from_(xs) {
|
|
54
|
+
return TreeSet.new_().insertValues(xs);
|
|
55
|
+
}
|
|
56
|
+
constructor(tree) {
|
|
57
|
+
super(tree);
|
|
58
|
+
}
|
|
59
|
+
wrap(tree) {
|
|
60
|
+
return new TreeSet(tree);
|
|
61
|
+
}
|
|
62
|
+
insert(k) {
|
|
63
|
+
this.tree.set(k, null);
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
remove(k) {
|
|
67
|
+
this.tree.remove(k);
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
insertValues(it) {
|
|
71
|
+
for (const k of it)
|
|
72
|
+
this.tree.set(k, null);
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* An immutable Set type that requires a comparison function.
|
|
78
|
+
*
|
|
79
|
+
* Every update returns a new ImmutableTreeSet; the receiver is untouched.
|
|
80
|
+
* Single-element updates use ImmutableTreeMap's structural-sharing primitives,
|
|
81
|
+
* so they don't copy the entire tree.
|
|
82
|
+
*/
|
|
83
|
+
class ImmutableTreeSet extends TreeSetCore {
|
|
84
|
+
static new(compare) {
|
|
85
|
+
return new ImmutableTreeSet(ImmutableTreeMap.new(compare));
|
|
86
|
+
}
|
|
87
|
+
static new_() {
|
|
88
|
+
const compare = (x, y) => x.compare(y);
|
|
89
|
+
return new ImmutableTreeSet(ImmutableTreeMap.new(compare));
|
|
90
|
+
}
|
|
91
|
+
static from(compare, xs) {
|
|
92
|
+
return new ImmutableTreeSet(ImmutableTreeMap.from(compare, xs.map(k => [k, null])));
|
|
93
|
+
}
|
|
94
|
+
static from_(xs) {
|
|
95
|
+
const compare = (x, y) => x.compare(y);
|
|
96
|
+
return new ImmutableTreeSet(ImmutableTreeMap.from(compare, xs.map(k => [k, null])));
|
|
97
|
+
}
|
|
98
|
+
constructor(tree) {
|
|
99
|
+
super(tree);
|
|
100
|
+
}
|
|
101
|
+
wrap(tree) {
|
|
102
|
+
return new ImmutableTreeSet(tree);
|
|
103
|
+
}
|
|
104
|
+
insert(k) {
|
|
105
|
+
return new ImmutableTreeSet(this.tree.set(k, null));
|
|
106
|
+
}
|
|
107
|
+
remove(k) {
|
|
108
|
+
return new ImmutableTreeSet(this.tree.remove(k));
|
|
109
|
+
}
|
|
110
|
+
insertValues(xs) {
|
|
111
|
+
return new ImmutableTreeSet(this.tree.setEntries(xs.map(k => [k, null])[Symbol.iterator]()));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export { TreeSet, ImmutableTreeSet };
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export { type UnionPick };
|
|
2
|
+
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
3
|
+
type UnionToOvlds<U> = UnionToIntersection<U extends any ? (f: U) => void : never>;
|
|
4
|
+
type PopUnion<U> = UnionToOvlds<U> extends (a: infer A) => void ? A : never;
|
|
5
|
+
type IsUnion<T> = [T] extends [UnionToIntersection<T>] ? false : true;
|
|
6
|
+
/**
|
|
7
|
+
* Convert a union to a tuple.
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* UnionToTuple<A | B> == [A, B]
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
type UnionToTuple<T, A extends unknown[] = []> = IsUnion<T> extends true ? UnionToTuple<Exclude<T, PopUnion<T>>, [PopUnion<T>, ...A]> : [T, ...A];
|
|
14
|
+
/**
|
|
15
|
+
* Pick an option from a union.
|
|
16
|
+
*
|
|
17
|
+
* ```ts
|
|
18
|
+
* UnionPick<A | B | C, 0> == A
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
type UnionPick<T, N extends keyof UnionToTuple<T>> = UnionToTuple<T>[N];
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ambarltd/core",
|
|
3
|
+
"version": "0.1.17",
|
|
4
|
+
"license": "UNLICENSED",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"repository": "https://github.com/ambarltd/typescript-libs.git",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"registry": "https://registry.npmjs.org",
|
|
9
|
+
"access": "public"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
14
|
+
"exports": {
|
|
15
|
+
"./*": {
|
|
16
|
+
"types": "./dist/*.d.ts",
|
|
17
|
+
"default": "./dist/*.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc -p tsconfig.build.json",
|
|
22
|
+
"test": "tsx tests/main.ts",
|
|
23
|
+
"typecheck": "tsc --noEmit",
|
|
24
|
+
"typecheck:watch": "tsc --noEmit --watch",
|
|
25
|
+
"prepack": "pnpm build"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@opentelemetry/api": "^1.9.1",
|
|
29
|
+
"@opentelemetry/context-async-hooks": "^2.7.1",
|
|
30
|
+
"@opentelemetry/resources": "^2.7.1",
|
|
31
|
+
"@opentelemetry/sdk-trace-base": "^2.7.1",
|
|
32
|
+
"@opentelemetry/sdk-trace-node": "^2.7.1",
|
|
33
|
+
"@opentelemetry/semantic-conventions": "^1.41.1",
|
|
34
|
+
"@optique/core": "^0.6.2",
|
|
35
|
+
"@optique/run": "^0.6.2",
|
|
36
|
+
"fluture": "^14.0.0",
|
|
37
|
+
"luxon": "^3.7.2",
|
|
38
|
+
"sorted-btree": "^1.8.1"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/express": "^4.17.21",
|
|
42
|
+
"@types/luxon": "^3.7.1",
|
|
43
|
+
"@types/node": "^24.3.0",
|
|
44
|
+
"fast-check": "^4.3.0",
|
|
45
|
+
"tsconfig-paths": "^4.2.0",
|
|
46
|
+
"tsx": "^4.20.6",
|
|
47
|
+
"typescript": "^5.0.0"
|
|
48
|
+
}
|
|
49
|
+
}
|