effect-app 2.33.1 → 2.35.0
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/CHANGELOG.md +20 -0
- package/dist/faker.d.ts +1 -1
- package/dist/faker.d.ts.map +1 -1
- package/dist/faker.js +4 -5
- package/dist/http/Request.d.ts +1 -1
- package/dist/http/Request.d.ts.map +1 -1
- package/dist/utils/logger.d.ts +4 -2
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +6 -3
- package/package.json +6 -6
- package/src/faker.ts +9 -9
- package/src/utils/logger.ts +6 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @effect-app/prelude
|
|
2
2
|
|
|
3
|
+
## 2.35.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- f38e31f: make LogLevels readonly
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- f30b57e: fix faker and rebuild dts
|
|
12
|
+
|
|
13
|
+
## 2.34.0
|
|
14
|
+
|
|
15
|
+
### Minor Changes
|
|
16
|
+
|
|
17
|
+
- 64d3a54: refactor: replace custom FiberRefs with Context.Reference in preparation of Effect v4
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- 771ac45: update packages
|
|
22
|
+
|
|
3
23
|
## 2.33.1
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
package/dist/faker.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Faker } from "@faker-js/faker";
|
|
2
|
-
import
|
|
2
|
+
import * as FC from "fast-check";
|
|
3
3
|
export declare function setFaker(f: Faker): void;
|
|
4
4
|
export declare function getFaker(): Faker;
|
|
5
5
|
export declare const fakerToArb: <T>(fakerGen: () => T) => (fc: typeof FC) => FC.Arbitrary<T>;
|
package/dist/faker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"faker.d.ts","sourceRoot":"","sources":["../src/faker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"faker.d.ts","sourceRoot":"","sources":["../src/faker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,EAAE,MAAM,YAAY,CAAA;AAOhC,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,QAEhC;AAED,wBAAgB,QAAQ,UAGvB;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,UAAU,MAAM,CAAC,MAAM,IAAI,OAAO,EAAE,oBASjE,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,EACxB,KAAK,CAAC,IAAI,EAAE,KAAK,KAAK,MAAM,CAAC,KAC5B,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAwC,CAAA"}
|
package/dist/faker.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as FC from "fast-check";
|
|
1
2
|
// TODO: inject faker differently, so we dont care about multiple instances of library.
|
|
2
3
|
// eslint-disable-next-line prefer-const
|
|
3
4
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -11,14 +12,12 @@ export function getFaker() {
|
|
|
11
12
|
return faker;
|
|
12
13
|
}
|
|
13
14
|
export const fakerToArb = (fakerGen) => (fc) => {
|
|
14
|
-
return fc
|
|
15
|
+
return FC.noBias(FC.noShrink(fc
|
|
15
16
|
.integer()
|
|
16
|
-
.noBias() // same probability to generate each of the allowed integers
|
|
17
|
-
.noShrink() // shrink on a seed makes no sense
|
|
18
17
|
.map((seed) => {
|
|
19
18
|
faker.seed(seed); // seed the generator
|
|
20
19
|
return fakerGen(); // call it
|
|
21
|
-
});
|
|
20
|
+
})));
|
|
22
21
|
};
|
|
23
22
|
export const fakerArb = (gen) => fakerToArb(() => gen(getFaker())());
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZmFrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFaEMsdUZBQXVGO0FBRXZGLHdDQUF3QztBQUN4Qyw4REFBOEQ7QUFDOUQsSUFBSSxLQUFLLEdBQVUsU0FBeUIsQ0FBQTtBQUM1QyxNQUFNLFVBQVUsUUFBUSxDQUFDLENBQVE7SUFDL0IsS0FBSyxHQUFHLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUTtJQUN0QixJQUFJLENBQUMsS0FBSztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtJQUMvRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBSSxRQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQWEsRUFBRSxFQUFFO0lBQ3BFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUMxQixFQUFFO1NBQ0MsT0FBTyxFQUFFO1NBQ1QsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDWixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMscUJBQXFCO1FBQ3RDLE9BQU8sUUFBUSxFQUFFLENBQUEsQ0FBQyxVQUFVO0lBQzlCLENBQUMsQ0FBQyxDQUNMLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUN0QixHQUE2QixFQUNBLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBIn0=
|
package/dist/http/Request.d.ts
CHANGED
|
@@ -5,5 +5,5 @@ export interface ResponseWithBody<A> extends Pick<HttpClientResponse, "headers"
|
|
|
5
5
|
readonly body: A;
|
|
6
6
|
}
|
|
7
7
|
export declare const responseWithJsonBody: (response: HttpClientResponse) => Effect.Effect<ResponseWithBody<unknown>, HttpClientError.ResponseError, never>;
|
|
8
|
-
export declare const demandJson: (client: HttpClient.HttpClient) => HttpClient.HttpClient.With<HttpClientError.HttpClientError,
|
|
8
|
+
export declare const demandJson: (client: HttpClient.HttpClient) => HttpClient.HttpClient.With<HttpClientError.HttpClientError, never>;
|
|
9
9
|
//# sourceMappingURL=Request.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../src/http/Request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAA;AAC7E,OAAO,EAAE,MAAM,EAAU,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAkC,MAAM,mBAAmB,CAAA;AAE/F,MAAM,WAAW,gBAAgB,CAAC,CAAC,CAAE,SAAQ,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,QAAQ,GAAG,eAAe,CAAC;IAC3G,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;CACjB;AAKD,eAAO,MAAM,oBAAoB,GAC/B,UAAU,kBAAkB,mFAOzB,CAAA;AAEL,eAAO,MAAM,UAAU,GAAI,QAAQ,UAAU,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../src/http/Request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAA;AAC7E,OAAO,EAAE,MAAM,EAAU,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAkC,MAAM,mBAAmB,CAAA;AAE/F,MAAM,WAAW,gBAAgB,CAAC,CAAC,CAAE,SAAQ,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,QAAQ,GAAG,eAAe,CAAC;IAC3G,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;CACjB;AAKD,eAAO,MAAM,oBAAoB,GAC/B,UAAU,kBAAkB,mFAOzB,CAAA;AAEL,eAAO,MAAM,UAAU,GAAI,QAAQ,UAAU,CAAC,UAAU,uEAmBlD,CAAA"}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { LogLevel } from "effect";
|
|
2
|
-
import {
|
|
2
|
+
import { Context, Effect } from "effect";
|
|
3
3
|
type Levels = "info" | "debug" | "warn" | "error";
|
|
4
|
-
|
|
4
|
+
declare const LogLevels_base: Context.ReferenceClass<LogLevels, "LogLevels", ReadonlyMap<string, Levels>>;
|
|
5
|
+
export declare class LogLevels extends LogLevels_base {
|
|
6
|
+
}
|
|
5
7
|
export declare const makeLog: (namespace: string, defaultLevel?: Levels) => {
|
|
6
8
|
logWarning: (...message: ReadonlyArray<any>) => Effect.Effect<void, never, never>;
|
|
7
9
|
logError: (...message: ReadonlyArray<any>) => Effect.Effect<void, never, never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAExC,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAA;;AAEjD,qBAAa,SAAU,SAAQ,cAE7B;CAAG;AAEL,eAAO,MAAM,OAAO,GAAI,WAAW,MAAM,EAAE,eAAc,MAAe;6BAI3C,aAAa,CAAC,GAAG,CAAC;2BAQpB,aAAa,CAAC,GAAG,CAAC;2BAClB,aAAa,CAAC,GAAG,CAAC;0BACnB,aAAa,CAAC,GAAG,CAAC;2BAMjB,aAAa,CAAC,GAAG,CAAC;0BAKnB,QAAQ,CAAC,QAAQ,cAAc,aAAa,CAAC,GAAG,CAAC;CAG1E,CAAA"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
-
import {
|
|
4
|
-
export
|
|
3
|
+
import { Context, Effect } from "effect";
|
|
4
|
+
export class LogLevels extends Context.Reference()("LogLevels", {
|
|
5
|
+
defaultValue: () => new Map()
|
|
6
|
+
}) {
|
|
7
|
+
}
|
|
5
8
|
export const makeLog = (namespace, defaultLevel = "warn") => {
|
|
6
9
|
const level = LogLevels.pipe(Effect.andThen((levels) => levels.get(namespace) ?? defaultLevel));
|
|
7
10
|
const withLogNamespace = Effect.annotateLogs({ logNamespace: namespace });
|
|
@@ -17,4 +20,4 @@ export const makeLog = (namespace, defaultLevel = "warn") => {
|
|
|
17
20
|
logWithLevel: (level, ...message) => Effect.logWithLevel(level, ...message).pipe(withLogNamespace)
|
|
18
21
|
};
|
|
19
22
|
};
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQ7QUFDMUQsdURBQXVEO0FBR3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBSXhDLE1BQU0sT0FBTyxTQUFVLFNBQVEsT0FBTyxDQUFDLFNBQVMsRUFBYSxDQUFDLFdBQVcsRUFBRTtJQUN6RSxZQUFZLEVBQUUsR0FBZ0MsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFrQjtDQUMzRSxDQUFDO0NBQUc7QUFFTCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxTQUFpQixFQUFFLGVBQXVCLE1BQU0sRUFBRSxFQUFFO0lBQzFFLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFBO0lBQy9GLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQ3pFLE9BQU87UUFDTCxVQUFVLEVBQUUsQ0FBQyxHQUFHLE9BQTJCLEVBQUUsRUFBRSxDQUM3QyxLQUFLLENBQUMsSUFBSSxDQUNSLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNuQixDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxLQUFLLE1BQU07WUFDM0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDdEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2hCLENBQ0Y7UUFDSCxRQUFRLEVBQUUsQ0FBQyxHQUFHLE9BQTJCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDaEcsUUFBUSxFQUFFLENBQUMsR0FBRyxPQUEyQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ2hHLE9BQU8sRUFBRSxDQUFDLEdBQUcsT0FBMkIsRUFBRSxFQUFFLENBQzFDLEtBQUssQ0FBQyxJQUFJLENBQ1IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ25CLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNoRyxDQUNGO1FBQ0gsUUFBUSxFQUFFLENBQUMsR0FBRyxPQUEyQixFQUFFLEVBQUUsQ0FDM0MsS0FBSyxDQUFDLElBQUksQ0FDUixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FDeEc7UUFDSCxxQkFBcUI7UUFDckIsWUFBWSxFQUFFLENBQUMsS0FBd0IsRUFBRSxHQUFHLE9BQTJCLEVBQUUsRUFBRSxDQUN6RSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztLQUNoRSxDQUFBO0FBQ0gsQ0FBQyxDQUFBIn0=
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "effect-app",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.35.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@effect/rpc": "^0.
|
|
8
|
-
"@effect/rpc-http": "^0.
|
|
7
|
+
"@effect/rpc": "^0.54.1",
|
|
8
|
+
"@effect/rpc-http": "^0.52.1",
|
|
9
9
|
"@tsconfig/strictest": "^2.0.5",
|
|
10
10
|
"date-fns": "^4.1.0",
|
|
11
11
|
"nanoid": "^5.1.3",
|
|
@@ -27,13 +27,13 @@
|
|
|
27
27
|
"@types/node": "~22.13.10",
|
|
28
28
|
"@types/uuid": "^10.0.0",
|
|
29
29
|
"@types/validator": "^13.12.2",
|
|
30
|
-
"fast-check": "~
|
|
30
|
+
"fast-check": "~4.0.0",
|
|
31
31
|
"typescript": "^5.8.2",
|
|
32
32
|
"vitest": "^3.0.8"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
35
|
-
"@effect/platform": "^0.
|
|
36
|
-
"effect": "^3.13.
|
|
35
|
+
"@effect/platform": "^0.79.1",
|
|
36
|
+
"effect": "^3.13.10"
|
|
37
37
|
},
|
|
38
38
|
"typesVersions": {
|
|
39
39
|
"*": {
|
package/src/faker.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// FILE HAS SIDE EFFECTS!
|
|
2
2
|
import type { Faker } from "@faker-js/faker"
|
|
3
|
-
import
|
|
3
|
+
import * as FC from "fast-check"
|
|
4
4
|
|
|
5
5
|
// TODO: inject faker differently, so we dont care about multiple instances of library.
|
|
6
6
|
|
|
@@ -17,14 +17,14 @@ export function getFaker() {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export const fakerToArb = <T>(fakerGen: () => T) => (fc: typeof FC) => {
|
|
20
|
-
return
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
return FC.noBias(FC.noShrink(
|
|
21
|
+
fc
|
|
22
|
+
.integer()
|
|
23
|
+
.map((seed) => {
|
|
24
|
+
faker.seed(seed) // seed the generator
|
|
25
|
+
return fakerGen() // call it
|
|
26
|
+
})
|
|
27
|
+
))
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
export const fakerArb = <T>(
|
package/src/utils/logger.ts
CHANGED
|
@@ -2,10 +2,14 @@
|
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
3
|
|
|
4
4
|
import type { LogLevel } from "effect"
|
|
5
|
-
import {
|
|
5
|
+
import { Context, Effect } from "effect"
|
|
6
6
|
|
|
7
7
|
type Levels = "info" | "debug" | "warn" | "error"
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
export class LogLevels extends Context.Reference<LogLevels>()("LogLevels", {
|
|
10
|
+
defaultValue: (): ReadonlyMap<string, Levels> => new Map<string, Levels>()
|
|
11
|
+
}) {}
|
|
12
|
+
|
|
9
13
|
export const makeLog = (namespace: string, defaultLevel: Levels = "warn") => {
|
|
10
14
|
const level = LogLevels.pipe(Effect.andThen((levels) => levels.get(namespace) ?? defaultLevel))
|
|
11
15
|
const withLogNamespace = Effect.annotateLogs({ logNamespace: namespace })
|