@livestore/utils 0.0.0-snapshot-909cdd1ac2fd591945c2be2b0f53e14d87f3c9d4
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/dist/.tsbuildinfo.json +1 -0
- package/dist/Deferred.d.ts +10 -0
- package/dist/Deferred.d.ts.map +1 -0
- package/dist/Deferred.js +21 -0
- package/dist/Deferred.js.map +1 -0
- package/dist/NoopTracer.d.ts +10 -0
- package/dist/NoopTracer.d.ts.map +1 -0
- package/dist/NoopTracer.js +52 -0
- package/dist/NoopTracer.js.map +1 -0
- package/dist/base64.d.ts +13 -0
- package/dist/base64.d.ts.map +1 -0
- package/dist/base64.js +117 -0
- package/dist/base64.js.map +1 -0
- package/dist/browser.d.ts +3 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +28 -0
- package/dist/browser.js.map +1 -0
- package/dist/cuid/cuid.browser.d.ts +18 -0
- package/dist/cuid/cuid.browser.d.ts.map +1 -0
- package/dist/cuid/cuid.browser.js +80 -0
- package/dist/cuid/cuid.browser.js.map +1 -0
- package/dist/cuid/cuid.node.d.ts +18 -0
- package/dist/cuid/cuid.node.d.ts.map +1 -0
- package/dist/cuid/cuid.node.js +83 -0
- package/dist/cuid/cuid.node.js.map +1 -0
- package/dist/effect/Effect.d.ts +28 -0
- package/dist/effect/Effect.d.ts.map +1 -0
- package/dist/effect/Effect.js +82 -0
- package/dist/effect/Effect.js.map +1 -0
- package/dist/effect/Error.d.ts +11 -0
- package/dist/effect/Error.d.ts.map +1 -0
- package/dist/effect/Error.js +7 -0
- package/dist/effect/Error.js.map +1 -0
- package/dist/effect/Schedule.d.ts +4 -0
- package/dist/effect/Schedule.d.ts.map +1 -0
- package/dist/effect/Schedule.js +5 -0
- package/dist/effect/Schedule.js.map +1 -0
- package/dist/effect/Scheduler.d.ts +4 -0
- package/dist/effect/Scheduler.d.ts.map +1 -0
- package/dist/effect/Scheduler.js +10 -0
- package/dist/effect/Scheduler.js.map +1 -0
- package/dist/effect/Schema/debug-diff.d.ts +12 -0
- package/dist/effect/Schema/debug-diff.d.ts.map +1 -0
- package/dist/effect/Schema/debug-diff.js +51 -0
- package/dist/effect/Schema/debug-diff.js.map +1 -0
- package/dist/effect/Schema/debug-diff.test.d.ts +2 -0
- package/dist/effect/Schema/debug-diff.test.d.ts.map +1 -0
- package/dist/effect/Schema/debug-diff.test.js +91 -0
- package/dist/effect/Schema/debug-diff.test.js.map +1 -0
- package/dist/effect/Schema/index.d.ts +18 -0
- package/dist/effect/Schema/index.d.ts.map +1 -0
- package/dist/effect/Schema/index.js +29 -0
- package/dist/effect/Schema/index.js.map +1 -0
- package/dist/effect/Schema/msgpack.d.ts +3 -0
- package/dist/effect/Schema/msgpack.d.ts.map +1 -0
- package/dist/effect/Schema/msgpack.js +7 -0
- package/dist/effect/Schema/msgpack.js.map +1 -0
- package/dist/effect/ServiceContext.d.ts +37 -0
- package/dist/effect/ServiceContext.d.ts.map +1 -0
- package/dist/effect/ServiceContext.js +55 -0
- package/dist/effect/ServiceContext.js.map +1 -0
- package/dist/effect/Stream.d.ts +10 -0
- package/dist/effect/Stream.d.ts.map +1 -0
- package/dist/effect/Stream.js +17 -0
- package/dist/effect/Stream.js.map +1 -0
- package/dist/effect/SubscriptionRef.d.ts +11 -0
- package/dist/effect/SubscriptionRef.d.ts.map +1 -0
- package/dist/effect/SubscriptionRef.js +5 -0
- package/dist/effect/SubscriptionRef.js.map +1 -0
- package/dist/effect/WebChannel.d.ts +30 -0
- package/dist/effect/WebChannel.d.ts.map +1 -0
- package/dist/effect/WebChannel.js +44 -0
- package/dist/effect/WebChannel.js.map +1 -0
- package/dist/effect/WebLock.d.ts +9 -0
- package/dist/effect/WebLock.d.ts.map +1 -0
- package/dist/effect/WebLock.js +73 -0
- package/dist/effect/WebLock.js.map +1 -0
- package/dist/effect/index.d.ts +21 -0
- package/dist/effect/index.d.ts.map +1 -0
- package/dist/effect/index.js +20 -0
- package/dist/effect/index.js.map +1 -0
- package/dist/fast-deep-equal.d.ts +2 -0
- package/dist/fast-deep-equal.d.ts.map +1 -0
- package/dist/fast-deep-equal.js +79 -0
- package/dist/fast-deep-equal.js.map +1 -0
- package/dist/global.d.ts +5 -0
- package/dist/global.d.ts.map +1 -0
- package/dist/global.js +2 -0
- package/dist/global.js.map +1 -0
- package/dist/guards.d.ts +6 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +6 -0
- package/dist/guards.js.map +1 -0
- package/dist/index.d.ts +76 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +176 -0
- package/dist/index.js.map +1 -0
- package/dist/misc.d.ts +3 -0
- package/dist/misc.d.ts.map +1 -0
- package/dist/misc.js +24 -0
- package/dist/misc.js.map +1 -0
- package/dist/nanoid/index.d.ts +2 -0
- package/dist/nanoid/index.d.ts.map +1 -0
- package/dist/nanoid/index.js +2 -0
- package/dist/nanoid/index.js.map +1 -0
- package/dist/object/index.d.ts +10 -0
- package/dist/object/index.d.ts.map +1 -0
- package/dist/object/index.js +10 -0
- package/dist/object/index.js.map +1 -0
- package/dist/object/omit.d.ts +3 -0
- package/dist/object/omit.d.ts.map +1 -0
- package/dist/object/omit.js +14 -0
- package/dist/object/omit.js.map +1 -0
- package/dist/object/pick.d.ts +14 -0
- package/dist/object/pick.d.ts.map +1 -0
- package/dist/object/pick.js +17 -0
- package/dist/object/pick.js.map +1 -0
- package/dist/promise.d.ts +6 -0
- package/dist/promise.d.ts.map +1 -0
- package/dist/promise.js +27 -0
- package/dist/promise.js.map +1 -0
- package/dist/set.d.ts +2 -0
- package/dist/set.d.ts.map +1 -0
- package/dist/set.js +10 -0
- package/dist/set.js.map +1 -0
- package/dist/string.d.ts +5 -0
- package/dist/string.d.ts.map +1 -0
- package/dist/string.js +8 -0
- package/dist/string.js.map +1 -0
- package/dist/time.d.ts +12 -0
- package/dist/time.d.ts.map +1 -0
- package/dist/time.js +22 -0
- package/dist/time.js.map +1 -0
- package/package.json +74 -0
- package/src/Deferred.ts +24 -0
- package/src/NoopTracer.ts +75 -0
- package/src/ambient.d.ts +3 -0
- package/src/base64.ts +123 -0
- package/src/browser.ts +32 -0
- package/src/cuid/cuid.browser.ts +95 -0
- package/src/cuid/cuid.node.ts +103 -0
- package/src/effect/Effect.ts +180 -0
- package/src/effect/Error.ts +6 -0
- package/src/effect/Schedule.ts +10 -0
- package/src/effect/Scheduler.ts +14 -0
- package/src/effect/Schema/debug-diff.test.ts +102 -0
- package/src/effect/Schema/debug-diff.ts +58 -0
- package/src/effect/Schema/index.ts +58 -0
- package/src/effect/Schema/msgpack.ts +8 -0
- package/src/effect/ServiceContext.ts +108 -0
- package/src/effect/Stream.ts +63 -0
- package/src/effect/SubscriptionRef.ts +22 -0
- package/src/effect/WebChannel.ts +116 -0
- package/src/effect/WebLock.ts +95 -0
- package/src/effect/index.ts +91 -0
- package/src/fast-deep-equal.ts +72 -0
- package/src/global.ts +5 -0
- package/src/guards.ts +8 -0
- package/src/index.ts +240 -0
- package/src/misc.ts +26 -0
- package/src/nanoid/index.ts +1 -0
- package/src/object/index.ts +24 -0
- package/src/object/omit.ts +17 -0
- package/src/object/pick.ts +27 -0
- package/src/promise.ts +43 -0
- package/src/set.ts +10 -0
- package/src/string.ts +9 -0
- package/src/time.ts +25 -0
- package/tsconfig.json +10 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './pick.js';
|
|
2
|
+
export * from './omit.js';
|
|
3
|
+
type ValueOfRecord<R extends Record<any, any>> = R extends Record<any, infer V> ? V : never;
|
|
4
|
+
export declare const mapObjectValues: <O_In extends Record<string, any>, V_Out>(obj: O_In, mapValue: (key: keyof O_In, val: ValueOfRecord<O_In>) => V_Out) => { [K in keyof O_In]: V_Out; };
|
|
5
|
+
export type Entries<T> = {
|
|
6
|
+
[K in keyof T]: [K, T[K]];
|
|
7
|
+
}[keyof T][];
|
|
8
|
+
export declare const objectEntries: <T extends Record<string, any>>(obj: T) => Entries<T>;
|
|
9
|
+
export declare const keyObjectFromObject: <TObj extends Record<string, any>>(obj: TObj) => { [K in keyof TObj]: K; };
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"AAEA,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AAEzB,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAE3F,eAAO,MAAM,eAAe,GAAI,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,OAChE,IAAI,YACC,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,KAAK,KAC7D,GAAG,CAAe,IAAV,MAAM,IAAI,GAAG,KAAK,GAG5B,CAAA;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;AAEjE,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,KAAG,OAAO,CAAC,CAAC,CAAsC,CAAA;AAErH,eAAO,MAAM,mBAAmB,GAAI,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,KAAG,GAAG,CAAe,IAAV,MAAM,IAAI,GAAG,CAAC,GAI9F,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { pipe } from 'effect';
|
|
2
|
+
export * from './pick.js';
|
|
3
|
+
export * from './omit.js';
|
|
4
|
+
export const mapObjectValues = (obj, mapValue) => {
|
|
5
|
+
const mappedEntries = Object.entries(obj).map(([key, val]) => [key, mapValue(key, val)]);
|
|
6
|
+
return Object.fromEntries(mappedEntries);
|
|
7
|
+
};
|
|
8
|
+
export const objectEntries = (obj) => Object.entries(obj);
|
|
9
|
+
export const keyObjectFromObject = (obj) => pipe(objectEntries(obj).map(([k]) => [k, k]), Object.fromEntries);
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AAIzB,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,GAAS,EACT,QAA8D,EAChC,EAAE;IAChC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAiB,EAAE,GAAG,CAAC,CAAU,CAAC,CAAA;IAC/G,OAAO,MAAM,CAAC,WAAW,CAAC,aAAa,CAAQ,CAAA;AACjD,CAAC,CAAA;AAID,MAAM,CAAC,MAAM,aAAa,GAAG,CAAgC,GAAM,EAAc,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAe,CAAA;AAErH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAmC,GAAS,EAA4B,EAAE,CAC3G,IAAI,CACF,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACvC,MAAM,CAAC,WAAW,CACZ,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omit.d.ts","sourceRoot":"","sources":["../../src/object/omit.ts"],"names":[],"mappings":"AAKA,uEAAuE;AACvE,eAAO,MAAM,IAAI,GAAI,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,SAAS,MAAM,GAAG,OACrE,GAAG,QACF,IAAI,EAAE,KACX,IAAI,CAAC,GAAG,EAAE,IAAI,CAOhB,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// type ConvertUndefined<T> = OrUndefined<{ [K in keyof T as undefined extends T[K] ? K : never]-?: T[K] }>
|
|
2
|
+
// type OrUndefined<T> = { [K in keyof T]: T[K] | undefined }
|
|
3
|
+
// type PickRequired<T> = { [K in keyof T as undefined extends T[K] ? never : K]: T[K] }
|
|
4
|
+
// type ConvertPick<T> = ConvertUndefined<T> & PickRequired<T>
|
|
5
|
+
/** Returns a shallowly cloned object with the provided keys omitted */
|
|
6
|
+
export const omit = (obj, keys) => {
|
|
7
|
+
return Object.keys(obj).reduce((acc, key) => {
|
|
8
|
+
if (!keys.includes(key)) {
|
|
9
|
+
acc[key] = obj[key];
|
|
10
|
+
}
|
|
11
|
+
return acc;
|
|
12
|
+
}, {});
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=omit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omit.js","sourceRoot":"","sources":["../../src/object/omit.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAC3G,6DAA6D;AAC7D,wFAAwF;AACxF,8DAA8D;AAE9D,uEAAuE;AACvE,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,GAAQ,EACR,IAAY,EACK,EAAE;IACnB,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAQ,EAAE,EAAE;QAC/C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,GAAG,CAAC,GAAI,GAAW,CAAC,GAAG,CAAC,CAAA;QAC9B,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE,EAAS,CAAC,CAAA;AACf,CAAC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type ConvertUndefined<T> = OrUndefined<{
|
|
2
|
+
[K in keyof T as undefined extends T[K] ? K : never]-?: T[K];
|
|
3
|
+
}>;
|
|
4
|
+
type OrUndefined<T> = {
|
|
5
|
+
[K in keyof T]: T[K] | undefined;
|
|
6
|
+
};
|
|
7
|
+
type PickRequired<T> = {
|
|
8
|
+
[K in keyof T as undefined extends T[K] ? never : K]: T[K];
|
|
9
|
+
};
|
|
10
|
+
type ConvertPick<T> = ConvertUndefined<T> & PickRequired<T>;
|
|
11
|
+
export declare const pick: <Obj, Keys extends keyof Obj>(obj: Obj, keys: Keys[]) => ConvertPick<{ [K in Keys]: Obj[K]; }>;
|
|
12
|
+
export declare const pickAllOrElse: <Obj, Keys extends keyof Obj, TElse>(obj: Obj, keys: Keys[], elseValue: TElse) => ConvertPick<{ [K in Keys]: NonNullable<Obj[K]>; }> | TElse;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=pick.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pick.d.ts","sourceRoot":"","sources":["../../src/object/pick.ts"],"names":[],"mappings":"AAAA,KAAK,gBAAgB,CAAC,CAAC,IAAI,WAAW,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,CAAA;AACxG,KAAK,WAAW,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;CAAE,CAAA;AAC1D,KAAK,YAAY,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA;AACrF,KAAK,WAAW,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;AAE3D,eAAO,MAAM,IAAI,GAAI,GAAG,EAAE,IAAI,SAAS,MAAM,GAAG,OAAO,GAAG,QAAQ,IAAI,EAAE,KAAG,WAAW,CAAC,GAAG,CAAS,IAAJ,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAE,CAK7G,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,GAAG,EAAE,IAAI,SAAS,MAAM,GAAG,EAAE,KAAK,OACzD,GAAG,QACF,IAAI,EAAE,aACD,KAAK,KACf,WAAW,CAAC,GAAG,CAAS,IAAJ,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,GAAG,KAUtD,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const pick = (obj, keys) => {
|
|
2
|
+
return keys.reduce((acc, key) => {
|
|
3
|
+
acc[key] = obj[key];
|
|
4
|
+
return acc;
|
|
5
|
+
}, {});
|
|
6
|
+
};
|
|
7
|
+
export const pickAllOrElse = (obj, keys, elseValue) => {
|
|
8
|
+
const ret = {};
|
|
9
|
+
for (const key of keys) {
|
|
10
|
+
if (obj[key] === undefined) {
|
|
11
|
+
return elseValue;
|
|
12
|
+
}
|
|
13
|
+
ret[key] = obj[key];
|
|
14
|
+
}
|
|
15
|
+
return ret;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=pick.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pick.js","sourceRoot":"","sources":["../../src/object/pick.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,IAAI,GAAG,CAA8B,GAAQ,EAAE,IAAY,EAAwC,EAAE;IAChH,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;QACnB,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE,EAAS,CAAC,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,GAAQ,EACR,IAAY,EACZ,SAAgB,EAC2C,EAAE;IAC7D,MAAM,GAAG,GAAG,EAAS,CAAA;IACrB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;IACrB,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Promise.all + Array.map */
|
|
2
|
+
export declare const promiseMap: <T, Res>(arr: T[], map: (el: T, index?: number) => Res | Promise<Res>) => Promise<(Awaited<Res> | Awaited<Res>)[]>;
|
|
3
|
+
export declare const promiseMapDict: <T, Res>(dict: Record<string, T>, map: (el: T, index?: number) => Res | Promise<Res>) => Promise<Record<string, Res>>;
|
|
4
|
+
export declare const promiseMapToDict: <T, Res>(arr: T[], mapValue: (el: T, index?: number) => Res | Promise<Res>, mapKey: (el: T, index?: number) => string) => Promise<Record<string, Res>>;
|
|
5
|
+
export declare const promiseMapPool: <T, Res>(arr: T[], map: (el: T, index?: number) => Promise<Res>, poolLimit: number) => Promise<Res[]>;
|
|
6
|
+
//# sourceMappingURL=promise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../src/promise.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,6CACpE,CAAA;AAE3B,eAAO,MAAM,cAAc,GAAU,CAAC,EAAE,GAAG,QACnC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAClB,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KACjD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAG7B,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAU,CAAC,EAAE,GAAG,OACtC,CAAC,EAAE,YACE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAC/C,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,KACxC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAI7B,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,CAAC,EAAE,GAAG,OACpC,CAAC,EAAE,OACH,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,aACjC,MAAM,KAChB,OAAO,CAAC,GAAG,EAAE,CAgBf,CAAA"}
|
package/dist/promise.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Promise.all + Array.map */
|
|
2
|
+
export const promiseMap = (arr, map) => Promise.all(arr.map(map));
|
|
3
|
+
export const promiseMapDict = async (dict, map) => {
|
|
4
|
+
const mappedEntries = await Promise.all(Object.entries(dict).map(async ([key, val]) => [key, await map(val)]));
|
|
5
|
+
return Object.fromEntries(mappedEntries);
|
|
6
|
+
};
|
|
7
|
+
export const promiseMapToDict = async (arr, mapValue, mapKey) => {
|
|
8
|
+
const mappedEntries = await Promise.all(arr.map(async (el, index) => [mapKey(el, index), await mapValue(el, index)]));
|
|
9
|
+
return Object.fromEntries(mappedEntries);
|
|
10
|
+
};
|
|
11
|
+
export const promiseMapPool = async (arr, map, poolLimit) => {
|
|
12
|
+
const ret = [];
|
|
13
|
+
const executing = [];
|
|
14
|
+
for (const [index, item] of arr.entries()) {
|
|
15
|
+
const p = Promise.resolve().then(() => map(item, index));
|
|
16
|
+
ret.push(p);
|
|
17
|
+
if (poolLimit <= arr.length) {
|
|
18
|
+
const e = p.then(() => executing.splice(executing.indexOf(e), 1));
|
|
19
|
+
executing.push(e);
|
|
20
|
+
if (executing.length >= poolLimit) {
|
|
21
|
+
await Promise.race(executing);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return Promise.all(ret);
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=promise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../src/promise.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAS,GAAQ,EAAE,GAAkD,EAAE,EAAE,CACjG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AAE3B,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,IAAuB,EACvB,GAAkD,EACpB,EAAE;IAChC,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9G,OAAO,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;AAC1C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,GAAQ,EACR,QAAuD,EACvD,MAAyC,EACX,EAAE;IAChC,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAErH,OAAO,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;AAC1C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,GAAQ,EACR,GAA4C,EAC5C,SAAiB,EACD,EAAE;IAClB,MAAM,GAAG,GAAmB,EAAE,CAAA;IAC9B,MAAM,SAAS,GAAmB,EAAE,CAAA;IACpC,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;QACxD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAEX,IAAI,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACtE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;gBAClC,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AACzB,CAAC,CAAA"}
|
package/dist/set.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../src/set.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,WASjD,CAAA"}
|
package/dist/set.js
ADDED
package/dist/set.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.js","sourceRoot":"","sources":["../src/set.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,CAAS,EAAE,CAAS,EAAE,EAAE;IACpD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAK,CAAA;IACzB,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAChB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
|
package/dist/string.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const lowercaseFirstChar: (str: string) => string;
|
|
2
|
+
export declare const uppercaseFirstChar: (str: string) => string;
|
|
3
|
+
/** Indents a string each line by `n` characters (default: spaces) */
|
|
4
|
+
export declare const indent: (str: string, n: number, char?: string) => string;
|
|
5
|
+
//# sourceMappingURL=string.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,QAAS,MAAM,WAA+C,CAAA;AAC7F,eAAO,MAAM,kBAAkB,QAAS,MAAM,WAA+C,CAAA;AAE7F,qEAAqE;AACrE,eAAO,MAAM,MAAM,QAAS,MAAM,KAAK,MAAM,oBAAe,MAI7C,CAAA"}
|
package/dist/string.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const lowercaseFirstChar = (str) => str.charAt(0).toLowerCase() + str.slice(1);
|
|
2
|
+
export const uppercaseFirstChar = (str) => str.charAt(0).toUpperCase() + str.slice(1);
|
|
3
|
+
/** Indents a string each line by `n` characters (default: spaces) */
|
|
4
|
+
export const indent = (str, n, char = ' ') => str
|
|
5
|
+
.split('\n')
|
|
6
|
+
.map((line) => char.repeat(n) + line)
|
|
7
|
+
.join('\n');
|
|
8
|
+
//# sourceMappingURL=string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC7F,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAE7F,qEAAqE;AACrE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,CAAS,EAAE,IAAI,GAAG,GAAG,EAAU,EAAE,CACnE,GAAG;KACA,KAAK,CAAC,IAAI,CAAC;KACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;KACpC,IAAI,CAAC,IAAI,CAAC,CAAA"}
|
package/dist/time.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const minuteInMs: number;
|
|
2
|
+
export declare const time: {
|
|
3
|
+
ms: number;
|
|
4
|
+
sec: number;
|
|
5
|
+
min: number;
|
|
6
|
+
hour: number;
|
|
7
|
+
day: number;
|
|
8
|
+
week: number;
|
|
9
|
+
};
|
|
10
|
+
/** Returns a string of format `m:ss` / `mm:ss` / `h:mm:ss` / ... */
|
|
11
|
+
export declare const msAsTimeString: (ms: number) => string;
|
|
12
|
+
//# sourceMappingURL=time.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../src/time.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,QAAY,CAAA;AAEnC,eAAO,MAAM,IAAI;;;;;;;CAOhB,CAAA;AAED,oEAAoE;AACpE,eAAO,MAAM,cAAc,OAAQ,MAAM,WAYxC,CAAA"}
|
package/dist/time.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const minuteInMs = 1000 * 60;
|
|
2
|
+
export const time = {
|
|
3
|
+
ms: 1,
|
|
4
|
+
sec: 1000,
|
|
5
|
+
min: 60 * 1000,
|
|
6
|
+
hour: 60 * 60 * 1000,
|
|
7
|
+
day: 24 * 60 * 60 * 1000,
|
|
8
|
+
week: 7 * 24 * 60 * 60 * 1000,
|
|
9
|
+
};
|
|
10
|
+
/** Returns a string of format `m:ss` / `mm:ss` / `h:mm:ss` / ... */
|
|
11
|
+
export const msAsTimeString = (ms) => {
|
|
12
|
+
const seconds = Math.floor(ms / 1000);
|
|
13
|
+
const minutes = Math.floor(seconds / 60);
|
|
14
|
+
const hours = Math.floor(minutes / 60);
|
|
15
|
+
const remainingSeconds = (seconds % 60).toString().padStart(2, '0');
|
|
16
|
+
const remainingMinutes = hours > 0 ? (minutes % 60).toString().padStart(2, '0') : minutes % 60;
|
|
17
|
+
const timeString = [hours > 0 ? `${hours}:` : '', `${remainingMinutes}:`, `${remainingSeconds}`]
|
|
18
|
+
.filter((val) => val !== '')
|
|
19
|
+
.join('');
|
|
20
|
+
return timeString;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=time.js.map
|
package/dist/time.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../src/time.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAE,CAAA;AAEnC,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,EAAE,EAAE,CAAC;IACL,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,EAAE,GAAG,IAAI;IACd,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;IACpB,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IACxB,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;CAC9B,CAAA;AAED,oEAAoE;AACpE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAU,EAAE,EAAE;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IACtC,MAAM,gBAAgB,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACnE,MAAM,gBAAgB,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAA;IAE9F,MAAM,UAAU,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,gBAAgB,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC;SAC7F,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC;SAC3B,IAAI,CAAC,EAAE,CAAC,CAAA;IAEX,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@livestore/utils",
|
|
3
|
+
"version": "0.0.0-snapshot-909cdd1ac2fd591945c2be2b0f53e14d87f3c9d4",
|
|
4
|
+
"sideEffects": [
|
|
5
|
+
"./dist/global.js"
|
|
6
|
+
],
|
|
7
|
+
"type": "module",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./cuid": {
|
|
14
|
+
"types": "./dist/cuid/cuid.node.d.ts",
|
|
15
|
+
"node": "./dist/cuid/cuid.node.js",
|
|
16
|
+
"react-native": "./dist/cuid/cuid.browser.js",
|
|
17
|
+
"browser": "./dist/cuid/cuid.browser.js"
|
|
18
|
+
},
|
|
19
|
+
"./nanoid": {
|
|
20
|
+
"types": "./dist/nanoid/index.d.ts",
|
|
21
|
+
"default": "./dist/nanoid/index.js"
|
|
22
|
+
},
|
|
23
|
+
"./effect": {
|
|
24
|
+
"types": "./dist/effect/index.d.ts",
|
|
25
|
+
"default": "./dist/effect/index.js"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"react-native": "./dist/index.js",
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"typesVersions": {
|
|
31
|
+
"*": {
|
|
32
|
+
"./cuid": [
|
|
33
|
+
"./dist/cuid/cuid.node.d.ts"
|
|
34
|
+
],
|
|
35
|
+
"./nanoid": [
|
|
36
|
+
"./dist/nanoid/index.d.ts"
|
|
37
|
+
],
|
|
38
|
+
"effect": [
|
|
39
|
+
"./dist/effect"
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"msgpackr": "^1.11.2",
|
|
45
|
+
"nanoid": "^5.0.7",
|
|
46
|
+
"pretty-bytes": "^6.1.1",
|
|
47
|
+
"@livestore/db-schema": "0.0.0-snapshot-909cdd1ac2fd591945c2be2b0f53e14d87f3c9d4"
|
|
48
|
+
},
|
|
49
|
+
"peerDependencies": {
|
|
50
|
+
"@effect/experimental": "^0.30.13",
|
|
51
|
+
"@effect/opentelemetry": "^0.39.7",
|
|
52
|
+
"@effect/platform": "^0.69.12",
|
|
53
|
+
"@effect/platform-browser": "^0.48.12",
|
|
54
|
+
"@opentelemetry/api": "^1.9.0",
|
|
55
|
+
"effect": "^3.10.7"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@effect/experimental": "0.30.13",
|
|
59
|
+
"@effect/opentelemetry": "0.39.7",
|
|
60
|
+
"@effect/platform": "0.69.12",
|
|
61
|
+
"@effect/platform-browser": "0.48.12",
|
|
62
|
+
"@opentelemetry/api": "^1.9.0",
|
|
63
|
+
"@types/node": "^22.8.5",
|
|
64
|
+
"@types/web": "^0.0.175",
|
|
65
|
+
"effect": "3.10.7",
|
|
66
|
+
"vitest": "^2.1.4"
|
|
67
|
+
},
|
|
68
|
+
"publishConfig": {
|
|
69
|
+
"access": "public"
|
|
70
|
+
},
|
|
71
|
+
"scripts": {
|
|
72
|
+
"test": "vitest"
|
|
73
|
+
}
|
|
74
|
+
}
|
package/src/Deferred.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export class Deferred<T> {
|
|
2
|
+
private readonly _promise: Promise<T>
|
|
3
|
+
private _resolve!: (value: T | PromiseLike<T>) => void
|
|
4
|
+
private _reject!: (reason: any) => void
|
|
5
|
+
|
|
6
|
+
constructor() {
|
|
7
|
+
this._promise = new Promise<T>((resolve, reject) => {
|
|
8
|
+
this._resolve = resolve
|
|
9
|
+
this._reject = reject
|
|
10
|
+
})
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
get promise(): Promise<T> {
|
|
14
|
+
return this._promise
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
resolve = (value: T | PromiseLike<T>): void => {
|
|
18
|
+
this._resolve(value)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
reject = (reason?: any): void => {
|
|
22
|
+
this._reject(reason)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/* eslint-disable prefer-arrow/prefer-arrow-functions */
|
|
2
|
+
import type * as otel from '@opentelemetry/api'
|
|
3
|
+
|
|
4
|
+
export const makeNoopSpan = () => {
|
|
5
|
+
const performanceStartTime: DOMHighResTimeStamp = performance.now()
|
|
6
|
+
|
|
7
|
+
const span = {
|
|
8
|
+
_performanceStartTime: performanceStartTime,
|
|
9
|
+
setAttribute: () => null,
|
|
10
|
+
setAttributes: () => null,
|
|
11
|
+
addEvent: () => null,
|
|
12
|
+
setStatus: () => null,
|
|
13
|
+
updateName: () => null,
|
|
14
|
+
recordException: () => null,
|
|
15
|
+
end: () => {
|
|
16
|
+
const endTime: DOMHighResTimeStamp = performance.now()
|
|
17
|
+
const duration = endTime - performanceStartTime
|
|
18
|
+
const durationSecs = duration / 1000
|
|
19
|
+
const durationRestNs = (duration % 1000) * 1_000_000
|
|
20
|
+
;(span as any)._duration = [durationSecs, durationRestNs]
|
|
21
|
+
},
|
|
22
|
+
spanContext: () => {
|
|
23
|
+
return { traceId: 'noop-trace-id', spanId: 'noop-span-id' }
|
|
24
|
+
},
|
|
25
|
+
_duration: [0, 0],
|
|
26
|
+
} as unknown as otel.Span
|
|
27
|
+
|
|
28
|
+
return span
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const makeNoopTracer = () => {
|
|
32
|
+
return new NoopTracer() as unknown as otel.Tracer
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export class NoopTracer {
|
|
36
|
+
startSpan = () => makeNoopSpan()
|
|
37
|
+
|
|
38
|
+
startActiveSpan<F extends (span: otel.Span) => ReturnType<F>>(name: string, fn: F): ReturnType<F>
|
|
39
|
+
startActiveSpan<F extends (span: otel.Span) => ReturnType<F>>(
|
|
40
|
+
name: string,
|
|
41
|
+
opts: otel.SpanOptions,
|
|
42
|
+
fn: F,
|
|
43
|
+
): ReturnType<F>
|
|
44
|
+
startActiveSpan<F extends (span: otel.Span) => ReturnType<F>>(
|
|
45
|
+
name: string,
|
|
46
|
+
opts: otel.SpanOptions,
|
|
47
|
+
ctx: otel.Context,
|
|
48
|
+
fn: F,
|
|
49
|
+
): ReturnType<F>
|
|
50
|
+
startActiveSpan<F extends (span: otel.Span) => ReturnType<F>>(
|
|
51
|
+
name: string,
|
|
52
|
+
arg2?: F | otel.SpanOptions,
|
|
53
|
+
arg3?: F | otel.Context,
|
|
54
|
+
arg4?: F,
|
|
55
|
+
): ReturnType<F> | undefined {
|
|
56
|
+
let _opts: otel.SpanOptions | undefined
|
|
57
|
+
let _ctx: otel.Context | undefined
|
|
58
|
+
let fn: F
|
|
59
|
+
|
|
60
|
+
if (arguments.length < 2) {
|
|
61
|
+
return
|
|
62
|
+
} else if (arguments.length === 2) {
|
|
63
|
+
fn = arg2 as F
|
|
64
|
+
} else if (arguments.length === 3) {
|
|
65
|
+
_opts = arg2 as otel.SpanOptions | undefined
|
|
66
|
+
fn = arg3 as F
|
|
67
|
+
} else {
|
|
68
|
+
_opts = arg2 as otel.SpanOptions | undefined
|
|
69
|
+
_ctx = arg3 as otel.Context | undefined
|
|
70
|
+
fn = arg4 as F
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return fn(makeNoopSpan())
|
|
74
|
+
}
|
|
75
|
+
}
|
package/src/ambient.d.ts
ADDED
package/src/base64.ts
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
|
|
2
|
+
// This module is browser compatible.
|
|
3
|
+
// https://deno.land/std/encoding/base64.ts
|
|
4
|
+
|
|
5
|
+
const base64abc = [
|
|
6
|
+
'A',
|
|
7
|
+
'B',
|
|
8
|
+
'C',
|
|
9
|
+
'D',
|
|
10
|
+
'E',
|
|
11
|
+
'F',
|
|
12
|
+
'G',
|
|
13
|
+
'H',
|
|
14
|
+
'I',
|
|
15
|
+
'J',
|
|
16
|
+
'K',
|
|
17
|
+
'L',
|
|
18
|
+
'M',
|
|
19
|
+
'N',
|
|
20
|
+
'O',
|
|
21
|
+
'P',
|
|
22
|
+
'Q',
|
|
23
|
+
'R',
|
|
24
|
+
'S',
|
|
25
|
+
'T',
|
|
26
|
+
'U',
|
|
27
|
+
'V',
|
|
28
|
+
'W',
|
|
29
|
+
'X',
|
|
30
|
+
'Y',
|
|
31
|
+
'Z',
|
|
32
|
+
'a',
|
|
33
|
+
'b',
|
|
34
|
+
'c',
|
|
35
|
+
'd',
|
|
36
|
+
'e',
|
|
37
|
+
'f',
|
|
38
|
+
'g',
|
|
39
|
+
'h',
|
|
40
|
+
'i',
|
|
41
|
+
'j',
|
|
42
|
+
'k',
|
|
43
|
+
'l',
|
|
44
|
+
'm',
|
|
45
|
+
'n',
|
|
46
|
+
'o',
|
|
47
|
+
'p',
|
|
48
|
+
'q',
|
|
49
|
+
'r',
|
|
50
|
+
's',
|
|
51
|
+
't',
|
|
52
|
+
'u',
|
|
53
|
+
'v',
|
|
54
|
+
'w',
|
|
55
|
+
'x',
|
|
56
|
+
'y',
|
|
57
|
+
'z',
|
|
58
|
+
'0',
|
|
59
|
+
'1',
|
|
60
|
+
'2',
|
|
61
|
+
'3',
|
|
62
|
+
'4',
|
|
63
|
+
'5',
|
|
64
|
+
'6',
|
|
65
|
+
'7',
|
|
66
|
+
'8',
|
|
67
|
+
'9',
|
|
68
|
+
'+',
|
|
69
|
+
'/',
|
|
70
|
+
]
|
|
71
|
+
|
|
72
|
+
const textEncoder = new TextEncoder()
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727
|
|
76
|
+
* Encodes a given Uint8Array, ArrayBuffer or string into RFC4648 base64 representation
|
|
77
|
+
* @param data
|
|
78
|
+
*/
|
|
79
|
+
export const encode = (data: ArrayBuffer | string): string => {
|
|
80
|
+
const uint8 =
|
|
81
|
+
typeof data === 'string' ? textEncoder.encode(data) : data instanceof Uint8Array ? data : new Uint8Array(data)
|
|
82
|
+
let result = '',
|
|
83
|
+
i
|
|
84
|
+
const l = uint8.length
|
|
85
|
+
for (i = 2; i < l; i += 3) {
|
|
86
|
+
result += base64abc[uint8[i - 2]! >> 2]
|
|
87
|
+
result += base64abc[((uint8[i - 2]! & 0x03) << 4) | (uint8[i - 1]! >> 4)]
|
|
88
|
+
result += base64abc[((uint8[i - 1]! & 0x0f) << 2) | (uint8[i]! >> 6)]
|
|
89
|
+
result += base64abc[uint8[i]! & 0x3f]
|
|
90
|
+
}
|
|
91
|
+
if (i === l + 1) {
|
|
92
|
+
// 1 octet yet to write
|
|
93
|
+
result += base64abc[uint8[i - 2]! >> 2]
|
|
94
|
+
result += base64abc[(uint8[i - 2]! & 0x03) << 4]
|
|
95
|
+
result += '=='
|
|
96
|
+
}
|
|
97
|
+
if (i === l) {
|
|
98
|
+
// 2 octets yet to write
|
|
99
|
+
result += base64abc[uint8[i - 2]! >> 2]
|
|
100
|
+
result += base64abc[((uint8[i - 2]! & 0x03) << 4) | (uint8[i - 1]! >> 4)]
|
|
101
|
+
result += base64abc[(uint8[i - 1]! & 0x0f) << 2]
|
|
102
|
+
result += '='
|
|
103
|
+
}
|
|
104
|
+
return result
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Decodes a given RFC4648 base64 encoded string
|
|
109
|
+
* @param b64
|
|
110
|
+
*/
|
|
111
|
+
export const decode = (b64: string): Uint8Array => {
|
|
112
|
+
const binString = atob(b64)
|
|
113
|
+
const size = binString.length
|
|
114
|
+
const bytes = new Uint8Array(size)
|
|
115
|
+
for (let i = 0; i < size; i++) {
|
|
116
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
117
|
+
bytes[i] = binString.charCodeAt(i)
|
|
118
|
+
}
|
|
119
|
+
return bytes
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const textDecoder = new TextDecoder()
|
|
123
|
+
export const decodeToString = (b64: string): string => textDecoder.decode(decode(b64))
|
package/src/browser.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type DetectedBrowser = 'Something' | 'Opera' | 'Chrome' | 'Safari' | 'Firefox' | 'Edge' | 'Browser'
|
|
2
|
+
|
|
3
|
+
export const detectBrowserName: () => DetectedBrowser = () => {
|
|
4
|
+
if (!navigator.userAgent) {
|
|
5
|
+
return 'Something'
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const isOpera = navigator.userAgent.includes('OP')
|
|
9
|
+
const isChrome = navigator.userAgent.includes('Chrome') && !isOpera
|
|
10
|
+
const isSafari = navigator.userAgent.includes('Safari') && !isChrome
|
|
11
|
+
const isFirefox = navigator.userAgent.includes('Firefox')
|
|
12
|
+
const isEdge = navigator.userAgent.includes('Edg') || navigator.userAgent.includes('Trident')
|
|
13
|
+
|
|
14
|
+
// TODO: also parse out version
|
|
15
|
+
|
|
16
|
+
if (isOpera) {
|
|
17
|
+
return 'Opera'
|
|
18
|
+
}
|
|
19
|
+
if (isChrome) {
|
|
20
|
+
return 'Chrome'
|
|
21
|
+
}
|
|
22
|
+
if (isSafari) {
|
|
23
|
+
return 'Safari'
|
|
24
|
+
}
|
|
25
|
+
if (isFirefox) {
|
|
26
|
+
return 'Firefox'
|
|
27
|
+
}
|
|
28
|
+
if (isEdge) {
|
|
29
|
+
return 'Edge'
|
|
30
|
+
}
|
|
31
|
+
return 'Browser'
|
|
32
|
+
}
|